메타버스 미니게임 추가로 농작물을 받아라 !! 라는 게임을 만들어보았다.
떨어지는 농작물을 캐릭터를 움직여 받으면 되는 게임으로
로컬로 동작하는 1P, 2P를 만들어 2명이서 할 수 있도록 만들고자 하였다.
먼저 어떻게 따로 동작하게 만들까라는 생각에서 나온 것은 바로 InputSystem 이었다.
각 플레이어의 InputActions을 만들어 주고 움직이게 하였다.


1P는 키보드 A, D, W (점프)
2P는 방향키 ←, →, ↑ (점프) 로
InputActions를 만들어 주었다.
using UnityEngine;
public class BaseController : MonoBehaviour
{
protected Rigidbody2D _rb;
[SerializeField] protected SpriteRenderer spriteRenderer;
protected Vector2 movementDirection = Vector2.zero;
public Vector2 MovementDirection { get => movementDirection; }
protected Vector2 lookDirection = Vector2.zero;
public Vector2 LookDirection { get => lookDirection; }
protected AnimationController animationController;
protected StatController statController;
... 생략
protected virtual void Update()
{
Rotate(lookDirection);
}
protected virtual void FixedUpdate()
{
Movement(movementDirection);
}
void Movement(Vector2 direction)
{
direction *= statController.Speed;
_rb.velocity = direction;
animationController.Move(direction);
}
void Rotate(Vector2 direction)
{
float rotZ = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
bool isLeft = Mathf.Abs(rotZ) > 90;
spriteRenderer.flipX = isLeft;
}
}
using UnityEngine;
using UnityEngine.InputSystem;
public class FarmPlayerController : BaseController
{
[SerializeField] private float jumpForce = 20f;
private bool isJump = false;
private bool isGround = false;
public void Init()
{
statController.Speed = 5f;
}
protected override void Start()
{
base.Start();
Init();
}
void OnMove(InputValue inputValue)
{
movementDirection = inputValue.Get<Vector2>();
movementDirection = movementDirection.normalized;
lookDirection = movementDirection;
}
void OnJump(InputValue inputValue)
{
isJump = inputValue.isPressed;
}
protected override void FixedUpdate()
{
base.FixedUpdate();
if (isJump && isGround)
{
_rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
isJump = false;
}
}
}

잘 작동하는 것을 확인할 수 있다.
이렇게 InputSystem을 활용하여 간단하게 1P, 2P 캐릭터를 구현해보았다. 😁