Unity Player Input - 캐릭터 이동 에셋 활용 방법 (행동 추가)
캐릭터의 이동을 구현하기전 플레이어 컨트롤에 대한 최근 트렌드를 이것저것 찾아보았다.
유니티 기반의 게임에서 플레이어의 이동을 유니티 공식 에셋을 통해서 간단하게 구현 가능한 방법이 있고 생각보다 자주 활용되고 있다는것을 알게되었다. 따라서 이번 프로젝트에서 플레이어의 이동을 해당 기능을 통해 구현하고자 하였다.
해당 에셋을 플레이어에 적용하면 대충 이런 느낌으로 인스펙터가 구성되며. Player Input 에서 사용자의 키입력을 받으면 해당 값을 StarterAssetsInputs 에 전달해 주고, 이곳의 변수값을 참고하여 ThirdPersonController 에서 플레이어의 행동 및 애니메이션을 제어하는 구조로 되어있다.
에셋을 적용한 뒤 원하는 애니메이션 및 행동을 추가하고 싶을 경우 아래와 같은 순서로 적용해주면 문제없이 작동한다.
예시로 플레이어의 공격 애니메이션을 추가해주고자 한다면.
1. Player Input의 Actions 에있는 스타터 에셋에 'Attack" Actions 를 추가해주고 키를 할당해준다.
2. StarterAssetsInputs.cs 에 관리할 인풋 변수와 인풋 메서드를 각각 할당해주며 이때 메서드 명칭에 주의하여 등록한다.
public bool attack;
public void OnAttack(InputValue value) << 이곳의 On"Attack"의 Attack은 Actions의 Attack과 동일하게
{
AttackInput(value.isPressed);
}
public void AttackInput(bool newAttackState)
{
attack = newAttackState;
}
3. 플레이어의 애니메이션 컨트롤러 작업과 함께 ThirdPersonController에서 Input 변수 데이터에 따른 애니메이션 컨트롤러 연동 메서드를 작성해준다.
private void Attack()
{
if (_input.attack&&Grounded)
{
if (_hasAnimator)
{
_animator.SetTrigger(_animIDAttack);
player.isClimbingorAttacking = true;
_input.attack = false;
}
}
if(_input.attack &&!Grounded)
{
_input.attack = false;
}
}
위와같은 작업을 끝내면 플레이어가 정상적으로 등록한 Input값에 맞는 애니메이션과 행동을 취할것이다.