我正在开发一个统一项目。我有一个预制件,在那里会有多个实例将在场景中生成预制件。我想选择该预制件的一个实例并改变该预制件的颜色
void Update(){
if (Input.GetMouseButtonDown(1))
{
wallPrehab.renderer.material.color = Color.red;
}
}
但这会改变预制件的所有实例。如何将其更改为单个对象。
答案 0 :(得分:0)
因为所有的物体都使用相同的材料,所以不可能在不影响其他颜色的情况下改变颜色,一种方法是创建该材料的副本并改变颜色,这样他们就不会这样做。使用相同的材料,你需要做的唯一不同的事情是,如果你在运行时更改材料,那么在代码中获取对实例的引用而不是预制件将创建一个新的材料>
Gameobject go = Instantiate(myPrefab);
go.renderer.material.color = Color.blue;
答案 1 :(得分:0)
通过定位预制件的实例而不是预制件本身来更改对象的颜色。使用Raycast找到游戏对象。 (由于您正在响应鼠标单击事件,我假设您正在选择要更改颜色的对象)
private RaycastHit hit;
void Update(){
Physics.Raycast (Camera.main.ScreenPointToRay (Input.mousePosition), out hit);
if (Input.GetMouseButtonDown(1) && hit.collider){
hit.collider.gameObject.renderer.material.color = Color.red;
}
}
不要在预制件上添加碰撞器。