Inflearn brand logo image

인프런 커뮤니티 질문&답변

고양이조아요님의 프로필 이미지
고양이조아요

작성한 질문수

[라이브 멘토링] 유니티 뱀파이어 서바이벌 장르 모작

웹서버, 게임 서버 OT

MonsterControllelr 에서 State Dead 사용

작성

·

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() 메서드가 특정 조건에서 계속해서 호출되고 있을 가능성을 제기할 수 있습니다.

다음과 같은 원인들을 생각해볼 수 있습니다:

  1. State Management의 문제:

    • _creatureStateDead로 변경되고 나면, UpdateDead()가 계속 호출되면서 OnDead()가 반복적으로 실행될 수 있습니다. 이는 상태가 Dead로 변경된 모든 몬스터에 영향이 미칠 수 있습니다. 이러한 문제를 방지하기 위해서는 상태 변경이 정확하게 해당 조건에서만 발생하도록 하는 추가적인 로직이 필요할 수 있습니다.
  2. Update 메서드의 호출 조건:

    • Update() 함수는 매 프레임마다 호출 되는데, 상태가 지속적으로 Dead로 설정된다면 UpdateDead()가 불필요하게 호출될 가능성이 있습니다. 상태 변화를 감지하고 이를 한 번만 적용하기 위한 플래그 변수나 추가적인 조건이 필요할 것입니다.
  3. 상태변경 시점의 문제:

    • 상태 변경과 관련된 다른 부분에서의 코드가 잘못 구현되어 있을 수 있습니다. 데미지를 받아 죽어야 할 몬스터에 대한 로직이 아니라, 다른 상황에서도 _creatureState가 부적절하게 Dead로 설정될 수 있는 가능성을 염두에 두고 전체적인 로직을 점검해보는 것이 좋습니다.

보다 구체적인 원인은 코드의 나머지 부분도 함께 검토해야 더 정확한 분석이 가능할 것입니다. 혹시 관련 추가 코드나 로직을 공유해주신다면 좀 더 상세히 도와드리겠습니다. 도움이 되셨길 바랍니다!

추가적으로, Spring Boot 문서에서의 문의사항이라면, 제공되는 링크에서 자세한 내용들을 확인하실 수 있습니다:
- Spring Boot Liveness State 관련 문서
- Spring Boot Kubernetes Probes 관련 문서

고양이조아요님의 프로필 이미지
고양이조아요

작성한 질문수

질문하기