본문 바로가기

TIL (since 2023.08.07 ~ )

2023-10-30 TIL(Unity 최종 프로젝트 6일차)

오늘은 게임 기획 관련해서 조금 더 회의를 진행하면서 보스의 기믹 및 플레이어의 능력을 구상해 보았다.

 

그리고 아직 나는 플레이어 구현이 완전히 끝나지 않아서 오늘은 플레이어의 구르기 상태를 만들고

 

체력과 스태미나를 구현해서 플레이어와 연동을 시키는 것까지가 원래 계획이었으나, 생각보다 구르기 상태를

 

구현하는 것이 시간이 오래 걸리는 바람에 구르기까지 밖에 못했다..ㅠ 심지어 어찌어찌 완성은 했으나 조금 어색해서

 

애니메이션 부분을 다시 손봐야 할 듯..

 

 

<PlayerRollState>

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

public class PlayerRollState : PlayerGroundState
{

    public PlayerRollState(PlayerStateMachine playerstateMachine) : base(playerstateMachine)
    {
    }

    public override void Enter()
    {
        stateMachine.MovementSpeedModifier = 0;
        base.Enter();
        StartAnimation(stateMachine.Player.AnimationData.RollParameterHash);
        TryApplyForce();
    }

    public override void Exit()
    {
        base.Exit();
        StopAnimation(stateMachine.Player.AnimationData.RollParameterHash);
    }


    private void TryApplyForce()
    {
        // 받고있던 힘을(Force) 리셋하고
        stateMachine.Player.ForceReceiver.Reset();
        // ForceReceiver에 AddForce를 적용. 바라보고있는 정면에서 밀려나도록.
        stateMachine.Player.ForceReceiver.AddForce(stateMachine.Player.transform.forward * groundData.RollForce);
    }
}

 

State가 하나 추가됨에 따라 BaseState, GroundState에도 추가적인 작업을 해야 한다.

 

오늘 배운 점으로는, 각각의 State들은 모두 독립적으로 구현되는 것이 좋다.

또한 RollState는 Ground에서만 사용하기 때문에 GroundState에서 선언하는 것이 좋다.

BaseState는 모든 상황에서 공통적으로 사용할 부분을 선언한 것이다.

 

RollState에서 선언한 groundData를 받아오는 것이 처음에 어려웠는데, BaseState에 보면 groundData를 readonly로 불러들이고 있기 때문에 groundData값을 인식하고 있고, RollState는 GroundState를 상속받고 있기 때문에, RollState에서 바로 RollForce를 받아오는 방법은, groundData.RollForce를 사용하면 된다.

 

BaseState(groundData값 인지) > GroundState > RollState

 

또한 애니메이션에서도 우여곡절이 많았는데, 처음에 RollState로 전환이 안되어서 보았더니 애니메이션에도 우선순위 같은 게 있었다. Transitions에서 Exit의 순서가 다른 것보다 위에 있으면 해당 애니메이션으로 진입을 못한다. 순서만 바꿔주었더니 정말 잘 작동되었다. 

 

 

그리고 애니메이션을 주로 Mixamo에서 가져오는데, 해당 애니메이션을 가져올 때도 주의해야 할 점으로는,

in Place부분을 체크해야 하고 Format은 Unity로 맞추고 Skin은 Without Skin으로 맞춰주는 것 정도면 된다.

 

내일은 오늘 마저 하지못했던, 플레이어 피격과 체력시스템, 죽음상황 구현을 해보아야겠다.