【问题标题】:How to identify the different prefab items in Unity3D?如何识别 Unity3D 中不同的预制项目?
【发布时间】:2015-02-18 02:30:15
【问题描述】:

我已经定义了一个名为“Item”并包含在资源中的预制件 然后,我在 GUI (Unity3D) 中加载该预制件

  Object prefab_item = Resources.Load("Item");
  GameObject g = Instantiate(prefab_item) as GameObject;
  g.transform.parent = this.transform; 
  g.transform.position = pos;
  Sprite sprite = Resources.Load("Images/item_" + item, typeof(Sprite)) as Sprite;
  g.GetComponent<SpriteRenderer>().sprite = sprite;

我想通过“项目”预制加载不同项目的列表, 按下时如何识别不同的项目?

谢谢大家!

【问题讨论】:

    标签: unity3d ngui


    【解决方案1】:

    您可以为您创建的每个游戏对象命名:

    int i=1;
    g.name = string.Format("item {0}", i);
    

    然后您可以使用以下方法识别它:

    var object = GameObject.Find("item 1");
    

    如果你想在按下时处理它,你可以:

    1. 向游戏对象添加碰撞器组件;
    2. 在 MonoBehaviour 脚本中添加 OnMouseDown() 函数
    3. 以编程方式将 MonoBehaviour 脚本附加到游戏对象:

      g.AddComponent("YourOnMouseDownScript");

    【讨论】:

    • 如何获取名称GameObject然后进行比较?当我按下其中任何一个时?谢谢大卫!
    • g.name 返回游戏对象的名称,您可以使用 string.Contains(...) 函数进行比较。
    【解决方案2】:

    代替:

    Debug.Log ("item name: " + gameObject.name);
    

    你可以这样写:

    Debug.Log ("item name: " + gameObject.name, gameObject);
    

    然后消息将在日志窗口中单击。单击日志消息时将选择对象。

    【讨论】:

    • 它只显示日志第 1 项,不显示第 2、3、...9 项。虽然,我按到 item 2, 3, ...9 可能是,因为我定义了一个 prefab,然后我加载了这个 prefab?
    • 是的,那么你应该想想这些项目是如何创建的?如果您的预制件是第 1 项并且您多次实例化它,您将有很多“第 1 项”的克隆,而不是任何“第 2 项”。如果您手动重命名对象,则它们可以是“item 2”、“item 3”...
    • 谢谢大卫和 piojo!我已经完成了:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    • 2015-09-18
    相关资源
    最近更新 更多