【问题标题】:Change color of prefab instances更改预制实例的颜色
【发布时间】:2017-02-13 21:57:11
【问题描述】:

我的 Assert 中有两个预制件;在我的场景中,我有两个预制件的实例。我试图通过单击按钮来更改一个预制件的所有实例的颜色,但我得到的是两个预制件的所有实例的颜色都发生了变化。如何指示预制件在特定功能内进行更改?我猜 gameObject 指的是我场景中的所有游戏对象,这可能就是所有实例改变颜色的原因。

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;
    }
}

【问题讨论】:

  • 是的,我的项目中只有一个材质文件夹
  • 无需创建多个材料:请参阅我的答案。
  • 建议:发布关于如何让 ti 发挥作用的问题作为对问题的回答。

标签: c# unity3d unity5


【解决方案1】:

只需调用GetComponent&lt;Renderer&gt;().material.color 代替:Renderer.material 返回材质实例而不是共享实例。

当您的渲染器包含多种材质时,您可以调用GetComponent&lt;Renderer&gt;().materials[i] 而不是GetComponent&lt;Renderer&gt;().sharedMaterials[i]

附带说明,gameObject.GetComponent&lt;&gt;() 可以简化为 GetComponent&lt;&gt;(),因为您的脚本继承自 MonoBehaviour

希望对你有帮助,

【讨论】:

  • 我通过创建一个数组来保存预制件的所有实例,然后创建一个 foreach 函数来迭代这些实例并使用 MeshRenderer 更改那里的颜色。 public GameObject[] getCount; getCount = GameObject.FindGameObjectsWithTag("tempPrefabTag"); int count; count = getCount.Length; foreach (GameObject o in getCount) { //To acces the material component use: MeshRenderer //change the color of each gameObject in the Prefab o.GetComponent&lt;MeshRenderer&gt;().material.SetColor("_Color", Color.red); } }
  • 很高兴它有帮助!我编辑了您的问题以添加您的答案,因此它比评论更容易阅读。如果您认为这个答案是正确的,请选择它作为答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-01
  • 1970-01-01
  • 2017-02-26
相关资源
最近更新 更多