2017-02-13 47 views
0

我在Assert中有两个预制件;在我的场景中,我有两个预制件的实例。我试图用按钮单击来改变一个预制件的所有实例的颜色,但是我得到的结果是两个预制件的所有实例的颜色都改变了。我如何指定在特定功能内更改预制件?我猜gameObject是指我场景中的所有gameObjects,可能这就是为什么所有的实例都会改变颜色。更改预制实例的颜色

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class eventSensors : MonoBehaviour { 


    // Use this for initialization 
    void Start() { 

    } 

    // Update is called once per frame 
    void Update() { 

    } 

    public void tempSensor() { 

     print("estas en la funcuion de tempSensor"); 
     // this.gameObject.GetComponent<Renderer>().material.color = Color.red; 
     //gameObject.GetComponent<Renderer>().sharedMaterial.color = Color.red; 
    var prefab=  Instantiate(gameObject, transform.position, transform.rotation); 

     prefab.GetComponent<Renderer>().material.SetColor("_Color", Color.red); 
    } 
    public void lightSensor() 
    { 
     print("estas en la funcuion de lightSensor"); 
     gameObject.GetComponent<Renderer>().sharedMaterial.color = Color.green; 

    } 
    //Sent to all game objects before the application is quit 
    //this is called when the user stops playmode. 
    private void OnApplicationQuit() 
    { 
     //reset all prefab color to default 
     gameObject.GetComponent<Renderer>().sharedMaterial.color = Color.white; 
    } 
} 
+0

是的,我只有一个单一的材料文件夹中的proyect –

+0

无需创建多个材料:看我的答案。 – Kardux

+0

建议:发布你的问题,关于你如何使ti工作作为你的问题的答案。 – starbeamrainbowlabs

回答

1

只需要求GetComponent<Renderer>().material.color代替:Renderer.material返回材料,而不是共享的一个实例。

当Renderer包含多种材质时,您可以使用GetComponent<Renderer>().materials[i]而不是GetComponent<Renderer>().sharedMaterials[i]来调用相同的方法。

作为便笺,gameObject.GetComponent<>()可以简化为GetComponent<>(),因为您的脚本继承自MonoBehaviour

希望这有助于

+0

我想通过创建一个数组来保存预制件的所有实例,然后使用一个foreach函数来迭代这些实例并使用MeshRenderer改变那里的颜色。 'public GameObject [] getCount; getCount = GameObject.FindGameObjectsWithTag(“tempPrefabTag”); int count; count = getCount.Length; 的foreach(游戏物体○在getCount将) { //为了存取权限原料成分使用:MeshRenderer //改变每个游戏物体的颜色在预制 o.GetComponent ()material.SetColor( “_颜色” , 红色); } }' –

+0

很高兴帮助!我编辑了你的问题来添加你的答案,以便阅读比评论更容易。如果你觉得这个答案是正确的,请选择它作为答案。 – Kardux