티스토리 뷰

 

오늘은 2D 러닝 게임을 위하여 플레이어 캐릭터의 움직임을 추가하여보겠습니다.

1. 지난 시간에 만든  GameObject의 이름을 변경하여 줍니다. GameObject를 클릭 후 F2를 눌러서 변경하거나 Inspector창에서 변경하여 줍시다. 저는 PlayerCh_1로 변경해주었습니다.

2. Scripts 폴더에서 PlayerController 스크립트를 생성하고 PlayerController 스크립트를 열어줍시다.

 

다음과 같이  PlayerController 스크립트를 완성해줍시다. ctrl+ s는 생활화하시고요!

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

public class PlayerController : MonoBehaviour
{
    [SerializeField]
    public Vector3 MoveVector3 = Vector3.zero;
    [SerializeField]
    public float MoveSpeed;

    // Start is called before the first frame update
    private void Start()
    {
        
    }

    // Update is called once per frame
    private void Update()
    {
        
    }
    
    private void FixedUpdate()
    {
        Move();
    }
    
    private void Move()
    {
        transform.Translate(MoveVector3 * MoveSpeed * Time.fixedDeltaTime * Time.timeScale);
    }
}

 

그리고 이전에 만들어두었던 PlayerInput 스크립트를 다음과 같이 수정해 줍시다. ctrl+ s는 생활화하시고요!

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

public class PlayerInput : MonoBehaviour
{
    PlayerController mPlayerController;

    // Start is called before the first frame update
    // 첫 번째 프레임 업데이트 전에 Start가 호출됩니다.
    private void Start()
    {
        mPlayerController = GetComponent<PlayerController>();
    }
    // Update is called once per frame
    // 업데이트는 프레임 당 한 번 호출됩니다.
    private void Update()
    {
        PCInput();
    }

    private void FixedUpdate()
    {
        
    }
    
    private void PCInput()
    {
        if (Input.GetButtonDown("Fire1"))
        {
            Debug.Log("Fire1 Click");
        }

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

        Vector3 moveVector = (Vector3.up * v) + (Vector3.right * h);
        mPlayerController.MoveVector3 = moveVector;
    }
    
}

 

각 스크립트를 저장 후에 다시 Unity화면으로 나와서 PlayerController를 추가해 줍시다.

 

다음과 같이 나왔다면 성공!

 

자 그럼 가운데 화살표 버튼을 눌러 실행을 해봅시다.

실행 후 키보드의 방향키를 눌러봅시다. 캐릭터는 움직이지 않지만 Inspector창에 PlayerController 스크립트의 MoveVector3 의 X, Y 값이 변하는 걸 확인할 수 있습니다. 

플레이어 캐릭터가 움직이지 않는 이유는 아직 캐릭터에 물리적으로 움직일 수 있는 강체를 달아주지 않았기 때문입니다.

TMI 강체란 영어로 RigidBody를 말해요!

꼭 Play 버튼을 다시 눌러 Play를 끝내주시고 다음을 따라 해 주세요 Play 버튼이 눌러있는 상태에서 작업한 일들은 Play가 끝나면 변경이 적용되어 있지 않습니다.

Inspercotr 창에서 AddComponent를 눌러서 Rigidbody2D를 추가해 주세요.
2D 게임을 만들기 때문에 Rigidbody2D를 추가해 주셔야 합니다.

다음과 같이 추가되었다면 성공!

Rigidbody2D에 대한 설명은 아래 링크에 있습니다.

2019/05/17 - [Unity 이론] - #7 Unity Rigidbody2D

 

#7 Unity Rigidbody2D

Body Type 이동 (위치 및 회전) 동작과 Collider 2D 상호 작용을 조작 할 수 있도록 RigidBody 2D의 구성 요소 설정을 한다. 옵션은 Dynamic , Kinematic , Static Material 특정 부모 Ri..

ggonmerlimd.tistory.com

다음과 같이 Rigidbody2D를 설정해 줍시다.

그리고 PlayerCotroller에서 MoveSpeed 값을 5로 설정하여준 다음 Play 버튼을 눌러준 후 키보드의 방향키를 입력해 봅시다.

이제 캐릭터가 움직이는 것을 볼 수 있습니다. 하지만 캐릭터의 움직임이 부자연스럽다고 느낄 수 있습니다.

다음 시간에는 코드 설명과 함께 캐릭터의 움직임에 대해서 좀 더 자세하게 알려드리겠습니다.  

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함