728x90

목차.

  1. 서론
  2. 코드 작성
  3. 결론

 

서론

 

이동 방식은  transform.Translate, addForce, character controller 등 다양한 방법을 이용해 이동 구현이 가능합니다.

이번 글에서는 Translate를 이용해서 이동을 구현해 보겠습니다.

 

코드 작성

 

public class Player : MonoBehaviour
{
	Transform pTransform;
    private float moveSpeed =10.0f;
    float hAxis;
    float vAxis;
    Vector3 moveDir;
    void Start()
    {
    	pTransform = GetComponent<Transform>();
    }
    void Update()
    {
    	Move();
    }
    void Move()
    {
    	hAxis = Input.GetAxisRaw("Horizontal");
        vAxis = Input.GetAxisRaw("Vertical");
        moveDir = (Vector3.forward * vAxis)+(Vector3.right * hAxis);
        pTransform.Translate(moveDir.normalized * Time.deltaTime * moveSpeed);
    }
}

 

Input.GetAxis 두 가지 종류가 있는데 

 

Input.GetAxis(string name)

-1.0f부터 1.0f까지의 범위의 값을 반환한다. 

 

Input.GetAxisRaw(string name)

-1, 0, 1 세 가지 값 중 하나가 반환된다. 

 

저는 Input.GetAxisRaw를 사용하겠습니다

 

hAxis horizontal 가로 입력값 즉 키보드 좌 우 입력을 받아오고

vAxis vertical 세로 입력값 즉 키보드 위아래 입력을 받고 있습니다.

 

 


벡터 정규화

 

여기서 moveDir.normalized를 해주었는데 이것을 벡터 정규화라고 합니다.

 

만약 왼쪽 방향키 위 방향키 동시에 누르면 이동 속도가 하나만 눌렀을 때와 같을까요?

각각 속도가 1이라고 했을 때 대각선 벡터로 약 1.41의 속도가 나옵니다.

 

이러한 현상을 방지하기 위해 정규화를 해주는 것입니다.


Time.deltatime

 

게임을 하는데 상대방은 사양이 좋아 50 프레임이 나오고

 

본인의 컴퓨터는 그보다 좋지 않아 30 프레임이 나오는데 높은 프레임이 나오는 사람은 이동속도가 더 빠르면 어떨까요?

 

1 프레임당 10cm 이동한다고 할 때 상대방은 5m를 이동하고 저는 3m를 이동할 것입니다.

 

이러한 문제점을 해결하기 위해 사용되는 것이 Time.deltatime입니다 

Time.deltatime을 사용함으로써 두 유저의 이동 거리는 같아질 것입니다.

 

결론

 

transform.Translate를 이용해 오브젝트 이동을 구현해 봤습니다.

이동 구현 과정에서 정규화와 Time.deltatime을 사용였습니다.

 

 

728x90

+ Recent posts