【问题标题】:Making a new instantiated prefab as a child for existing GameObject为现有 GameObject 制作一个新的实例化预制件作为子代
【发布时间】:2013-12-26 18:11:17
【问题描述】:

我被搜索过如何让这些水果在与篮子发生碰撞时像篮子一样移动,我发现如果我想这样做,我必须让这些水果成为一个孩子到篮子游戏对象..例如:

 banana.transform.parent = basket.transform;

香蕉和篮子每个都是“GameObject”类型的......

但不幸的是,这种方式行不通!我不知道为什么?

所以现在我需要知道是否有可能在与篮子发生碰撞的情况下销毁香蕉并在运行时实例化篮子中的新香蕉?!!

我需要尝试这种愚蠢的方法,因为我已经尝试了所有其他方法,但没有任何效果:(

【问题讨论】:

  • banana.transform.parent = basket.transform; 应该可以工作。你应该弄清楚为什么它不起作用。也许即使在它被抓住之后你仍在向下移动它?
  • @Calvin : 也许你仍然在向下移动物体,即使它已经被抓住了? ...> 是的,我想是的,但是如何禁用它?
  • 这取决于:是什么让它首先移动?如果它是附加到香蕉的组件,您可以禁用该组件。
  • @rutter:非常感谢

标签: unity3d unityscript


【解决方案1】:

试试这个扩展方法

public static void FindParentAndAttach(this GameObject go, string parentName)
{
    GameObject memberParent = GameObject.Find(parentName);

    if(memberParent.Equals(null))
    {
        memberParent = new GameObject();
        memberParent.name = parentName;
    }

    go.transform.parent = memberParent.transform;

}

然后,您可以通过提供其名称将任何游戏对象附加到父级,如果该名称不存在,它会在根级别创建一个具有该名称的空游戏对象。

gameObject.FindParentAndAttach("Your Parent Name");

【讨论】:

  • 这可行,但它不是一个非常强大的解决方案,而且与替代方案相比它相当慢。我认为问题上的 cmets 是对的,提出问题的人应该弄清楚为什么设置父级不起作用(并且可能发布有关脚本的更多信息,以及场景中的转换设置)
【解决方案2】:

喜欢的可以试试

for(int i = 0 ; i < 4 ; i++)
{
    Transform child =Instantiate(cubePrefab,new Vector3(i * 1.2f,0,0),Quaternion.identity) as Transform;
    child.parent = Gobj2.GetComponent <Transform>();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    相关资源
    最近更新 更多