2016-10-15 1 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

Научитесь использовать язык перед изучением игрового движка. Вы присваиваете результат «FindGameObjectsWithTag», который представляет собой массив «GameObject», переменной, которая может содержать только одну. И после этого вам понадобится цикл, чтобы фактически выполнить некоторую операцию во всех них. Я согласен с программистом, показываю ошибки, показываю, что вы пробовали, объясните ожидаемые результаты. – Kroltan

+0

@Programmer В консоли не появляется ошибка, но когда игрок входит в коллайдер, отключается только один объект. – Angelsm

ответ

0

FindGameObjectWithTag возвращает один GameObject и FindGameObjectsWithTag возвращает массив GameObject. Точно так же, как 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; 
    } 
} 
+1

Большое спасибо за ваши ответы. Я новичок, и я учусь медленно. – Angelsm