c# - 启用/禁用多个游戏对象的网格渲染器

标签 c# unity3d

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

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 返回单个游戏对象,FindGameObjectsWithTag 返回游戏对象数组。就像 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;
    }
}

关于c# - 启用/禁用多个游戏对象的网格渲染器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40058665/

相关文章:

c# - 将文件设置为只读直至 checkout

c# - 同时在网络流上进行多发送和多接收

c# - 同步两个 RichTextBox 的滚动位置?

c# - 刷新更新面板后重定向

c# - 使用自定义字符集的 Base64 编码

c# - 变量值未在字符串中更新

c# - 从C#运行BCP时检测错误

unity3d - 如何在 Unity 中选择 GPU 进行渲染?

c# - Camera.main 空引用异常

c# - 游戏对象数组对齐