Unity 当たり判定をUnitaskでやった場合、setActiveが呼ばれないことがあることがある。

UnityのSetActive関数をUniTaskで呼び出す場合、注意点がいくつかあります。Unityは、非同期処理を行う際に特別な制限を課しています。具体的には、非同期処理が完了したときにオブジェクトのアクティブ状態を変更する場合、SetActive関数が呼び出されないことがあります。

この問題を回避するには、次のような方法があります。

  1. 非同期処理の完了後、明示的にSetActive関数を呼び出す。

Chatgptに聞きましたが、以下のコードでも解決するお話もあります。(こちらで解決しないときもあります)

private async void OnTriggerEnter(Collider other) { 
   if (other.gameObject.CompareTag("Player")) {
      gameObject.SetActive(false); await UniTask.Delay(TimeSpan.FromSeconds(1.0f)); 
      gameObject.SetActive(true);
   } 
  }
 }
  1. あきらめて、UniTaskにしない

例えば、次のようなコードを使用できます。

private void OnTriggerEnter(Collider collision) {
    if ( collision.gameObject.tag == "Player" )
    {
      gameObject.SetActive(false);
    }
}

当たり前ですが、SetActive関数を呼び出します。

以上のように、UniTaskを使用して非同期処理を行う際には、Unityの制限に注意する必要があります。SetActive関数を呼び出す場合は、上記の方法を適切に使用してください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


最近のコメント