【问题标题】:Unity3D - Instantiated gameobject loses method?Unity3D - 实例化的游戏对象丢失方法?
【发布时间】:2016-03-27 20:13:50
【问题描述】:

大家好,感谢您抽出宝贵时间。

我目前正在 Unity 中处理 2D 内容,但遇到以下问题:

我们有一个定期创建“事物”的生成器:

public float spawnTime = 3;
public Object thing; //public GameObject thing;

// Use this for initialization
void Start () {
    InvokeRepeating("spawn", spawnTime, spawnTime);
}

void spawn ()
{
    Vector3 pos = new Vector3(-14, 0, 0);
    Quaternion ori = new Quaternion(0, 0, 0, 0);
    Instantiate(thing, pos, ori);

}

而且它做得很好。认识“东西”:

void Start () {
    InvokeRepeating("move", 0.1f, 0.1f);
}

void move()
{
    transform.Translate(0.2f, 0, 0);
    if (this.transform.position.x > 14)
    {
        Destroy(this); //Destroy(GameObject);

所以基本上创造了一个“东西”,将自己从 -14 拖到 14,然后窒息。

问题:一旦第一个“东西”被删除,新创建的(不是已经移动的)永远不会从 -14 移动。

我想我没有正确指定要定期调用的方法,但无法在 unity3d 自上而下的射手或类似示例中找到合适的解决方案。

再次感谢。

€:在应用建议的更改后,生成器在 3 个创建周期后停止创建“事物”。

€:我的错误是没有使用“事物”作为预制件(如漂亮答案中所述将其拖入“资产”),因此我引用了一个即将被删除的“事物”实例。将其拖入地狱(资产)并从此快乐。

【问题讨论】:

    标签: c# unity3d 2d instantiation gameobject


    【解决方案1】:

    我只用这些脚本重新创建了你的设置,我得到的是对象并没有被破坏,但新生成的对象正确移动到 14 岁。

    它们没有被销毁的原因是,您调用了Destroy(this);,它销毁了脚本组件,而不是游戏对象。所以这应该是Destroy(gameObject);。有了这个修复它对我来说运行得很好。

    另外,如果没有特殊原因使用对象,你的public Object thing;最好是public GameObject thing;

    编辑:

    我是如何设置的:

    • 创建了一个Empty(重命名为Spawner
    • 创建了一个Sphere(作为我的thing,将其重命名为Ball
    • 通过将 Ball 拖到 assets 文件夹中来制作预制件
    • 从场景中删除了球
    • 创建了一个Spawner 脚本并将您的生成代码放入其中
    • 创建了一个Ball 脚本并将您的移动代码放入其中
    • 对脚本进行了两项更改
    • Spawner 脚本放在 spawner 游戏对象上
    • Ball 预制件拖到Spawnerpublic GameObject thing
    • Ball 脚本放在球预制件上

    完成。

    【讨论】:

    • 非常感谢。我还没有弄清楚统一的更精细的细节,这是我什至没有想到的。感谢您的宝贵时间。
    • @celphy 根据您的编辑,这不是为您做的,那么您是如何设置对象的?我也将其更新为我的答案。
    • 您的逐步帮助非常大。我将问题+解决方案编辑到我的帖子中。再次感谢您的宝贵时间。我现在要建造我的那条基于科学的龙 MMO……
    • 哈哈 :) 很高兴我能帮上忙!
    猜你喜欢
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-14
    • 1970-01-01
    相关资源
    最近更新 更多