2016-10-15 14 views
1

プレーヤーがコライダーに入ったときに複数のゲームオブジェクトのメッシュレンダラーを有効/無効にするにはどうすればよいですか?これは私のコードですが、うまくいきません。複数のゲームオブジェクトのメッシュレンダラーを有効/無効にする

using UnityEngine; 
using System.Collections; 

public class SueloManager : MonoBehaviour { 

private GameObject suelo; 

void Start() 
{ 
    suelo = GameObject.FindGameObjectsWithTag ("SueloWireframe"); 
} 

void OnTriggerEnter(Collider other) 
{ 

    if (other.gameObject.tag == "Player") { 

     suelo.GetComponent<Renderer>().enabled = false; 
     Debug.Log ("Oculta suelo"); 

    } 
} 

void OnTriggerExit(Collider other) 
{ 

    if (other.gameObject.tag == "Player") { 

     suelo.GetComponent<Renderer>().enabled = true; 
     Debug.Log ("Aparece suelo"); 

    } 
} 
} 
+0

「複数のゲームオブジェクト」とはどういう意味ですか?また、「動作しません」という意味も説明してください。あなたはログを見ますか? – Programmer

+0

ゲームエンジンを学ぶ前に、この言語を使用する方法を学んでください。 'GameObject'の配列である' FindGameObjectsWithTag'の結果を、それを保持できる変数に代入しています。その後、実際にすべての操作を実行するにはループが必要です。私はプログラマーに同意し、エラーを表示し、あなたが試したことを示し、期待される結果を説明します。 – Kroltan

+0

@Programmerコンソールにエラーは表示されませんが、プレーヤーがコライダーに入ると、1つのオブジェクトだけが無効になります。 – Angelsm

答えて

0

FindGameObjectWithTagゲームオブジェクトの単一のゲームオブジェクトとFindGameObjectsWithTag戻り配列を返します。 Kroltanのように、sueloを配列に変更してから、loopを使用してすべてを有効または無効にする必要があります。ループを単純な再利用可能な関数にすると、これを単純化する必要があります。以下のソリューションのEnableRenderer関数を見てください。

private Renderer[] sueloRenderers; 

void Start() 
{ 
    GameObject[] suelo = GameObject.FindGameObjectsWithTag("SueloWireframe"); 
    sueloRenderers = new Renderer[suelo.Length]; 
    for (int i = 0; i < sueloRenderers.Length; i++) 
    { 
     sueloRenderers[i] = suelo[i].GetComponent<Renderer>(); 
    } 
} 

void OnTriggerEnter(Collider other) 
{ 

    if (other.gameObject.tag == "Player") 
    { 
     EnableRenderer(sueloRenderers, false); 
     Debug.Log("Oculta suelo"); 

    } 
} 

void OnTriggerExit(Collider other) 
{ 

    if (other.gameObject.tag == "Player") 
    { 
     EnableRenderer(sueloRenderers, true); 
     Debug.Log("Aparece suelo"); 

    } 
} 

void EnableRenderer(Renderer[] rd, bool enable) 
{ 
    for (int i = 0; i < rd.Length; i++) 
    { 
     rd[i].enabled = enable; 
    } 
} 
+1

ありがとうございました。私は初心者で、私はゆっくりと学んでいます。 – Angelsm

関連する問題