Ball, Drone 상태 오류

작업자
강성원
Issue.No
19
날짜
2024/04/19
분류
버그
심각도
50
완료
착수

Drone 공중에 떠서 움직이지도, 죽지도 않음

public class DroneStateMachine : BaseStateMachine { public DroneStateMachine(Entity entity) : base(entity) { } public override void Initialize() { Provider = new DroneStateProivder(this); } public override void Reset() { CurrentState = Provider.GetState(Minion_States.Alive); CurrentState.EnterState(); } }
C#
복사
처음 생성될 때 상태 머신 진입 함수 호출을 빼줬었음 → 이유는 모르겠지만 함수를 빼서 작동하지 않음
public class DroneStateMachine : BaseStateMachine { public DroneStateMachine(Entity entity) : base(entity) { } public override void Initialize() { Provider = new DroneStateProivder(this); CurrentState = Provider.GetState(Minion_States.Alive); CurrentState.EnterState(); } public override void Reset() { CurrentState = Provider.GetState(Minion_States.Alive); CurrentState.EnterState(); } }
C#
복사
코드 추가해주니 정상적인 상태 변환을 보여줌

Ball 죽을 때 폭발효과 및 공격로직 발동하지 않음

기존에 Dead 상태로 진입하면 폭발 함수를 코루틴으로 구현했었음.
하지만 폭발 함수가 끝나기 전에 Ball의 Active가 false가 됨.
public class Ball_DeadState : BaseState { float explodeDelay = 1f; float passedTime; public Ball_DeadState(BaseStateMachine context, BaseStateProvider provider) : base(context, provider) { IsRootState = true; } public override void EnterState() { passedTime = 0f; } public override void UpdateState() { passedTime += Time.deltaTime; if(passedTime >= explodeDelay) { Explosion(); } } ,,, private void Explosion() { float damage = Context.Entity.Data.damage; RaycastHit[] hits = Physics.SphereCastAll(Context.Entity.transform.position, 10, Vector3.up, 0f); foreach (RaycastHit hit in hits) { if (hit.transform.gameObject.TryGetComponent(out Entity entity)) { Rigidbody rigidbody = entity.transform.GetComponent<Rigidbody>(); if (rigidbody != null) { Vector3 other = hit.transform.position; Vector3 pushDirection = (other - _entityTransform.position).normalized; rigidbody.AddForce(pushDirection * 14, ForceMode.Impulse); } entity.GetDamaged(damage); } if (hit.transform.gameObject.TryGetComponent(out Module module)) { module.ModuleStatus.GetDamage(damage); } } ObjectPooler.SpawnFromPool("EnemyExplosion01", _entityTransform.position); AudioManager.Instance.PlayOneShot(FMODEvents.Instance.Ball_Explode, _entityTransform.position); Context.Entity.gameObject.SetActive(false); } }
C#
복사
일반 함수로 변경 후에 따로 시간을 체크해주었음