진행한 것들

적 상태머신 틀 구현

플레이어 상태를 구현하고 적 상태도 구현하기 위해 공통적인 부분들을 부모 클래스로 하여 상속받아 구현하였다.

플레이어와 적 상태머신의 공통적인 부분을 StateMachine에 합치고

using UnityEngine;

public abstract class StateMachine
{
    protected IState currentState;


    public abstract void Init();

    public void ChangeState(IState newState)
    {
        currentState?.Exit();
        currentState = newState;
        currentState?.Enter();
    }

    public virtual void Update()
    {
        currentState.UpdateState();
    }

    public virtual void PhysicsUpdate()
    {
        currentState.PhysicsUpdateState();
    }
}

 

캐릭터 제어와 관련된 공통적인 부분은 CharacterController에 작성하였다.

[RequireComponent(typeof(Rigidbody))]
public abstract class CharacterController : MonoBehaviour
{
    public AnimationController AnimationController { get; private set; }
    public Rigidbody Rigidbody { get; private set; }

    [field: SerializeField] public MovementData MovementData { get; private set; }
    [field: SerializeField] public GroundData GroundData { get; private set; }

    protected virtual void Awake()
    {
        Rigidbody = GetComponent<Rigidbody>();
        AnimationController = GetComponentInChildren<AnimationController>();
        AnimationController.Init();
    }
}

 

오늘의 이슈 / 내일 할 것

적의 추적 범위, 추적 빈도

이슈

1. 적의 추적 범위는 어느정도 되며

2. 어떤 조건에서 추적 상태를 취소시킬건지

3. 이동할 땅이 존재하는지에 대한 체크는 어떻게 할 것인지

생각해본 것

 

1. 생성한 이후 맵 전체에서 고유한 플레이어를 추적

2. 일정 거리가 벗어난 5초 뒤에는 추적 상태 해제

3. 적 앞 쪽에 아래 방향으로 Ray를 쏴서 Ground면 이동 아니면 다시 패트롤 상태로 돌입 (추후 Raycast 성능 확인 필요)

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

public class EnemyPatrolState : EnemyStateBase
{
    public EnemyPatrolState(EnemyStateMachine stateMachine) : base(stateMachine)
    {
    }

    public override void Enter()
    {
        
    }

    public override void Exit()
    {
        
    }

    public override void OnDead()
    {
        
    }
}

 

내일 할 것

패트롤 상태 구현

 

 

오늘의 회고

  오늘은 적 상태머신을 만들기 위해 플레이어 컨트롤러와 플레이어 상태머신의 공통적인 부분을 분리한 뒤 이 부분을 적 컨트롤러와 적 상태머신이 상속받게 했다. 생각보다 큰 작업이어서 테스트하는데도 시간이 좀 걸렸고 좋았던 부분은 다시 내 코드를 보면서 아 이런 방식으로 작성했었지 하면서 다시 공부하게 되는 시간이 됐던 것이다. 내일은 패트롤 상태를 구현하게 되는데 빨리빨리 구현해서 프로토타입을 완성할 수 있었으면 좋겠다. 내일도 파이팅!

+ Recent posts