Unity에서는 게임 오브젝트의 이동, 회전, 점프, AddForce 및 Velocity(응용 프로그램 오브젝트 자체의 속도), LookAt(오브젝트를 바라보는 것) 및 RotateAround를 요약합니다.
1. 알아야 할 사항
2. 이동
3. 회전
4. AddForce 및 Velocity – 타격 개체
5. 점프 및 점프 프로그래밍(Jump)
6. 카메라 회전, LookAt, RotateAround
1. 알아야 할 사항
정규화 벡터/단위 벡터
벡터는 크기와 방향을 나타낼 수 있는 데이터 타입으로, 각 축의 크기가 1인 벡터를 정규화 벡터 또는 단위 벡터라고 합니다.
방향만 보여주는 벡터라고 생각하시면 됩니다.
Vector3 구조의 지정된 방향을 가리키는 정규화된 벡터입니다.
Z축(+) | Vector3.forward = 벡터3(0, 0, 1) |
Z축(+) | Vector3.back = Vector3(0, 0, -1) |
X축(-) | Vector3.left = 벡터3(-1, 0, 0) |
X축(+) | Vector3.right = 벡터3(1, 0, 0) |
Y축(+) | Vecotr3.up = Vector3(0, 1, 0) |
Y축(-) | Vector3.down = 벡터3(0, -1, 0) |
Vector3.one = 벡터3(1, 1, 1) | |
Vector3.zero = 벡터3(0, 0, 0) |
vector3.forward *1 순방향 * 속도와 동의어입니다.
컴포넌트 캐시 처리는 스크립트에서 접근해야 하는 컴포넌트를 Awake 또는 Start 함수의 변수에 미리 할당한 후 이 변수를 통해 접근하는 것입니다.
성능면에서는 계속 찾아야 하므로 변수에 저장하는 것이 좋습니다.
번역 기능
Transform 컴포넌트의 position 속성값을 계산하여 GameObject의 이동 로직을 이동시키면
번거롭고 코드 가독성이 떨어지지만 Unity에서 쉽게 사용할 수 있는 Translate 기능이 있습니다.
무효 업데이트()
{
tr.Translate(Vector3.forward * 1.0f);
}
이렇게도 표현할 수 있습니다.
Translate 함수의 두 번째 매개변수는 움직이는 게임 개체가 세계 좌표(Space.World)를 기준으로 이동할지 여부를 지정합니다.
로컬 좌표(Space.Self)에 따라 이동할지 여부를 결정합니다.
참조 좌표계 요소를 생략하면 로컬 좌표를 기준으로 이동합니다.
Time.deltaTime 정보…
Time.deltaTime을 곱하면 PC나 모바일 등 사양이 달라 프레임이 달라도 같은 거리를 이동하는데 시간을 쓸 수 있다.
public으로 선언되고 인스펙터 뷰에 노출되는 변수의 우선순위

스크립트에서 moveSpeed의 속성 값은 10.0f입니다.
단, 인스펙터 뷰에서 Move Speed를 변경하면 스크립트와 상관없이 인스펙터 뷰에서 설정한 값이 적용됩니다.
접근 수정자가 public이면 스크립트에 지정된 값은 무시되고 인스펙터 뷰에서 설정한 값이 적용됩니다.
2. 이동
개체 이동 – 1(절대 좌표 이동)
스크립트를 배치하면 (0, 1, 0)으로 이동합니다.
객체 이동 – 2(팬 기능)
스크립트를 넣으면 2초 후 현재 위치에서 Y축으로 2칸 이동하는 것을 볼 수 있다.
캐릭터 이동 시도 – 예
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Move3 : MonoBehaviour
{
float speed = 100f;
void Update()
{
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
// 콘솔창 로그
Debug.Log("h : " + h + ", " + "v :" + v);
h = h * speed * Time.deltaTime;
v = v * speed * Time.deltaTime;
this.transform.Translate(Vector3.right * h);
this.transform.Translate(Vector3.forward * v);
}
}
스크립트를 작성하여 개체를 이동할 수 있습니다.
3. 회전
개체 회전 – 1(절대 각도 회전)

