진행한 것들
적 순찰 상태 구현
적 순찰 상태는 도착했는지 비동기로 확인하고 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();
}
내일 할 것
패트롤 동기로 수정, 추적 상태 구현
오늘의 회고
오늘은 패트롤 상태를 구현했다. 어제 생각했던 적의 추적 관련한 문제들이 골치 아팠는데 기획적으로 쉽게 해결할 수 있어서 좀 신기했다. 비동기로 실행할 필요도 없다고 생각을 해서 내일 동기로 바꿀 생각이다. 내일은 패트롤을 동기로 수정하면서 약간의 리팩토링을 하고 추적 상태를 구현하고 남는 시간에는 공격을 할 수 있도록 해야겠다. 내일도 파이팅!
'스파르타 Unity 1기' 카테고리의 다른 글
DevLog - 이그라엘(IGRAL) 전체 테스트와 데미지 계산 (1) | 2023.11.03 |
---|---|
DevLog - 이그라엘(IGRAL) 플레이어 연속 공격 (0) | 2023.11.02 |
DevLog - 이그라엘(IGRAL) 적 상태머신 (0) | 2023.10.31 |
DevLog - 이그라엘(IGRAL) 빌드와 이동 버그 수정 (1) | 2023.10.30 |
DevLog - 이그라엘(IGRAL) 플레이어 더블 점프와 구르기 (0) | 2023.10.27 |