Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- AWAKE
- 접근 제한자
- LateUpdate
- Unity
- 불러오기
- 게임모작
- Transform
- 초기화
- private
- C#
- JSON
- LINQ
- 죽림고수
- ScriptableObject
- 게임제작
- 이동
- 저장
- OnEnable
- protected
- start
- 이벤트 함수
- iNTERNAL
- Update
- SerializeField
- 오브젝트
- 게임개발
- 모작
- public
- FixedUpdate
- 직렬화
Archives
- Today
- Total
정명직의 게임개발
[Unity] 오브젝트를 움직여 보자! 본문
오브젝트를 이동 시키는 것은 게임에서 가장 중요한 요소 중에 하나 입니다.
유니티에서는 상황에 맞게 여러가지 방법을 통해 오브젝트를 이동 시킬 수 있습니다. 이제 간단한 방법들을 살펴보겠습니다.
Transform
private void Update()
{
// 오브젝트를 상대적으로 이동시키기
transform.Translate(Vector3.right * Time.deltaTime);
}
Transform.Translate
함수는 현재 게임오브젝트의 위치를 기준으로 상대적인 Vector3의 방향으로 이동합니다.
장점
- 사용이 간단하며, 기본적인 이동을 요구하는 간단한 게임에 적합합니다.
- 추가적인 컴포넌트나 스크립트가 필요하지 않습니다.
단점
- 충돌 감지와 관련해서 문제를 일으킬 수 있습니다.
Rigidbody
private void Start()
{
// 이동할 오브젝트의 Rigidbody 컴포넌트 가져오기
Rigidbody rigid = gameObject.GetComponent<Rigidbody>();
// 이동할 방향 설정
Vector3 dir = new Vector3(1f, 0f, 0f);
// 힘을 가해 오브젝트 이동
rigid.AddForce(dir);
}
Rigidbody.AddForce
함수는 오브젝트에 힘을 가해 이동시킵니다.
장점
- 이 방법은 물리 기반 이동을 요구하는 게임에 적합하며, 현실적인 움직임과 충돌 감지가 가능합니다.
단점
- 물리 시뮬레이션에 의존하기 때문에 다른 물체와 상호작용할 때 예측하기 어려운 동작을 보일 수 있습니다.
CharacterController
CharacterController characterController;
private void Start()
{
// 이동할 오브젝트의 CharacterController 컴포넌트 가져오기
CharacterController characterController = GetComponent<CharacterController>();
}
private void Update()
{
// 이동할 방향 설정
Vector3 dir = new Vector3(1f, 0f, 0f);
// 캐릭터 이동
characterController.Move(dir * Time.deltaTime);
}
CharacterController.Move
함수는 주어진 방향으로 오브젝트를 이동시킨다.
장점
- 정확한 충돌 감지가 가능하며, 정밀한 이동이 필요한 게임에 적합합니다. 예를 들어 FPS나 액션 게임 등에서 많이 사용됩니다.
단점
- CharacterController을 사용하면 Rigidbody를 사용할 수 없으므로, 중력효과의 연출을 위해서 별도의 처리과정이 필요하게 됩니다.
NavMeshAgent
private NavMeshAgent navMeshAgent;
private void Start()
{
// NavMeshAgent 컴포넌트 가져오기
navMeshAgent = GetComponent<NavMeshAgent>();
}
private void Update()
{
if (Input.GetMouseButtonDown(0))
{
// 마우스 클릭한 위치로 Ray 생성
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
// 클릭한 위치로 이동 목적지 설정
navMeshAgent.SetDestination(hit.point);
}
}
}
NevMeshAgent.SetDestination
함수는 NavMesh 상에서 이동 목적지를 설정하는 역할을 합니다. 이 함수를 사용하여 오브젝트가 원하는 위치로 이동하도록 지시할 수 있습니다.
장점
- 방법은 AI와 관련된 게임에서 쉽게 사용할 수 있으며, 경로 탐색과 이동을 자동으로 처리하기 때문에 코딩이 쉽다.
단점
- 메서드를 호출하는시점에 이동 경로를 계산하기 때문에, 경로 계산에 시간이 걸릴 수 있습니다.
- 자동으로 경로를 계산하기 때문에, 특정 상황에서는 세밀한 제어가 어려울 수 있습니다.
이 중에서 프로젝트의 요구사항과 상황에 맞는 방법을 선택하여 오브젝트를 이동시키면 됩니다.
오브젝트 이동 방법에는 더 많은 기능과 세부 옵션이 있으니, 관심 있는 내용을 더 탐구하시길 권장합니다.
'Unity' 카테고리의 다른 글
[Unity] ScriptableObject 한방에 이해하기 (1) | 2023.07.10 |
---|---|
[Unity] SerializeField, Serializable ?? (0) | 2023.07.06 |
[Unity] JSON 저장 & 불러오기 구현하기 (2) | 2023.07.03 |