[Unity] (2024_09_09) 2D 플랫 포머 게임 개발일지

2024. 9. 11. 00:35·Unity

오늘 한거

오늘은 Player의 기초적인 움직임과 점프를 구현하였다

 

Input Action

다음과 같이 UI와 실질적인 Move부분으로 나누어서 InputAction을 구현하였고 2D 특성상 W,S 움직임을 Vector로 받아올 일을 당장 없어서 A,D 입력만 받아 왔다. 그리고 Space입력을 받아 JumpEvent을 실행 시켜주었다.

UI 부분은 MousePos을 가지고 오는 역활을 한다.

C# Class를 뽑아내준다.

 

InputReader

실질적인 입력을 받는 부분에서 InputReader 스크립트를 SO로 만들어서 입력 받은 Evenet들을 처리하고 직접 Instance를만들어 준다. 코드는 다음과 같다.

먼저 SO를 상속받고 CreateAssetMenu를 이용하여 Asset을 만들어준다. 그리고 InputAction에서 뽑아낸 C#클래스의 Interface IMoveAction를 상속 받아 입력 이벤트가 발생했을 때 OnMove, OnJump 함수를 실행시켜준다. 

SO 활성화 시 만들어 주고 Enable을 켜주어서 입력 받기를 시작한다. 그리고 자신을 보내줌으로써 생성된 Instance에서 이벤트를 받아준다.

OnMove는 받아온 Value를 Vector2 변수 Movement에 넣어준다. 

 

PlayerMovement

using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    private Rigidbody2D _rg2d;
    private Transform _visualTrm;
   
    [Header("Movement Settings")]
    [SerializeField] private float _moveSpeed = 5f;
   
    [Header("Jump Settings")]
    [SerializeField] private Transform _footTrm;
    [SerializeField] private float _jumpPower = 5f;
    [SerializeField] private float _checkJumpRay;
    [SerializeField] private LayerMask _whatIsGround;
   
    [Header("Input")]
    [SerializeField] private InputReader _InputReader;

    [HideInInspector] public bool IsGround;

    private void Awake()
    {
        _rg2d = GetComponent<Rigidbody2D>();
        _visualTrm = transform.Find("Visual");
    }

    private void Start()
    {
        _InputReader.OnJumpEvent += HandleJumpEvent;
    }

    private void Update()
    {
        Move();
        CheckOnTheGround();
    }

    private void CheckOnTheGround()
    {
        IsGround = Physics2D.Raycast(_footTrm.position, Vector3.down,
            _checkJumpRay, _whatIsGround);
    }

    private void Move()
    {
        _rg2d.velocity = new Vector2(_InputReader.Movement.x *_moveSpeed ,_rg2d.velocity.y);
        if (_InputReader.Movement.x != 0)
        {
            _visualTrm.localScale = new Vector3(_InputReader.Movement.x,
                _visualTrm.localScale.y, _visualTrm.localScale.z) ;
        }
       
    }
   
    private void HandleJumpEvent()
    {
        Debug.Log(IsGround);
        if (IsGround)
        {
            _rg2d.AddForce(Vector2.up * _jumpPower, ForceMode2D.Impulse);
        }
    }
   
    #if UNITY_EDITOR
    private void OnDrawGizmos()
    {
        Gizmos.color = Color.green;
        Gizmos.DrawRay(new Ray(_footTrm.position, Vector3.down));
    }
    #endif
}

InputReader에서 받아온 이벤트들을 활용하여 이동과 점프를 구현하였다. 

 

 

잘 움직인다!!!

 

1시간만에 급조 한거 치고는 잘 나와서 다행이다 ㅋㅋ 다음번에는 기본적인 시스템들을 구현해볼 생각이다. ^^

'Unity' 카테고리의 다른 글

[엔진 프로젝트]Enemy Walking Around with BT  (0) 2024.11.01
[Unity] (2024_10_15) 2D 플랫 포머 게임 개발일지(Pooling)  (2) 2024.10.17
[Unity] (2024_09_30) 2D 플랫 포머 게임 개발일지  (0) 2024.09.30
[Unity] (2024_09_25) 2D 플랫 포머 게임 개발일지 FSM Part 2  (0) 2024.09.26
[Unity] (2024_09_25) 2D 플랫 포머 게임 개발일지 FSM Part 1  (3) 2024.09.26
'Unity' 카테고리의 다른 글
  • [Unity] (2024_10_15) 2D 플랫 포머 게임 개발일지(Pooling)
  • [Unity] (2024_09_30) 2D 플랫 포머 게임 개발일지
  • [Unity] (2024_09_25) 2D 플랫 포머 게임 개발일지 FSM Part 2
  • [Unity] (2024_09_25) 2D 플랫 포머 게임 개발일지 FSM Part 1
HK1206
HK1206
고3 게임 개발자의 개발 일지
  • HK1206
    GGM-LJS
    HK1206
  • 전체
    오늘
    어제
    • 분류 전체보기 (25)
      • Unity (16)
      • Shader (1)
      • Editor (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
HK1206
[Unity] (2024_09_09) 2D 플랫 포머 게임 개발일지
상단으로

티스토리툴바