Unity3D - 实例化的游戏对象丢失方法?
Unity3D - Instantiated gameobject loses method?
大家好,感谢您抽出宝贵时间。
我目前正在 Unity 中处理 2D 内容,遇到以下问题:
我们有一个定期创建 'thing':
的生成器
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);
}
它做得很好。见面 'thing':
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);
所以基本上创建了一个 'thing',将自身从 -14 拉到 14,然后窒息。
问题:一旦第一个 'thing' 被删除,新创建的(不是已经移动的)就不会从 -14 移动。
我想我没有正确指定要定期调用的方法,但无法在 unity3d top-down-shooter 或类似示例中找到合适的解决方案。
再次感谢。
€:应用提议的更改后,生成器在 3 个创建周期后停止创建 'thing's。
€:我的错误是没有使用 'thing' 作为预制件(如漂亮的答案中所述将其拖入 "assets")所以我引用了一个即将删除的实例 'thing'。把它拖下地狱(资产),从此过得很幸福。
我只用这些脚本重新创建了您的设置,我得到的是对象没有被破坏,但新生成的对象正确移动到 14 点。
它们没有被销毁的原因是,您调用 Destroy(this);
会销毁脚本组件,而不是游戏对象。所以这应该是 Destroy(gameObject);
。有了这个修复,它对我来说运行得很好。
另外,如果没有特殊原因需要使用object,你的public Object thing;
最好是public GameObject thing;
.
编辑:
我是如何设置的:
- 创建了
Empty
(将其重命名为 Spawner
)
- 创建了一个
Sphere
(作为我的 thing
,将其重命名为 Ball
)
- 通过将预制件拖到资产文件夹中来制作
Ball
预制件
- 从场景中删除了球
- 创建了一个
Spawner
脚本并将生成代码放入其中
- 创建了一个
Ball
脚本并将您的移动代码放入其中
- 对脚本进行了两项更改
- 将
Spawner
脚本放在生成器游戏对象上
- 将
Ball
预制件拖到 Spawner
的 public GameObject thing
中
- 将
Ball
脚本放在球预制件上
完成。
大家好,感谢您抽出宝贵时间。
我目前正在 Unity 中处理 2D 内容,遇到以下问题:
我们有一个定期创建 'thing':
的生成器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);
}
它做得很好。见面 'thing':
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);
所以基本上创建了一个 'thing',将自身从 -14 拉到 14,然后窒息。
问题:一旦第一个 'thing' 被删除,新创建的(不是已经移动的)就不会从 -14 移动。
我想我没有正确指定要定期调用的方法,但无法在 unity3d top-down-shooter 或类似示例中找到合适的解决方案。
再次感谢。
€:应用提议的更改后,生成器在 3 个创建周期后停止创建 'thing's。
€:我的错误是没有使用 'thing' 作为预制件(如漂亮的答案中所述将其拖入 "assets")所以我引用了一个即将删除的实例 'thing'。把它拖下地狱(资产),从此过得很幸福。
我只用这些脚本重新创建了您的设置,我得到的是对象没有被破坏,但新生成的对象正确移动到 14 点。
它们没有被销毁的原因是,您调用 Destroy(this);
会销毁脚本组件,而不是游戏对象。所以这应该是 Destroy(gameObject);
。有了这个修复,它对我来说运行得很好。
另外,如果没有特殊原因需要使用object,你的public Object thing;
最好是public GameObject thing;
.
编辑:
我是如何设置的:
- 创建了
Empty
(将其重命名为Spawner
) - 创建了一个
Sphere
(作为我的thing
,将其重命名为Ball
) - 通过将预制件拖到资产文件夹中来制作
Ball
预制件 - 从场景中删除了球
- 创建了一个
Spawner
脚本并将生成代码放入其中 - 创建了一个
Ball
脚本并将您的移动代码放入其中 - 对脚本进行了两项更改
- 将
Spawner
脚本放在生成器游戏对象上 - 将
Ball
预制件拖到Spawner
的 - 将
Ball
脚本放在球预制件上
public GameObject thing
中
完成。