[UNITY] 3D게임 캐릭터 움직이기

     



유니티에서 캐릭터 이동


유니티에서 캐릭터를 이동하는 방법은 구현마다 여러가지 방법이 있을 수 있습니다. 여기서는 transform.Translate를 사용해 캐릭터를 이동해보도록 하겠습니다.


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour {

    protected Rigidbody rb;
    protected float moveSpeed = 0.1f;

    // Use this for initialization
    void Start () {
        rb = GetComponent<Rigidbody>();
    }
    
    // Update is called once per frame
    void Update () {
        if (Input.GetKey(KeyCode.UpArrow))
            transform.Translate(Vector3.forward *moveSpeed);
        if (Input.GetKey(KeyCode.DownArrow))
            transform.Translate(Vector3.back * moveSpeed);
        if (Input.GetKey(KeyCode.LeftArrow))
            transform.Translate(Vector3.left*moveSpeed);
        if (Input.GetKey(KeyCode.RightArrow))
            transform.Translate(Vector3.right *moveSpeed);
        if (Input.GetKey(KeyCode.U))
            transform.Translate(Vector3.up*moveSpeed);
        if (Input.GetKey(KeyCode.D))
            transform.Translate(Vector3.down*moveSpeed);

    }
}

 


위와같은 스크립트를 만들고 플레이어 스프라이트에 적용하면 됩니다.


Input.GetKey() : 사용자의 입력을 받는다. 

- KeyCode.UpArrow : 방향키 위

- KeyCode.DownArrow : 방향키 아래

- KeyCode.LeftArrow : 방향키 왼쪽

- KeyCode.RightArrow : 방향키 오른쪽

- KeyCode.A~Z : 키보드 알파벳


transform.Traslate(Vector3) : transform 객체를 Vector3만큼 이동합니다. transform 객체에 대해 아무 명시를 하지 않으면 this(현재 스크립트가 적용된 객체)를 움직입니다.

ex) transform.Traslate(1,0,0) - 객체를 x방향으로 1만큼 이동합니다.



이제 실행하면 객체가 방향키에 따라 움직이는것을 볼 수 있습니다.

사실 움직이는거는 transform.Translate로만 가능하지만 Rigidbody를 넣은것은 물리엔진을 쓰기 위해서입니다. 현재 U키를 누르면 캐릭터라 위로 올라가고 D를 누르면 아래로 내려갑니다. (z축) 만약 Rigidbody설정이 안되어있다면 중력이 적용되지 않기 때문에 캐릭터가 무중력상태로 무한하게 위로 올라갈 수 있습니다. 하지만 Rigidbody를 설정하고 중력을 적용하면(Use Gravity) 캐릭터가 중력때문에 위로 올라가다 떨어집니다. 사실적인 점프를 구현할 수 있습니다.


캐릭터가 스스로 이동하는 것이 아니라 누군가가 해당 방향으로 이동시키는 느낌을 주려면 Rigidbody에 Addforce를 이용하면 됩니다. Addforce는 Translate와 비슷하지만 외부의 힘에 의해 움직이는 것을 표현합니다. 가령 캐릭터가 벽을 미는경우 캐릭터의 움직임은 Translate지만 벽의 움직임은 캐릭터가 벽에게 가하는 힘인 Addforce로 구현합니다. Addforce의 경우 물체의 마찰계수에 영향을 받기 때문에 Mass(물질)에 대한 정의도 필요합니다.

반응형

댓글

Designed by JB FACTORY