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

C# 启用/禁用多个游戏对象的网格渲染器,c#,unity3d,unity5,C#,Unity3d,Unity5,当玩家进入碰撞器时,如何启用/禁用多个游戏对象的网格渲染器?这是我的代码,但不起作用 using UnityEngine; using System.Collections; public class SueloManager : MonoBehaviour { private GameObject suelo; void Start () { suelo = GameObject.FindGameObjectsWithTag ("SueloWireframe"); } void

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

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

    }
}
}
使用UnityEngine;
使用系统集合;
公共类SueloManager:单一行为{
私人游戏对象suelo;
无效开始()
{
suelo=GameObject.FindGameObjectsWithTag(“SueloWireframe”);
}
无效对撞机(对撞机其他)
{
如果(other.gameObject.tag==“玩家”){
suelo.GetComponent().enabled=false;
Debug.Log(“Oculta suelo”);
}
}
void OnTriggerExit(碰撞器其他)
{
如果(other.gameObject.tag==“玩家”){
suelo.GetComponent().enabled=true;
Debug.Log(“Aparece suelo”);
}
}
}

FindGameObjectWithTag
返回单个游戏对象,而
FindGameObjectsWithTag
返回游戏对象数组。正如Kroltan所提到的,您必须将
suelo
更改为一个数组,然后使用loop启用和禁用所有数组。将循环放在一个简单的可重用函数中可以简化这一过程。查看下面解决方案中的
启用渲染器
函数

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;
    }
}
private渲染器和渲染器;
void Start()
{
GameObject[]suelo=GameObject.FindGameObjectsSwithTag(“SueloWireframe”);
suelonederers=新渲染器[suelo.Length];
for(int i=0;i
您所说的“多个游戏对象”是什么意思?请解释您所说的“不工作”是什么意思。你看到日志了吗?在学习游戏引擎之前先学习使用该语言。您正在将
FindGameObjectsWithTag
的结果(这是
GameObject
的数组)分配给一个只能容纳一个的变量。在那之后,你需要一个循环,在所有的循环中执行一些操作。我同意程序员的意见,显示错误,显示您的尝试,解释预期结果。@程序员控制台中没有出现错误,但当玩家进入碰撞器时,只有一个对象被禁用。这不是真的。那段代码无法编译。它应该会给您带来编译时错误。虽然我已经给了你一个答案,但我建议你按照@Kroltan所说的去做。在继续之前,先学习基础C#。大多数人跳转到团结,错过了基本的东西。非常感谢你的回答。我是一个初学者,学习速度很慢。