2016-09-19 1 views
-1

私はこれを本当に理解していませんか?トリガーをオフにすると懐中電灯がオフになりますが、トリガーを終了するとオフに戻りません

トリガーゾーンに入ると懐中電灯が消灯しますが、トリガーゾーンを終了すると懐中電灯が再び点灯しません。私が効果を逆転すると、シーンが始動したときにフラッシュライトが消灯し、トリガーゾーンに入ったときにフラッシュライトが点灯しません。これはメインルームのライト(作品)に使用したスクリプト(名前付きマイナーチェンジ)です

以下のコードでは、懐中電灯は消灯しており、トリガーゾーンに入るときに電源を入れたいですか?

public class TurnFlashLightOn : MonoBehaviour 
{ 

void Start() 
{ 

    GameObject[] allLights = GameObject.FindGameObjectsWithTag("flashLight"); 

    foreach (GameObject i in allLights) 
    { 
     i.SetActive(true); 
    } 

} 
void OnTriggerEnter() 
{ 
    GameObject[] allLights = GameObject.FindGameObjectsWithTag("flashLight"); 

    foreach (GameObject i in allLights) 
    { 
     i.SetActive(false); 


    } 

} 
void OnTriggerExit() 
{ 
    GameObject[] allLights = GameObject.FindGameObjectsWithTag("flashLight"); 

    foreach (GameObject i in allLights) 
    { 
     i.SetActive(true); 


     } 

    } 
} 

オフにしてもオンにしない理由はありますか?

おかげ

+0

あなたはメソッドが呼び出されたかどうかを確認するために、 'OnTriggerExit'メソッドにブレークポイントを配置しようとしましたか? –

答えて

1

微妙ですが、重要な詳細:GameObject.FindGameObjectsWithTagのみアクティブなオブジェクトを検索。あなたが懐中電灯を消すと、それはもはやその検索では表示されません。

懐中電灯オブジェクトのリストをキャッシュする必要があります。

リストが変更されない場合(懐中電灯を作成または破棄しない場合)、Startの間にリストに1回入力してから、必要なときにいつでもリストを参照できます。

リストが動的な場合は、空のリストから開始してから、リストに非表示になった懐中電灯を追加できます。ライトを再びオンにするときは、リスト内のすべてのライトをアクティブにして、リストを消去します。

これを行う方法はたくさんあります。基本的な問題は、これらの非アクティブなオブジェクトを追跡するために他の方法が必要なことです。

+0

さて、分かりましたか?私はよりよく理解するために見ることができる例はありますか?ありがとう – Newbie

+1

はList <>を使ってください。それは基本的なプログラミングです。 – Fattie

0

コードに基づいて、あなたが私に言っていることは、オブジェクトがしきい値を超えたときにライトが消灯するイベントがあることです。このしきい値にはイベントOnTriggerEnter()が含まれています。

スレッシュホールドまたはゾーン()は、2つのトリガーを同時に含むことはできません。また、どちらのトリガーも起動することはできません。トリガーが発動すべきロジックを定義するのに役立つIf-Elseステートメントがあることを提案することしかできません。例えば のために(これは擬似コードです)

If (EnteringZoneFromStart() = true) 
     {OnTriggerEnter()} 
    Else If (ExitingZone() = true) 
     {OnTriggerExit()} 
    Else 
     {OnTriggerEnter()} 
関連する問題