![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl9Ywd%2FbtqIZnskCDR%2FMz7BZZaKaXx9DqKAhmvMYk%2Fimg.png)
[TIL] 2020-09-20
2020. 9. 21. 02:56
TIL(Today I Learned)
Button Event Canvas의 Render Mode를 변경하면 다른 방식으로 출력할 수 있다. Screen Space - Overlay는 가상의 카메라가 찍고 있는다고 생각하면 편하다. Button이 눌렸을 때 실행될 함수는 Button의 On Click()에 등록하면 된다. UI 같은 경우, 해당 UI를 눌렀을 때 본인이 아니라 다른 오브젝트(플레이어, 다른 UI 등)를 동작하게끔 구현해야 할 수도 있기 때문에 Object를 선택하는 칸 또한 존재한다. Canvas를 하나의 Prefab으로 저장해서 사용하면 된다. 부모 오브젝트에 사용할 Script를 붙이고, 부모 오브젝트를 Object에 끌어다 놓는다. 그리고 Script 내에서 public으로 선언한 함수를 지정해 주면 된다. UI 버튼을 ..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk3Rxp%2FbtqITvjA4kr%2FO16CknG1Q2KWc5vevkqNM0%2Fimg.gif)
[TIL] 2020-09-17
2020. 9. 17. 23:38
TIL(Today I Learned)
State Machine Jump 시, 위로 올라가는 모션+위에서 허우적대는 모션+아래로 내려오는 모션 이런 식으로 구현할 때 유용하다. Layer는 상하체 분리 애니메이션 등에 응용할 수 있다. 스킬 구현? => 하나씩 state로 만들면 관리하기 어려워진다... 스킬마다 모션이 다른 경우가 대부분이다. 따라서 기본적인 부분은 State Machine으로 만들고, 스킬은 블렌딩처럼 따로 관리하는 경우가 많다. KeyFrame Animation 하늘 위를 나는 새 같은 경우, 해당 나는 모션만 애니메이션 처리를 하는 거지, 게임 월드에서 돌아가는 경로는 따로 지정해 줘야 한다. => 게임에 종속적으로 특정 행동대로 딱 움직이길 원하는 경우. Add Key: 해당 지점에서 변화가 일어날 것이다. 예를 들어..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLVOjK%2FbtqIRNR0kJY%2FTmk9Ge6OkQjrDZpJwwnxFk%2Fimg.gif)
[TIL] 2020-09-16
2020. 9. 16. 23:46
TIL(Today I Learned)
Camera Input Manager에 마우스 처리 기능을 추가한 후, Player Controller에서 화면 클릭 시 해당 좌표로 이동하게끔 구현했다. private void Update() { if(_moveToDest) { // 바닥을 찍었을 때 그쪽으로 감 Vector3 dir = _destPos - transform.position; // 도착했다면 if (dir.magnitude < 0.0001f) { _moveToDest = false; } else { transform.position = transform.position + dir.normalized * _speed * Time.deltaTime; transform.LookAt(_destPos); } } } 이동은 하는데... 무서워졌다..
[TIL] 2020-09-09
2020. 9. 9. 23:52
TIL(Today I Learned)
LayerMask Raycasting은 무거운 작업이기 때문에 신중하게 사용해야 한다. Mesh Collider를 사용하게 되면 연산 부하가 어마어마해진다. 그래서 복잡한 모델링의 경우, 대략적으로 표현할 수 있는 충돌용 Collider를 만들어서 처리한다. 그러나 오브젝트 개수가 늘어나고, 충돌 체크해야 하는 Collider가 늘어나다 보면 Raycasting 자체도 연산이 무거워질 수밖에 없다. Raycasting의 예제로 살펴봤던 카메라 처리 같은 경우에는 환경 오브젝트만 처리하면 되고, 캐릭터의 이동 및 공격 처리는 바닥을 누르거나 상대 몬스터를 클릭했는지만 처리하면 된다. => Layer Mask 사용! Layer Mask는 Bit Flag를 이용한다. if (Input.GetMouseButto..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuOEcz%2FbtqH4lijhdt%2FtCYJ71NjbuybTsQaSVfLmK%2Fimg.gif)
[TIL] 2020-09-07
2020. 9. 8. 02:08
TIL(Today I Learned)
Trigger docs.unity3d.com/kr/2018.4/Manual/CollidersOverview.html 콜라이더 - Unity 매뉴얼 콜라이더(Collider) 컴포넌트는 물리 충돌 처리를 위한 오브젝트의 형태를 정의합니다. 콜라이더는 보이지 않는 요소이므로 오브젝트의 메시와 정확히 동일한 모양일 필요는 없으며, 실제로는 게� docs.unity3d.com OnCollisionEnter처럼 물리적인 충돌이 일어날 경우, 물리적인 연산을 하기 위해서 굉장히 많은 부하가 일어난다. => is Trigger 둘 중 하나라도 is Trigger가 켜져 있으면 물리 연산을 진행하지 않고, Trigger가 발생하고 종료하게 된다. public class TestCollision : MonoBehavio..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOrxUk%2FbtqH0VRk4Qw%2Fs6fo3dimsanTT7c64kw41K%2Fimg.gif)
[TIL] 2020-09-06
2020. 9. 7. 00:53
TIL(Today I Learned)
Resource Manager public class PrefabTest : MonoBehaviour { GameObject prefab; GameObject tank; void Start() { // Load 기준: Resources 폴더 prefab = Resources.Load("Prefabs/Tank"); tank = Instantiate(prefab); // 생성 Destroy(tank, 3.0f); // 삭제 } } 누가 언제 뭘 만드는지 관리하기가 힘들기 때문에 하나의 Manager로 처리하는 편이 좋다. 폴더 정리 Shader: 빛이 플레이어를 관통했을 때 어떻게 반사되느냐를 정의하는 파일이라고 생각하면 된다. Model Prefab은 Prefab이 아니라 그냥 별도의 Model, 애셋이라..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbz2XVv%2FbtqH3DIZ1Gr%2FtQ9xkxC6RvOpXhIYKzKLtK%2Fimg.png)
[TIL] 2020-09-05
2020. 9. 6. 01:02
TIL(Today I Learned)
Prefab 기존 값을 덮어 쓸 수 있다. (Prefab의 override) 원본 Prefab의 값을 변경하면 기본 값을 적용하고 있던 Prefab들에게는 영향을 끼치나, 해당 값을 override한 Prefab에는 영향을 끼치지 않는다. Inspector View에서 override한 Prefab들을 한번에 확인 가능하다. 중첩된(Nested) Prefab(Pre-Fabrication) Prefab들을 엮어서 또 하나의 Prefab으로 만든다. 이 경우에도 부속 Prefab의 정보를 수정할 경우, 이를 묶어서 가지고 있는 큰 개념의 Prefab에도 반영이 된다. 단 override 개념은 동일하게 적용됨에 주의한다! Prefab Variant - Prefab의 상속 개념 이미 Prefab인 Object..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeH55oP%2FbtqHU83swdZ%2F5yReTNK5ckjSYB955R45CK%2Fimg.png)
[TIL] 2020-09-03
2020. 9. 4. 00:18
TIL(Today I Learned)
Rotation Do not set one of the eulerAngles axis separately (eg. eulerAngles.x = 10; ) since this will lead to drift and undesired rotations. When setting them to a new value set them all at once as shown above. eulerAngles 축 중 하나를 별도로 설정하지 마라. (예: eulerAngles.x = 10;) 이는 표류(drift) 및 원치 않는 회전을 유발한다. 새 값으로 설정할 때는 모두 한꺼번에 설정하라. (예: transform.eulerAngles = new Vector3(0.0f, 0.0f, 0.0f);) docs.unity3..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7oxtE%2FbtqHMwDQUsy%2FSG5CFp3OYQVMvxTLqmZ6K0%2Fimg.png)
[TIL] 2020-09-02
2020. 9. 2. 23:56
TIL(Today I Learned)
Position Update()는 한 프레임당 실행된다. 60 프레임이라고 했을 경우, 1/60초마다 Update() 함수가 호출되는 셈이다. 따라서 해당 코드를 실행하면 플레이어가 비정상적으로 빠르게 움직인다. void Update() { if(Input.GetKey(KeyCode.W)) { transform.position += new Vector3(0.0f, 0.0f, 1.0f); } if(Input.GetKey(KeyCode.S)) { transform.position -= new Vector3(0.0f, 0.0f, 1.0f); } if (Input.GetKey(KeyCode.A)) { transform.position -= new Vector3(1.0f, 0.0f, 0.0f); } if (Inp..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIBymC%2FbtqHJjYSjbc%2F4VKgHHlfjHH6uWqxuqcrJK%2Fimg.png)
[TIL] 2020-09-01
2020. 9. 1. 20:50
TIL(Today I Learned)
Component 패턴 게임 엔진 공부 시 "원리"를 이해하는 것이 중요하다. 디자인 패턴 -> 코드 작성 방법론 설계를 신경 안 쓰고 기능 구현 코드를 update에 전부 다 때려넣으면 언젠가는 다 벌을 받는다. (!!) => Component Pattern 모든 코드를 '부품화'해서 관리를 하는 것이 핵심이다. AnimationComponent _anim = new AnimationComponent(); SkillComponent _skill = new SkillComponent(); PhysicsComponent _physics = new PhysicesComponent(); // 사용 시... _anim.Update(deltaTick); _skill.Update(deltaTick); _physic..