DNF LOVE

[Unity기초-8] 사용자 입력에 따른 Player를 이동시켜보자 - ⑤ 사용자 입력에 따른 Object 이동(2D, 3D프로젝트를 2D프로젝트로 만들기) 본문

Programming/Unity

[Unity기초-8] 사용자 입력에 따른 Player를 이동시켜보자 - ⑤ 사용자 입력에 따른 Object 이동(2D, 3D프로젝트를 2D프로젝트로 만들기)

botho 2019. 7. 27. 17:03
반응형

이전 까지 우리는 3D에서 GameObject가 사용자 입력에 따라 움직이는 것을 구현했었다.

그럼 2D에서 움직이는건 어떻게 구현해야 할까? 

 

(사실 이전에 했던것과 동일하지만, 다음 튜토리얼은 UI를 다루는 것이기 때문에 편하게 2D로도 구현하도록 하겠다.)

우선, 3D프로젝트를 2D프로젝트로 바꾸어보도록 하자.


1. 3D프로젝트 -> 2D프로젝트

 

Edit -> Project Settings -> Editor -> Default Behaviour Mode 에서 3D를 2D로 변경해주면 된다.

좌표계를 3D에서 2D로 변경해준다.

그리고 ctrl + n을 눌러 새로운 Scene을 만들면 skybox가 비활성되는 것을 확인할 수 있다.

ctrl+s를 눌러 'Sample2DScene'라는 이름의 새로운 씬을 만들도록 하자.

그렇다면 이전에 만들어뒀던 Player Object를 이 2D 프로젝트에 복사 붙여놓기를 해보도록 하자.

 

2. 하이라키에 다른 씬 올려두기.

Project에서 해당 씬 - SampleScene을 끌어다가 하이라키에 두면 하이라키에 두개의 씬이 동시에 올라오게 된다.

올려둔 SampleScene의 Player를 끌어다가 Sample2DScene 하이라키 위에 올려두면 Object 옮기기 끝!

올려둔 SampleScene은 오른쪽 마우스를 눌러 Remove를 해주도록 하자.

 

3. 2D에서 Object 움직이는 것을 구현해보도록 하자!(Feat. Jump! 점프!)

public class PlayerControler : MonoBehaviour
{
    public float speed = 10f;

    private Rigidbody rd;

    Vector3 move;

    void Start()
    {
        rd = this.gameObject.GetComponent<Rigidbody>();

        move = this.gameObject.transform.position;
    }

    void Update()
    {
        float movespeed = speed * Time.deltaTime;

        float h = Input.GetAxisRaw("Horizontal");
        float v = Input.GetAxisRaw("Vertical");

        // 이동거리 보정
        h = h * movespeed;
        v = v * movespeed;

        // 실제 이동
        transform.Translate(Vector3.right * h);
        transform.Translate(Vector3.forward * v);
    }
}

우리는 마지막에 이렇게 코드를 구현했다. 이렇게 해도 2D에서도 Object는 움직인다.

이렇게 끝내기는 아쉬우니 Jump부분도 구현해보도록 하자!

3D에서 Plane의 역할 대신 Cube로 바닥을 만들어 주도록 하자.

나는 이런 tranform을 만들었다.

또, Player의 Gravity를 사용하겠다고 체크하고 게임을 실행해 보도록 하자.

잘 움직이기는 하는데 뭔가 심심하지 않는가?

Jump를 구현해보고 싶은가?

그렇다면 이 포스팅을 계속 보도록 하자.

Edit -> Project Settings -> Input Manager을 보면 Jump가 있는 것을 확인할 수 있다.

그렇다면 Horizental과 Vertical처럼 Jump도 Input.GetAxisRaw를 통해 구현할 수 있을까?

물론이다!.

		float movespeed = speed * Time.deltaTime;

        float h = Input.GetAxisRaw("Horizontal");
        float v = Input.GetAxisRaw("Vertical");
        float j = Input.GetAxisRaw("Jump");

        // 이동거리 보정
        h = h * movespeed;
        v = v * movespeed;
        j = j * movespeed;

        // 실제 이동
        transform.Translate(Vector3.right * h);
        transform.Translate(Vector3.forward * v);
        transform.Translate(Vector3.up * j);

Space버튼을 누르면 Object가 점프하는 것을 확인할 수 있다!

여기서 Gravity를 사용하지 않는다면 Object가 space를 누르면 누르는대로 Up방향으로 움직이는 것을 확인할 수 있다!

굳이 Rigidbody를 사용하지 않더라도 아래 방향으로(0, -1, 0) 9.6F만큼 힘을 가하는 것을 Update구문에서 구현하면 리지드바디를 사용하지 않더라도 중력 효과를 낼 수 있다.

물론, 키보드 입력으로도 충분히 같은 부분을 구현할 수 있다.

        if (Input.GetKey(KeyCode.Space))
        {
            transform.Translate(Vector3.up * movespeed);
        }

이렇게 말이다!

 

이제 tranform을 사용하여 사용자 입력에 따른 Object움직이는 효과를 모두 구현해보았다.

다음은 간단하게 2D Running게임을 만들면서 UI/UX를 알도록 하자.

반응형