更改预制实例的颜色

时间:2017-02-13 21:57:12

标签: c# unity3d unity5

我的断言中有两个预制件;在我的场景中,我有两个预制件的实例。我试图通过单击按钮来更改一个预制件的所有实例的颜色,但我得到的是两个预制件的所有实例的颜色都发生了变化。如何指定预制件在特定功能内部进行更改?我猜测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;
    }
}

1 个答案:

答案 0 :(得分:2)

只需拨打GetComponent<Renderer>().material.color即可:Renderer.material返回素材的实例,而不是共享的实例。

当您的渲染器包含多个素材时,您可以使用GetComponent<Renderer>().materials[i]而不是GetComponent<Renderer>().sharedMaterials[i]来呼叫。

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

希望这有帮助,