Unity에서 GameObject를 이동시키는 방식에 대해 다룬다. 기본기이지만, 유닛들이 거의 움직이지 않는 게임들 위주로 만들고 연습하다 보니 쓸 일이 생각보다 없어서 따로 가볍게 정리해 놓는다.
1. Transform.Translate
[SerializeField] private Vector3 directionalVector;
[SerializeField] private float speed;
private bool _isMoving = false;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Return))
{
_isMoving =!_isMoving;
}
if (_isMoving)
{
transform.Translate(directionalVector*(speed*Time.deltaTime));
}
}
주의해야 할 점은 default 값이 local 좌표계라는 점이다. 따로 설정하지 않거나, Translate(directionalVector*(speed*time.deltaTime), Space.Self)와 같이 작성하면 자기 자신의 로컬 좌표계를 기준으로 움직인다. World Space를 기준으로 움직이게 하려면 Space.World를 이용해야 한다.
2. transform.position 변경
직접적으로 object의 transform.position 값을 변경하는 방식이다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Translate : MonoBehaviour
{
[SerializeField] private Vector3 directionalVector;
[SerializeField] private float speed;
private bool _isMoving = false;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Return))
{
_isMoving =!_isMoving;
}
if (_isMoving)
{
//transform.Translate(directionalVector*(speed*Time.deltaTime), Space.Self);
transform.position += directionalVector * (speed * Time.deltaTime);
}
}
}
주의할 점은 앞서 Translate 함수를 이용한 이동이 local 좌표계를 기본으로 하며 경우에 따라 world 좌표계를 그 기준으로 선택할 수 있었던 것에 비해, transform.position을 직접 변경하는 방식은 world 좌표계만을 기준으로 한다는 점이다.
이 두 가지 방법이 가장 기본적인 방법이다.
'게임개발 > Unity' 카테고리의 다른 글
[Unity] JSON 이용하여 데이터 저장하기 (0) | 2024.08.28 |
---|---|
[Unity] ScriptableObject (0) | 2024.06.09 |
[Unity] 게임오브젝트의 회전 (1) | 2024.06.08 |
[Unity] Unity Event (0) | 2024.06.07 |
[Unity-UI] Canvas - Render Mode (1) | 2023.11.12 |