66. Unity 최종 프로젝트 4주차(4)

이규성·2024년 2월 1일
0

TIL

목록 보기
73/106

02/01

📌팀 프로젝트 진행

목표

구글 플레이스토어 등록 방법 구체적으로 정리하기
ios 빌드 알아보기

금일 구현 설계

플레이어 추락 상태 수정하기
아이콘 추가

금일 구현한 사항

  1. 플레이어 추락 상태를 수정하였습니다.
public class PlayerFallState : PlayerGroundedState
{
    private bool _alreadyAppliedForce;
    public PlayerFallState(PlayerStateMachine playerStateMachine) : base(playerStateMachine)
    {
    }

    public override void Enter()
    {
        base.Enter();
        _stateMachine.IsFalling = true;
        _stateMachine.MovementSpeedModifier = 0f;        
        _alreadyAppliedForce = false;
        StartAnimation(_stateMachine.Player.AnimationData.fallParameterHash);
    }

    public override void Exit()
    {
        base.Exit();
        _stateMachine.IsFalling = false;
        StopAnimation(_stateMachine.Player.AnimationData.fallParameterHash);
    }

    public override void Update()
    {
        base.Update();
        ToolItemData toolItemDate = (ToolItemData)Managers.Game.Player.
        ToolSystem.ItemInUse.itemData;

        TryApplyForce();

        if (_stateMachine.Player.Controller.isGrounded)
        {
            if (toolItemDate.isTwoHandedTool == true)
            {
                _stateMachine.ChangeState(_stateMachine.TwoHandedToolIdleState);
            }
            else if (toolItemDate.isTwinTool == true)
            {
                _stateMachine.ChangeState(_stateMachine.TwinToolIdleState);
            }
            else
            {
                _stateMachine.ChangeState(_stateMachine.IdleState);
            }
            return;
        }
    }

    protected override void Rotate(Vector3 movementDirection)
    {

    }

    private void TryApplyForce()
    {
        if (_alreadyAppliedForce) return;
        _alreadyAppliedForce = true;

        _stateMachine.Player.ForceReceiver.AddForce(_stateMachine.Player.transform.forward * 0.2f);
    }
}
public class PlayerGroundedState : PlayerBaseState
{    
    public override void PhysicsUpdate()
    {
        base.PhysicsUpdate();

        bool isHit = Physics.SphereCast(Managers.Game.Player.ViewPoint.transform.position, 0.5f,
        Vector3.down, out RaycastHit hit, 1f);

        if (!isHit && _stateMachine.Player.Controller.velocity.y <
        Physics.gravity.y * Time.fixedDeltaTime)
        {
            _stateMachine.ChangeState(_stateMachine.FallState);
        }
    }
}

플레이어의 view point에서 spherecast를 아래로 쏴서 바닥을 체크하는 방식으로 수정하였습니다. 기존은 ground 레이어 체크였습니다.

금일 이슈

  1. 공격키 연타 시 앞으로 나아가는 힘이 너무 강한 이슈가 있었습니다.
public class PlayerComboAttackState : PlayerAttackState
{    
    private void TryApplyForce()
    {
        if (_alreadyAppliedForce) return;
        _alreadyAppliedForce = true;

        _stateMachine.Player.ForceReceiver.Reset();

        _stateMachine.Player.ForceReceiver.AddForce(_stateMachine.Player.transform.forward * 
        _attackInfoData.Force);
    }
}

플레이어의 force를 리셋해주는 메서드를 호출하여 어색함을 해결하였지만 공격키 연타 시 콤보 공격이 이어지지 않는 이슈가 아직 해결되지 않았습니다.

금일 커밋한 사항

remove skybox
플레이어가 추락할 때 움직임에 제한을 걸었습니다.
플레이어 추락 상태 이슈를 수정하였습니다.
공격 연타 시 달리기 보다 빠르게 캐릭터가 튀어나가는 이슈를 해결하였습니다.
공격 연타 시 콤보 어택이 되지 않는 이슈를 해결할 예정입니다.

🤸🏻‍♀️Feedback

0개의 댓글