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