更改预制实例的颜色
Change color of prefab instances
我的 Assert 中有两个预制件;在我的场景中,我有两个预制件的实例。我试图通过单击按钮更改一个预制件的所有实例的颜色,但我得到的是两个预制件的所有实例的颜色都发生了变化。如何指示预制件在特定功能内进行更改?我猜游戏对象指的是我场景中的所有游戏对象,这可能就是为什么所有实例都会改变颜色的原因。
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;
}
}
只需调用 GetComponent<Renderer>().material.color
即可:Renderer.material
returns material 的实例而不是共享实例。
当您的渲染器包含多个 material 时,您可以调用 GetComponent<Renderer>().materials[i]
而不是 GetComponent<Renderer>().sharedMaterials[i]
的方式相同。
附带说明一下,gameObject.GetComponent<>()
可以简化为 GetComponent<>()
,因为您的脚本继承自 MonoBehaviour
。
希望对您有所帮助,
我的 Assert 中有两个预制件;在我的场景中,我有两个预制件的实例。我试图通过单击按钮更改一个预制件的所有实例的颜色,但我得到的是两个预制件的所有实例的颜色都发生了变化。如何指示预制件在特定功能内进行更改?我猜游戏对象指的是我场景中的所有游戏对象,这可能就是为什么所有实例都会改变颜色的原因。
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;
}
}
只需调用 GetComponent<Renderer>().material.color
即可:Renderer.material
returns material 的实例而不是共享实例。
当您的渲染器包含多个 material 时,您可以调用 GetComponent<Renderer>().materials[i]
而不是 GetComponent<Renderer>().sharedMaterials[i]
的方式相同。
附带说明一下,gameObject.GetComponent<>()
可以简化为 GetComponent<>()
,因为您的脚本继承自 MonoBehaviour
。
希望对您有所帮助,