gpt4 book ai didi

c# - Destroy() 在 Unity3D 中不再工作

转载 作者:太空宇宙 更新时间:2023-11-03 19:55:38 26 4
gpt4 key购买 nike

我正在开发一款赛车游戏,该游戏在地面上设有加速器。当车辆接触到它时,附加到加速器的脚本会实例化一个 Fire 预制件,然后在 2 秒后将其销毁。

这是我的脚本(在 C# 中),它过去工作正常但现在 Destroy() 函数没有任何效果,我可以在游戏层次结构中看到我的 Fire 预制件的实例:

private GameObject _fireModel, _fireObj;

void Start ()
{
_fireModel = Resources.Load("Fire1") as GameObject;
_watch = new Stopwatch();
enabled = false; // (don't call Update() on each frame)
}

void OnTriggerEnter (Collider col)
{
_fireObj = Instantiate(_fireModel) as GameObject;
enabled = true; // (do call Update() on each frame)
_watch.Start();
}

void Update ()
{
_fireObj.transform.position = _player.position;

if (_watch.ElapsedMilliseconds >= _fireDurationMs)
{
Destroy(_fireObj);
_watch.Stop();
_watch.Reset();
enabled = false; // if I remove this line,
// I get a console error saying _fireObj
// has been destroyed! Yet I can still
// see it on the game and in the hierarchy
}
}

您是否见过此脚本不会破坏 Fire1 实例的情况?

最佳答案

如果在 _fireDurationMs 内发生两个 OnTriggerEnter 事件,您将获得对象的两个新实例化,并且只有 1 个将被销毁,因为您只保留对最近一次火灾的引用。

如果这是我的游戏,我会稍微改进一下设计。您可以编写一个名为“DestroyAfterMilliseconds”之类的脚本,而不是让加速器负责消灭火,它会在预设时间发生后销毁它所附加的游戏对象,并将其附加到火预制件。这样一来,每次火灾都将自行毁灭,而加速器的责任就会减少。然后可以在您想要为其赋予有限生命周期的任何其他对象上重复使用相同的脚本。拆分职责也将使代码更易于调试和维护。

关于c# - Destroy() 在 Unity3D 中不再工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33990780/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com