작성
·
86
0
MonsterController 에서 질문 있습니다.
protected virtual void UpdateDead()
{
OnDead();
}
public override void OnDamaged(BaseController attacker, int damage)
{
if (Hp <= 0)
return;
Hp -= damage;
if (Hp <= 0)
{
Hp = 0;
// 왜 ? 스테이트로 했을때는 버그가 있는거지?
_creatureState = Define.CreatureState.Dead;
// OnDead();
}
}
위와 같이 MonsterController 에서 OnDead() 대신에 State 로 작성을 하면 데미지를 입지 않은 몬스터도 죽어버립니다. 왜 그렇게 되는지 잘 모르겠는데 설명 부탁 드립니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
고양이조아요님, 질문해주신 사항에 관해 설명드리겠습니다.
현재 제공해 주신 코드에서 문제가 발생하는 부분은 CreatureState
를 변경하는 로직에 위치할 가능성이 큽니다. OnDead()
메서드를 호출하는 대신 상태를 변경하는 코드로 작성했을 경우, 데미지를 입지 않은 몬스터도 죽어버린다고 하셨는데 이는 UpdateDead()
메서드가 특정 조건에서 계속해서 호출되고 있을 가능성을 제기할 수 있습니다.
다음과 같은 원인들을 생각해볼 수 있습니다:
State Management의 문제:
_creatureState
가 Dead
로 변경되고 나면, UpdateDead()
가 계속 호출되면서 OnDead()
가 반복적으로 실행될 수 있습니다. 이는 상태가 Dead
로 변경된 모든 몬스터에 영향이 미칠 수 있습니다. 이러한 문제를 방지하기 위해서는 상태 변경이 정확하게 해당 조건에서만 발생하도록 하는 추가적인 로직이 필요할 수 있습니다.Update 메서드의 호출 조건:
Update()
함수는 매 프레임마다 호출 되는데, 상태가 지속적으로 Dead
로 설정된다면 UpdateDead()
가 불필요하게 호출될 가능성이 있습니다. 상태 변화를 감지하고 이를 한 번만 적용하기 위한 플래그 변수나 추가적인 조건이 필요할 것입니다.상태변경 시점의 문제:
_creatureState
가 부적절하게 Dead
로 설정될 수 있는 가능성을 염두에 두고 전체적인 로직을 점검해보는 것이 좋습니다.보다 구체적인 원인은 코드의 나머지 부분도 함께 검토해야 더 정확한 분석이 가능할 것입니다. 혹시 관련 추가 코드나 로직을 공유해주신다면 좀 더 상세히 도와드리겠습니다. 도움이 되셨길 바랍니다!
추가적으로, Spring Boot 문서에서의 문의사항이라면, 제공되는 링크에서 자세한 내용들을 확인하실 수 있습니다:
- Spring Boot Liveness State 관련 문서
- Spring Boot Kubernetes Probes 관련 문서