진행한 것들

적 순찰 상태 구현

적 순찰 상태는 도착했는지 비동기로 확인하고 IsTracing 상태라면 추적 상태로 변경

using UnityEngine;

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

    public override void Enter()
    {
        base.Enter();
        movementDataHandler.CheckArrivedTargetPos();
    }

    public override void UpdateState()
    {
        base.UpdateState();
        if (movementDataHandler.IsTracing)
        {
            stateMachine.ChangeState(stateMachine.TraceState);
        }
    }

    public override void Exit()
    {
        base.Exit();
        movementDataHandler.LookPreDirectionRightAway();
    }
}

 

적의 순찰 범위는 맵에서 가져온 데이터를 기반으로 적의 좌 우 방향을 정해준다.

private void CalculateDirection()
{
    float randomXPos = UnityEngine.Random.Range(_tileXPos - _tilehalfPowLength, _tileXPos + _tilehalfPowLength);

    randomXPos = Mathf.Clamp(randomXPos, _tileXPos - _tileHalfLength, _tileXPos + _tileHalfLength);

    bool isLeft = _myTrans.position.x > randomXPos;

    _targetXPos = randomXPos;

    int directionX = isLeft ? -1 : 1;

    SetDirection(directionX);
}

 

 

오늘의 이슈 / 내일 할 것

어제 이슈 : 적의 추적 범위, 추적 빈도(저번 이슈)

 

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

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

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

 

해결 방안(기획적인 방법)

1. 적의 추적 범위는 맵에서 지정해주기로 함 (맵 위치 +- 맵 길이 / 2)

2. 추적 상태 취소는 맵의 Collider Trigger 범위에서 벗어났을 때 취소시킴

3. 이동할 땅이 존재하는지에 대한 체크는 맵에서 범위를 지정해주기 때문에 나갈 우려가 없음

 

 

오늘 이슈 : 패트롤 비동기

패트롤이 비동기라 다른 쓰레드에서 불리므로 EnemyPatrolState에서 불렀을 때 다시 불릴 수 있다는 불안함이 있다.

내일 EnemyPatrolState로 메서드를 빼서 동기로 실행하게끔 만들어야겠다.

public async void CheckArrivedTargetPos()
{
    if (IsTracing)
        return;

    CalculateDirection();

    bool isFar = true;

    while (isFar)
    {
        isFar = direction.x < 0 ?
        _targetXPos <= _myTrans.position.x : _targetXPos >= _myTrans.position.x;
        await Task.Delay(_movementData.CheckMilimeterSeconds);
    }

    SetDirection(Vector2.zero);

    await Task.Delay(_movementData.WaitPatrolTime);

    CheckArrivedTargetPos();
}

 

 

내일 할 것

패트롤 동기로 수정, 추적 상태 구현

 

 

 

오늘의 회고

  오늘은 패트롤 상태를 구현했다. 어제 생각했던 적의 추적 관련한 문제들이 골치 아팠는데 기획적으로 쉽게 해결할 수 있어서 좀 신기했다. 비동기로 실행할 필요도 없다고 생각을 해서 내일 동기로 바꿀 생각이다. 내일은 패트롤을 동기로 수정하면서 약간의 리팩토링을 하고 추적 상태를 구현하고 남는 시간에는 공격을 할 수 있도록 해야겠다. 내일도 파이팅!

+ Recent posts