저번 글에서는 오브젝트를 가져오는 방법에 대해서 알아봤습니다.

 

이번글에서는 오브젝트를 움직이기에 필요한 정보들을 정리해보겠습니다.

굉장히 딱딱하고 복잡합니다. ChatGPT를 이용해 정리했고 원하시는 정보만 확인하세요 ㅠㅠ

 

전부 다 보는건 두고두고 봐야할 듯합니다.ㅜㅜ

 

 

 

유니티에서 오브젝트를 움직이려면 다양한 개념과 이론을 이해해야 합니다. 
이를 통해 게임 오브젝트의 움직임을 정확하게 제어하고, 자연스럽고 일관된 애니메이션을 구현할 수 있습니다. 
아래에 유니티에서 오브젝트를 움직일 때 알아야 할 주요 개념과 이론들을 정리해 드리겠습니다.

1. Transform 컴포넌트

1.1 Position (위치)
설명: Transform.position은 월드 좌표계에서 오브젝트의 위치를 나타냅니다.
용도: 오브젝트의 위치를 이동시킬 때 사용합니다. Vector3 구조체로 표현되며, x, y, z 축으로 나뉩니다.

1.2 Rotation (회전)
설명: Transform.rotation은 오브젝트의 회전을 쿼터니언(Quaternion)으로 나타냅니다.
용도: 오브젝트를 회전시킬 때 사용합니다. 쿼터니언은 회전과 관련된 많은 문제를 해결해주지만, 인간이 이해하기 쉬운 오일러 각도로 변환하려면 Transform.rotation.eulerAngles를 사용합니다.

1.3 Scale (크기)
설명: Transform.localScale은 오브젝트의 크기를 나타냅니다.
용도: 오브젝트의 크기를 조정할 때 사용됩니다. 기본적으로 Vector3로 표현되며, 각 축에서의 스케일링을 정의합니다.

1.4 Parent-Child 관계
설명: 오브젝트 간의 부모-자식 관계를 정의할 수 있습니다. 자식 오브젝트의 Transform은 부모의 Transform에 상대적입니다.
용도: 복잡한 오브젝트 구조를 관리할 때 유용합니다. 예를 들어, 캐릭터의 손에 무기를 들게 할 때 무기를 캐릭터의 손에 자식으로 설정하면, 캐릭터가 움직일 때 무기도 함께 움직입니다.

2. Physics (물리 엔진)
2.1 Rigidbody
설명: Rigidbody는 유니티의 물리 엔진과 상호 작용하여 물리적인 움직임을 구현합니다.
용도: 중력, 충돌, 마찰 등 물리적인 요소를 오브젝트에 적용할 수 있습니다.

주요 속성:
mass: 질량을 나타내며, 힘을 받을 때의 반응을 결정합니다.
drag: 공기 저항을 나타내며, 오브젝트가 움직임을 멈추는 속도를 결정합니다.
angularDrag: 회전 저항을 나타냅니다.
useGravity: 중력을 적용할지 여부를 결정합니다.
isKinematic: 이 값이 true로 설정되면, 오브젝트는 물리 엔진의 영향을 받지 않고 수동으로 제어됩니다.

2.2 Colliders (충돌체)
설명: Collider는 물리적인 충돌을 감지하는 컴포넌트입니다. BoxCollider, SphereCollider, CapsuleCollider 등의 다양한 형태가 있습니다.
용도: 오브젝트 간의 충돌을 처리하거나 물리적인 상호 작용을 구현할 때 사용합니다.
Trigger: 충돌 감지는 하지만 실제 물리적 충돌이 발생하지 않도록 설정할 수 있습니다. 이를 통해 이벤트 트리거로 활용할 수 있습니다.

2.3 Physics Materials
설명: 물리 재질은 충돌 시의 마찰과 탄성(반발력)을 정의합니다.
용도: 서로 다른 물리적 특성을 가진 표면 간의 상호 작용을 설정합니다. 예를 들어, 얼음과 같은 미끄러운 표면은 낮은 마찰력을 설정할 수 있습니다.

3. Scripting (스크립트)
3.1 Update vs. FixedUpdate
Update(): 매 프레임마다 호출되며, 주로 애니메이션, 입력 처리, UI 업데이트에 사용됩니다. Time.deltaTime을 사용하여 프레임에 독립적인 움직임을 구현합니다.
FixedUpdate(): 고정된 시간 간격마다 호출되며, 주로 물리적인 계산에 사용됩니다. Time.fixedDeltaTime을 사용하여 일정한 간격으로 물리 연산을 처리합니다.

