DOTY
[Unity] 3. Moving 본문
Transform
모든 오브젝트들은 각각의 Transform을 가지고 있음. ( 1:1 관계 )
따라서 유니티에서는 Transform을 만들어둠. ☞ 이미 초기화가 된 transform 변수가 포함되어있음.
사용 방법
Vector3 vec = new Vector3(0, 0, 0)
translate = Translate(vec);
void Start()에 담을 경우 초기화가 되며 움직일 경우 다시 vec의 값으로 자동 이동되지 않는다.
Vector3 mov_vec = new Vector3(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"), 0);
transform = Translate(mov_vec);
void Update()에 담을 경우 오브젝트가 움직이는 것을 구현할 수 있다.
☞ X와 Y에 그냥 일반 실수를 넣게 되면 그 값으로 등속도 운동을 하는 듯 하다.
Input.GetAxis는 가중치를 받기 때문에 자연스러운 이동이 가능하다. (Float) ☞ 실수를 곱하여 물체 속도도 조절할 수 있다
X축의 경우 좌 / 우의 방향을 결정하므로 Horizontal | Y축의 경우 상 / 하의 방향을 결정하므로 Vertical 로 설정.
☞ 가중치는 -1.0f ~ 1.0f
Move to Goal
MoveTowards
일정한 속도로 이동
Vector3 target = new Vector3(4.09f, 0, 0);
transform.position = Vector3.MoveTowards(transform.position, target, 1.0f);
MoveToward([현재위치], [목표위치], [속도]) 3개의 매개변수를 받는다.
SmoothDamp
목적지까지 감속운동으로 이동
Vector3 velo = Vector3.zero;
Vector3 target = new Vector3(4.09f, 0, 0);
transform.position = Vector3.SmoothDamp(transform.position, target, ref velo, 1.0f);
SmoothDamp([현재위치], [목표위치], [참조 속도], [속도]) 4개의 매개변수를 받는다.
마지막 매개변수[속도]에 반비례하여 속도가 증가한다.
∴최대 속도를 조절하고 싶은 경우에는 5번째 매개변수에 넣으면 된다.
transform.position = Vector3.SmoothDamp(transform.position, target, ref velo, 0.1f, 100f);
Lerp
선형 보간으로 이동
Vector3 target = new Vector3(10f, 0, 0);
transform.position = Vector3.Lerp(transform.position, target, 0.01f);
Lerp([현재위치], [목표위치], [속도]) 3개의 매개변수를 받는다.
속도의 경우 최대 1.0f 까지 가능하다.
∴ SmoothDamp와 비교하면 감속되는 시간이 더 길다.
Slerp
구면 선형 보간으로 이동
Vector3 target = new Vector3(10, 0, 0);
transform.position = Vector3.Slerp(transform.position, target, 0.01f);
Slerp([현재위치], [목표위치], [속도]) 3개의 매개변수를 받는다.
Lerp와 비슷하지만 곡선을 그리며 이동하는 것이 특징이다.
∴ 곡선 이동하는 방향을 바꾸고 싶으면 Bezier를 사용해야한다고 한다..
'Unity' 카테고리의 다른 글
[Unity] 6. Scene 변경 ( + DontDestroyOnLoad ) (0) | 2022.09.07 |
---|---|
[Unity] 5. OnTriggerEnter(Exit)2D (0) | 2022.09.05 |
[Unity] 4. Tilemap (0) | 2022.09.03 |
[Unity] 2. Input (0) | 2022.07.28 |
[Unity] 1. Unity Script 흐름 (0) | 2022.07.28 |