检测预制件的单个实例

时间:2016-06-05 04:04:40

标签: c# unity3d

我正在开发一个统一项目。我有一个预制件,在那里会有多个实例将在场景中生成预制件。我想选择该预制件的一个实例并改变该预制件的颜色

void Update(){
if (Input.GetMouseButtonDown(1))
{
           wallPrehab.renderer.material.color = Color.red;
}
}

但这会改变预制件的所有实例。如何将其更改为单个对象。

2 个答案:

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

}

不要在预制件上添加碰撞器。