스크립트가 실행되면 객체는 2초 후에 Y축(0f, 45f, 0f)을 기준으로 45도를 보고 4초 후에 90도를 보고 90도가 됩니다.
객체 회전 -2(현재 각도를 기준으로 회전)
Vector3.up(0, 1, 0)을 기준으로 시간이 지남에 따라 계속 회전합니다.
객체 회전 – 3(키 입력 수신)
객체를 이동하는 것과 마찬가지로 속도를 지정하여 벡터를 회전할 수도 있습니다.
4. AddForce 및 Velocity(불고 있는 물체)
AddForce 및 Velocity의 기능
1. 애프터버너
속도는 품질에 달려 있습니다.
2. Velocity(물체에 자체 속도 제공)
속도는 품질에 관계없이 동일합니다.
자체 속도를 제공하기 때문입니다.
강체
물리적인 움직임 기능을 수행하는 컴포넌트로 Add Component에서 추가할 수 있습니다.


AddForce와 Velocity의 차이를 확인하려면 비교 중인 오브젝트의 Mass 값을 변경하십시오.
AddForce 사용 – 개체 불기

큐브 오브젝트를 마우스 왼쪽 버튼으로 클릭하면 AddForce 기능을 통해 속도 벡터에 power와 같은 힘이 적용됩니다.
우클릭 시 rb.velocity = new Vector3(0f, 0f, 0f);를 전달하여 속도를 0으로 초기화합니다.
큐브 개체의 위치 및 회전 값(즉석에서 회전할 수 있으므로)은 초기 값으로 초기화할 수 있습니다.
강체의 질량 값을 변경하면 속도가 달라집니다.
속도 사용 – 물체 타격
마우스 왼쪽 버튼을 클릭하면 개체가 같은 방식으로 날아갑니다.
그러나 질량이 변해도 속도는 변하지 않고 그대로 유지되는 것을 볼 수 있습니다.
4. 점프 및 점프 프로그래밍(Jump)
애드포스 – 점프

AddForce를 이용하여 Y축 방향으로 점프하면 질량에 따라 이동 거리가 달라지는 것을 확인할 수 있다.
속도 – 점프

Velocity를 Y축 방향으로 점프하면 질량이 달라도 이동거리는 같다.
점프 프로그래밍

속도를 중력 변수로 설정하고 물체의 좌표, 속도 및
FirstPos = velocity = transform.position;은 firstPos 변수에 첫 번째 위치를 저장합니다.
스페이스 바를 누르면 값이 증가하고 velocity.y는 0.5f씩 오르내리며 음수가 되면 내려갑니다.
이때 (velocity.y < firstPos.y)가 조건이 아니면 바닥 아래로 사라진다.
초기 위치보다 작은 경우 초기 y 위치로 이동하여 bool type isJump를 false로 변경하고 점프를 종료합니다.
점프 프로그래밍을 하는 이유는 Rigidbody를 통해 AddForce나 Velocity 점프를 사용하는 것보다 가벼운 성능을 얻을 수 있기 때문입니다.
5. 카메라 회전, 보기, 회전
카메라 각도 회전(마우스 이동) – 마우스 모양

마우스 움직임에 따라 X 및 Y 좌표를 읽어 카메라를 회전합니다.
턴이 너무 많으면 턴이 반대로 되므로 if 문을 사용하여 제한할 수 있습니다.
보다


BlueCube라는 게임 개체를 찾고 대상 Transform 구성 요소 개체를 가져와서 blueTr에 저장합니다.
Update()에서 LookAt 함수를 사용하여 이동하는 BlueCube를 확인합니다.
RotateAround – 회전


NewCube(위 이미지의 중앙 큐브 개체)라는 게임 개체를 찾아 newTr에 저장합니다.
RotateAround 함수에서
newTr.position의 위치를 중심으로
Y축 기준 vector3.up
속도로 회전 * Time.deltaTime
newTr 변수에 저장된 “NewCube” 개체를 찾습니다.