본문 바로가기
Unity/3d MMORPG

[Unity] Position

by 후야- 2024. 3. 31.

◾ 원래 Transform 찾으려면 GameObject > transfrom 찾았어야 했는데, 너무 많이 쓰다보니 transform 만 쳐도 나옴!

 

이동 구현하기

1. 가장 기본적인 방법 (월드 지표 기준이라 Rotation 을 틀었을 경우 따라가지 못함)

    [SerializeField] float _speed = 10.0f;
        if (Input.GetKey(KeyCode.W))
            transform.position += new Vector3(0.0f, 0.0f, 1.0f) * Time.deltaTime * _speed;
        if (Input.GetKey(KeyCode.S))
            transform.position += new Vector3(0.0f, 0.0f, -1.0f) * Time.deltaTime * _speed;
        if (Input.GetKey(KeyCode.A))
            transform.position += new Vector3(-1.0f, 0.0f, 0.0f) * Time.deltaTime * _speed;
        if (Input.GetKey(KeyCode.D))
            transform.position += new Vector3(1.0f, 0.0f, 0.0f) * Time.deltaTime * _speed;

 

2. 월드 지표 기준을 로컬 지표 기준으로 바꾸기

        if (Input.GetKey(KeyCode.W))
            transform.position += transform.TransformDirection(Vector3.forward * Time.deltaTime * _speed);
        if (Input.GetKey(KeyCode.S))
            transform.position += transform.TransformDirection(Vector3.back * Time.deltaTime * _speed);
        if (Input.GetKey(KeyCode.A))
            transform.position += transform.TransformDirection(Vector3.left * Time.deltaTime * _speed);
        if (Input.GetKey(KeyCode.D))
            transform.position += transform.TransformDirection(Vector3.right * Time.deltaTime * _speed);

 

 

3. 그냥 Translate 사용하기

        if (Input.GetKey(KeyCode.W))
            transform.Translate(Vector3.forward * Time.deltaTime * _speed);
        if (Input.GetKey(KeyCode.S))
            transform.Translate(Vector3.back * Time.deltaTime * _speed);
        if (Input.GetKey(KeyCode.A))
            transform.Translate(Vector3.left * Time.deltaTime * _speed);
        if (Input.GetKey(KeyCode.D))
            transform.Translate(Vector3.right * Time.deltaTime * _speed);

 

 

 

4.  Slerp 사용 시 월드 좌표 사용하기 (따로 함수화 해서 밑으로 빼기)

void OnKeyboard()
{
    if (Input.GetKey(KeyCode.W))
    {            
        transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Vector3.forward), 0.2f);            
        transform.position += Vector3.forward * Time.deltaTime * _speed;
    }

    if (Input.GetKey(KeyCode.S))
    {            
        transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Vector3.back), 0.2f);            
        transform.position += Vector3.back * Time.deltaTime * _speed;
    }

    if (Input.GetKey(KeyCode.A))
    {            
        transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Vector3.left), 0.2f);            
        transform.position += Vector3.left * Time.deltaTime * _speed;
    }
    if (Input.GetKey(KeyCode.D))
    {            
        transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Vector3.right), 0.2f);            
        transform.position += Vector3.right * Time.deltaTime * _speed;
    }

 

Manager 화 시켜서 누를 때 마다 작동하게 하기

    void Start()
    {
        Managers.Input.keyAction -= OnKeyboard;
        Managers.Input.keyAction += OnKeyboard;
    }

 

    InputManager _input = new InputManager();
    public static InputManager Input { get { return Instance._input; } }