Unity - 如何在销毁后重新生成Gameobject

时间:2014-02-01 22:26:00

标签: unity3d unityscript

我正在使用团结来开发我的游戏。我创造了一个简单的比赛就像足球一样,在进球后球应该被摧毁,然后重新出现在原来的位置。

我已将此脚本附加到目标对象。

public GameObject ball;
Vector3 ballPosition = new Vector3 (4.51f,0.10f,-3.78f);

void OnTriggerEnter(Collider other)  
    {

        StartCoroutine ("RespwanBall");

    }

IEnumerator RespwanBall() {

    GameObject clone = (GameObject)Instantiate (ball, ballPosition, Quaternion.identity) as GameObject;

    Destroy (ball.gameObject);

    yield return null;

}

但它只是第一次有效。然后在第二次销毁后,它会给出一个错误,说明该对象已被删除,并且您正在尝试访问已删除的对象或类似的东西。如果我在OntriggerEnter函数中使用destroy函数,它会在第一次碰撞时产生相同的错误。

我该怎么办?请帮助。

THANKYOU。

2 个答案:

答案 0 :(得分:1)

您正在尝试访问已删除的对象,因为您已将脚本附加到目标并且您始终删除球,并且您的克隆永远不会成为球(因此它始终是相同的球)。

如果它附加到球上,你的脚本就会起作用,因为在这种情况下ball本身就是这样,因此在主动球中总是会激活销毁方法。

如果您想将其附加到目标,请确保将您的克隆更新为活动球:

IEnumerator RespwanBall() {
    Destroy (ball.gameObject);
    ball = (GameObject)Instantiate (ball, ballPosition, Quaternion.identity);
    yield return null;
}

此外,BlueRaja的评论是您可以用来改进代码的重要内容:

  1. ball.GameObject可能只是ball,因为ball GameObject;
  2. 您要从实例化中投两次结果,请检查this question to know more关于它;
  3. 至少在这段代码中,RespwanBall没有理由成为协程;
  4. 你拼错了'Respawn'。

答案 1 :(得分:0)

You can try respawning the object by using this script -




using UnityEngine;
using System.Collections;

public class copy : MonoBehaviour
{




     [SerializeField]
    private GameObject prefab = null; // assign Cube prefab to this in Editor
    void Start()
    {
        // no need for a local prefab variable, nor a call to Resources.Load();
        for (int i = 0; i < 4; ++i)
        {
            Instantiate(prefab, new Vector3(0, i * 10, 0), Quaternion.identity); // you can directly assign position in Instantiate
        }
    }

}