gpt4 book ai didi

c# - 销毁对象时如何使程序执行某些操作?

转载 作者:太空宇宙 更新时间:2023-11-03 18:01:52 33 4
gpt4 key购买 nike

我的程序中有飞机(如飞机)对象,当子弹击中它们时它们会被破坏,但是当它们离开屏幕5秒钟后它们也会被破坏。

我还有一个运行状况脚本,当它降为0时会重置整个对象,并且我希望每次销毁对象时都删除一个点,但仅在屏幕外时才删除。所以我将脚本分开。

我在船只生成脚本中使用此命令在5秒钟后销毁它们,这很简单。

Destroy(spawnedPlane, 5f);


如果我只需要执行“在X秒后销毁该对象并将其添加到该值”的代码,那将是完美的。因为据我了解,“ destroy”仅接受2个参数,而没有其他参数。

当然可以,但是我茫然。对此还是很新的。抱歉,如果还不清楚,但我几乎不知道自己在做什么。

最佳答案

您可以使用events完全实现所追求的目标。以下是一个可能有用的事件示例。其他对象可以侦听该事件,一旦事件触发,便会得到通知。

[Serializable]
public class PlaneEvent : UnityEvent<Plane> { }




定义事件后,可以将其添加为“飞机”中的字段。飞机毁坏之后,您可以触发该事件,并依次通知正在监听的任何人!

public class Plane : MonoBehaviour {

public PlaneEvent OnDestroyed;

public void Destroy () {
Destroy(gameObject);
OnDestroyed.Invoke(this);
OnDestroyed.RemoveAllListeners();
}

}




现在,在得分类中,我们添加了一个方法,一旦触发 OnDestroyed平面事件,该方法就会被调用。

public class Score : MonoBehaviour { 

public void AddPointsFor (Plane plane) {
Debug.Log("A Plane was destroyed!");
//Tick a counter, add points, do whatever you want!
}

}




一旦有了这些片段,使它们协同工作就变得很简单。我们乘飞机,并将乐谱作为侦听器添加到 OnDestroyed事件。然后,一旦飞机被摧毁,便会触发该事件,并告诉得分加分。

public class Game : MonoBehaviour {

[SerializeField]
private Score _score;
[SerializeField]
private Plane _plane;

public void Start () {
// When you are destroyed let me know so I can add some points.
_plane.OnDestroyed.AddListener(_score.AddPointsFor);
_plane.Destroy();
}
}


使用事件的另一个大优点是您的飞机甚至不知道分数,它会让所有关心的人知道它已经被销毁了。以同样的方式,当飞机被销毁时,此事件还可以用于触发粒子效果,动画和声音效果,而您要做的就是添加更多的侦听器。

关于c# - 销毁对象时如何使程序执行某些操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56387393/

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