Enable/disable 多个游戏对象的网格渲染器

Enable/disable mesh renderer of multiple gameobjects

当玩家进入对撞机时,我如何 enable/disable 多个游戏对象的网格渲染器?这是我的代码,但它不起作用。

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");

    }
}
}

FindGameObjectWithTag returns 单个游戏对象和 FindGameObjectsWithTag returns 游戏对象数组。就像 Kroltan 提到的,你必须将 suelo 更改为一个数组,然后使用循环来启用和禁用所有这些。将循环放在一个简单的可重用函数中应该可以简化这一点。查看下面解决方案中的 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;
    }
}