내장 적과 RPG를 만들고 있습니다. 적의 물체와 접촉하면 게임은 별도의 화면으로 이동합니다. 플레이어가 돌아 오면 필드 내 화면의 몬스터가 사라집니다. '살아있는 것'을 바꾸지 못하는 것 같습니다.
나는 부울을 선포하고있다. 필드 내 메뉴에서 몹의 동작을 결정하기 위해 업데이트에서 if 문을 사용하고 있습니다. 데이터 및 디버그 코드를 전달하지만 활성 값을 변경하지는 않습니다. 내가 생각할 수있는 모든 순열을 시도했습니다 (this.alive = false;this.alive! = alive;this.Alive = false, this.Alive =! Alive, this.Alive =! alive 등)
public bool alive;
public bool Alive {get; set;}
void Awake (){
//get player target
player = FindObjectOfType<PartyController>();
rig = GetComponent<Rigidbody2D>();
EventController.OnBattleCompleted += Kill;
}
void Update() {
if(alive){
//stuff that works fine
}
else if (!alive)
{
Die();
}
}
public void Kill()
{
this.alive = false;
Debug.Log("This should be false");
}
public void Die ()
{
gameObject.SetActive(false);
}
SetActive (false)를 직접 실행하려고 할 때 여전히 객체와 상호 작용하려고한다고 들었으므로 Awake 및 Start 후에 Die (인스턴스를 해제)를 실행하기 위해 대기해야한다고 생각했습니다. 아이디어는 전투에서 돌아와서 Kill ()을 실행 한 다음 첫 번째 업데이트 프레임에서 Die를 실행한다는 것입니다.
KILL DOES가 실행됩니다. 디버그 메시지가 나타납니다.
또한 업데이트 논리도 작동합니다. Unity GUI에서 부울을 클릭하면 군중이 사라집니다.
수정 :
이걸 실행할 때 .alive = false;update ()에서는 즉시 작동합니다. kill을 실행하면 디버그 메시지가 설정되지만 this.alive는 설정되지 않습니다. Update에서 Kill ()을 실행하면 비슷하게 작동합니다.
문제는 Kill () 메소드가 이벤트 컨트롤러를 통해 호출되는 특정 컨텍스트에서 변수를 전달하지 않는 이유에 있습니다.
- 답변 # 1
관련 자료
- python - 다른 함수 내에서 호출되는 모의 클래스 메서드
- pointers - C ++, 변수 트로프 매개 변수 전달, 나중에 클래스에서 수정
- ios - uiapplicationdelegate 메서드`application (_ - configurationforconnecting : options :)`이 안정적으로 호출되지 않는 이유
- c# - 단일 매개 변수로 호출 할 때 선택적 매개 변수가있는 메서드 대리자가 작동하지 않음
- flutter - 다시 시작할 때 null에서 '[]'메서드가 호출되었습니다
- PHP의 짧은 IF 및 긴 IF 변수 할당 방법
- java - foreach 루프의 함수에 변수 전달
- algorithm - 목록에 deepcopy를 적용하지 않아 메서드가 종료 된 후 Python 클래스 변수가 변경됨
- javascript - Iframe 게시물 메시지, 전달 변수
- java - @Bean으로 주석이 달린 메소드가 직접 호출됩니다
- jestjs - es6/typescript 모듈을 모의하고 jest를 사용하여 해당 모듈에서 메서드가 호출되었는지 확인하는 방법은 무엇입니까?
- javascript - eventListener의 화살표 함수에 변수 전달
- spring - Java 또는 Groovy 코드에서 호출되는 인터페이스 메서드를 구현하는 클래스는 어떻게 주입됩니까?
- c# - 호출되는 확장 방법
- flutter - 처리되지 않은 예외 - nosuchmethoderror : '[]'메서드가 null에서 호출되었습니다 전화 시도 : [] ( "주문 됨") null 필드 확인 firebase
- java - void 메서드에서 루프의 변수 값을 사용하는 방법
- swift - 내 didUpdate userLocation 메서드가 호출되지 않는 이유는 무엇입니까?
- swift - 클로저를 취하는 변수에 메소드를 어떻게 전달합니까?
- flutter - null에서 'findRenderObject'메서드가 호출되었습니다
- c# - 메소드 그룹 func 델리게이트를 기다릴 수 없습니다
먼저 이것을 먼저 부울 값을
ref
로 전달하십시오. . 문제가 해결 될 수 있습니다. 그렇지 않은 경우this.alive = false;
를 변경하십시오.this.Alive = false;
로get
를 가진 재산으로 그리고set
alive
를 사용하여 대문자가 들어 있습니다. 재산, 당신은get
가없는 재산을 언급하고 있습니다 또는set
. 당신은 다른 모든 것이 잘 작동한다고 말하지만 부울이 true인지 나중에 확인 할 때 사용하는 논리를 확인하려고합니다. 부울을false
로 설정하는 것이 의심됩니다. 문제입니다. 구걸에서 수동으로 false로 설정하고 문제가 여전히 존재하는지 확인하십시오. 그건 그렇고,update
에서if else if
를 사용하는 대신 기능 체인,if else
사용 같은 결과를 위해 (bool
가 아닌 한)null
입니다 )