3.2 Input Handling (입력 처리)
설명: 키보드, 마우스, 터치 입력을 받아서 오브젝트를 제어할 수 있습니다.
예시: Input.GetAxis("Horizontal")을 사용하여 플레이어의 왼쪽, 오른쪽 움직임을 제어할 수 있습니다.

3.3 Coroutines
설명: 코루틴은 멈췄다 재개할 수 있는 특수한 함수입니다. StartCoroutine을 통해 실행되며, yield return을 사용하여 특정 시간 동안 동작을 멈추고 다시 실행할 수 있습니다.
용도: 일정 시간 후에 특정 작업을 수행하거나, 비동기적 움직임을 구현할 때 유용합니다.

4. Vector Mathematics (벡터 수학)

4.1 Vector3
설명: 3D 공간에서의 위치, 방향, 크기를 나타내는 구조체입니다.
주요 메서드:
Vector3.Distance: 두 점 사이의 거리를 계산합니다.
Vector3.Lerp: 두 점 사이를 선형 보간하여 특정 위치를 계산합니다.
Vector3.MoveTowards: 한 점에서 다른 점까지 일정 속도로 이동합니다.

4.2 Direction Vectors (방향 벡터)
설명: 두 점 간의 방향을 나타내는 벡터입니다. 두 위치 벡터를 빼서 얻을 수 있습니다.
용도: 오브젝트의 움직임 방향을 결정할 때 사용합니다.

5. Animator & Animation

5.1 Animator
설명: Animator 컴포넌트는 오브젝트의 애니메이션을 제어합니다.
용도: 애니메이션 클립을 재생하거나 상태를 전환하여 오브젝트의 움직임을 시각적으로 표현합니다.

5.2 Animation Clips
설명: 개별 애니메이션을 정의하는 클립입니다. 이동, 회전, 크기 변화 등 다양한 트랜스폼 변화를 포함할 수 있습니다.
용도: Animator에서 상태로 사용하거나 직접 재생할 수 있습니다.

6. Navigation (네비게이션)

6.1 NavMesh
설명: NavMesh는 유니티에서 AI 기반 캐릭터가 경로를 찾을 수 있는 표면입니다.
용도: AI 캐릭터가 복잡한 지형을 탐색하거나 목표 지점으로 이동할 때 사용합니다.

6.2 NavMeshAgent
설명: NavMeshAgent는 AI 캐릭터가 NavMesh 상에서 이동할 수 있게 해주는 컴포넌트입니다.
용도: 목표 지점까지 경로를 계산하고, 그 경로를 따라 움직입니다.

7. Camera & View

7.1 Camera Movement
설명: 카메라는 게임 내에서 플레이어가 세상을 어떻게 볼지를 결정합니다.
용도: 카메라를 이동시키거나 회전시켜서 플레이어가 특정 오브젝트를 추적하거나 특정 각도에서 게임을 보게 할 수 있습니다.

7.2 Cinemachine
설명: Cinemachine은 유니티에서 제공하는 고급 카메라 시스템입니다. 다양한 카메라 시점 전환과 자동 추적 기능을 제공합니다.
용도: 복잡한 카메라 작업을 간단하게 구현할 수 있습니다.

8. Time Management

8.1 Time.deltaTime vs. Time.fixedDeltaTime
설명: 앞서 설명한 것처럼, Time.deltaTime은 매 프레임의 시간 간격을, Time.fixedDeltaTime은 물리 연산 간의 고정된 시간 간격을 나타냅니다.
용도: 프레임 독립적인 움직임과 물리 기반 연산의 일관성을 위해 각각 적절하게 사용됩니다.

8.2 Time.timeScale
설명: 게임의 전체 시간 흐름 속도를 조정합니다. 1이 기본값이며, 0으로 설정하면 게임이 일시 정지됩니다.
용도: 슬로우 모션 효과나 일시 정지 기능을 구현할 때 사용됩니다.

이런 개념과 이론을 이해하고 있으면, 유니티에서 오브젝트를 제어할 때 유용하게 활용할 수 있습니다. 
특히 Transform, Rigidbody, Vector3와 같은 기초 개념을 확실히 이해하면 더 복잡한 기능을 구현할 때도 쉽게 접근할 수 있습니다.

 

 

+ Recent posts