【问题标题】:Detecting a single instance of a prefab检测预制件的单个实例
【发布时间】:2016-06-05 04:04:40
【问题描述】:

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

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

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

【问题讨论】:

  • 一旦有了实例,它就不再是预制件了。
  • 'wallprehab' 是指预制件还是实例?
  • @MiladQasemi 它的预制件
  • 您是否尝试通过鼠标单击来选择一个对象,然后更改该实例的颜色?

标签: c# unity3d


【解决方案1】:

通过定位预制件的实例而不是预制件本身来更改对象的颜色。使用 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;
        }

}

不要忘记在预制件中添加碰撞器。

【讨论】:

    【解决方案2】:

    因为您的所有对象都使用相同的材​​料,所以不可能在不影响其他对象的情况下更改一种颜色,一种方法是创建该材料的副本并更改该材料的颜色,这样它们就不会使用相同的颜色材料
    如果您在运行时更改材料,您需要在代码中做不同的唯一事情是获取对实例而不是预制件的引用,如果您在运行时更改材料,则会创建新材料

    Gameobject go = Instantiate(myPrefab);
    go.renderer.material.color = Color.blue; 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-02
      • 2018-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多