【问题标题】:Gameobject won't instantiate children of prefabGameobject 不会实例化 prefab 的子对象
【发布时间】:2015-02-11 22:58:37
【问题描述】:

我有一个可破坏的平台,我想在它被破坏 5 秒后重新生成。它完美地破裂并重新产生。然而,没有一个预制件的孩子是从产卵中重新产生的。我设置平台的方式是有一个父级来保存脚本、触发盒对撞机和音频源。然后有 4 个孩子是图形,他们从父母那里刹车,一旦踩到刚体就会打开。有人可以帮忙吗?

#pragma strict

var Platform : GameObject;
var child1 : GameObject;
var child2 : GameObject;
var child3 : GameObject;
var child4 : GameObject;
var audio2 : AudioSource;
private var hasPlayed = false;

function Start (){
    child1.rigidbody2D.isKinematic = true;
    child2.rigidbody2D.isKinematic = true;
    child3.rigidbody2D.isKinematic = true;
    child4.rigidbody2D.isKinematic = true;
}

function OnTriggerEnter2D(Other : Collider2D){

    if(Other.gameObject.tag == "Player"){
        child1.rigidbody2D.isKinematic = false;
        child2.rigidbody2D.isKinematic = false;
        child3.rigidbody2D.isKinematic = false;
        child4.rigidbody2D.isKinematic = false;
        transform.DetachChildren();
        renderer.enabled = false;
        audio.Play();
        Respawn();
     }
 }

function Respawn(){
    yield WaitForSeconds(5);
    audio2.Play();
    var PlatformClone = Instantiate(Platform, transform.position, transform.rotation);
    Destroy(gameObject);
}

【问题讨论】:

  • 预制件是否包含project 视图中的所有子项?
  • 为什么要销毁游戏对象?
  • @maZZZU 是的,它们在项目视图中是父级。
  • @Barış Çırıka 因为那样的话,只要有一个平台,就会有可破坏的平台。

标签: unity3d unityscript


【解决方案1】:

我不完全确定,但我认为您的问题来自transform.DetachChildren()。使用此命令会破坏层次结构。如果您在实例化的GameObject 上执行此操作,它会起作用。

但是,如果您在预制件本身上执行此操作,则您的 GameObject 在运行时的其余部分将没有子节点。

您可能有更多机会找到问题的答案here

【讨论】:

  • 不,我认为这只是在游戏对象上分离孩子
  • 如果您的预制件被标记为Player,则附加到您的预制件上的孩子会分离,您应该验证一下,这可能只是这样的小事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
相关资源
最近更新 更多