>source

내장 적과 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

    먼저 이것을 먼저 부울 값을 ref 로 전달하십시오. . 문제가 해결 될 수 있습니다. 그렇지 않은 경우 this.alive = false; 를 변경하십시오.   this.Alive = false; 로   get 를 가진 재산으로  그리고 set   alive 를 사용하여 대문자가 들어 있습니다.  재산, 당신은 get 가없는 재산을 언급하고 있습니다  또는 set . 당신은 다른 모든 것이 잘 작동한다고 말하지만 부울이 true인지 나중에 확인 할 때 사용하는 논리를 확인하려고합니다. 부울을 false 로 설정하는 것이 의심됩니다.  문제입니다. 구걸에서 수동으로 false로 설정하고 문제가 여전히 존재하는지 확인하십시오. 그건 그렇고, update 에서   if else if 를 사용하는 대신 기능  체인, if else 사용  같은 결과를 위해 ( bool 가 아닌 한)   null 입니다  )

관련 자료

  • 이전 유창한 제네릭 클래스 메서드 구현
  • 다음 powershell - 여러 서버에 Windows 보안 패치가 설치되어 있는지 확인