새소식

⇥ 2D Game/Unity

Unity 게임 만들기 프로젝트 - 이동 구현 (transform)

  • -
반응형

1. 이동 구현

GameObject 의 transform 을 조작하기 위해 해당 Object에 PlayerController.cs 스크립트를 연결하여 코드를 구현한다. 

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

public class PlayerController : MonoBehaviour
{
    [SerializeField]
    float _speed = 3.0f;
    void Start()
    {
        
    }

    // GameObject (Player)
        // Transform
        // PlayerController (*)
        // Transform 의 위치를 변경시켜야 하는데 자주 사용하기 때문에 transform 바로 사용

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

        //transform   
    }
}

- Transform.positon 의 값을 Vector3. 메소드로 수정한다.
- Update 함수에서는 Frame 마다 수행되기 때문에 Frame rate가 달라진다면 부자연스러운 움직임이 발생
            -> Time.deltaTime을 곱하여 일정하게 유지하여 Frame rate 에 독립적인 동작을 구현할 수 있음
- _Speed 변수를 사용하여 속도를 조절할 수 있도록 함.
            -> public 으로 사용할 변수가 아니기 때문에 SerializeField 를 사용하여 프라이빗 필드를 인스펙터에 노출하여 수정할 수 있음.

 

해당 스크립트를 GameObject에 연결하면 Speed를 조절할 수 있고, 테스트 시 wasd 로 이동이 가능하다.

 

2. 좌표

- world 좌표 -> 게임 세상 좌표
- local 좌표 -> GameObject (Player) 기준 좌표

TransformDirection : local 좌표를 기준으로 world 좌표로 변환 ( Player 방향을 기준으로 이동 )
InverseTransformDirection : world 좌표를 기준으로 local 좌표로 변환

보통 게임에선 TransformDirection 으로 Player 가 바라보는 방향으로 움직이게 되어 있음 -> transform.Translate 함수 이용

void Update()
    {
        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);

        //transform   
    }

위의 Update 코드를 이와 같이 변환 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.