본문 바로가기
Unity & C#

[Unity] 캐릭터 이동

by 이재현9999 2024. 8. 2.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class PlayerController : MonoBehaviour
{
    public float speed = 3;

    Vector3 move;
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        move = Vector3.zero;

        if (Input.GetKey(KeyCode.A))
        {
            move += new Vector3(-1, 0, 0);
        }
        if (Input.GetKey(KeyCode.D))
        {
            move += new Vector3(1, 0, 0);
        }
        if (Input.GetKey(KeyCode.W))
        {
            move += new Vector3(0, 1, 0);
        }
        if (Input.GetKey(KeyCode.S))
        {
            move += new Vector3(0, -1, 0);
        }

        move = move.normalized;
        if (move.x < 0)
        {
            GetComponent<SpriteRenderer>().flipX = true;
        }

        if (move.x > 0)
        {
            GetComponent<SpriteRenderer>().flipX = false;
        }

        if (move.magnitude > 0)
        {
            GetComponent<Animator>().SetTrigger("Move");
        }
        else
        {
            GetComponent<Animator>().SetTrigger("Stop");

        }
    }

    private void FixedUpdate()
    {
        transform.Translate(move * speed * Time.fixedDeltaTime);
    }
}

 

Update()에서 매 프레임마다 move 변수를 모든 요소가 0인 3차원 벡터로 초기화 해준다.

그리고 WASD 키 입력에 따라서 move의 벡터를 변경할 수 있게 해준다.

 

normalized

move 벡터를 normalized 해줘야 캐릭터의 움직임이 일정해진다.

normalized는 벡터의 magnitude가 1인 벡터를 반환해준다.

normalized를 하기 이전에, 캐릭터를 대각선으로 움직이고자 한다면

가로 세로로 움직이는 속도가 1일때, 대각선으로 이동하는 속도는 루트 2가 될 것이다.

따라서 normalized를 해줌으로써 대각선의 이동 속도도 일정하게 해주는 것.

 

 

FixedUpdate()

FixedUpdate 함수는 물리 계산과 관련된 업데이트를 처리하는 함수이다.

캐릭터의 좌표를 바꿔주는 처리는 Upate 함수가 아닌 FixedUpate 함수에서 해주어야 한다.

FixedUpdate 함수는 Update 함수와는 다르게 일정 시간 간격으로 호출되기 때문에

물리적인 움직임이나 충돌 감지와 같은 물리 연산을 처리하는 데 적합하다.

 

transform.Translate()를 통해서 캐릭터의 위치를 이동시킨다.

캐릭터가 이동하기 위해서는 normalized된 벡터(방향) * 속도 * 시간을 해줘야 한다.

'Unity & C#' 카테고리의 다른 글

[C#] 문법 정리 2  (4) 2024.07.23
[C#] 문법 정리 1  (1) 2024.07.12