Ale*_*nko -2 unity-game-engine
我是 Unity 的新手,有我的流程 - 我有一个对象,我需要初始化我的.dll,然后我还需要某个地方来实现我的.dll,所以有 2 个选项(就我而言)来做到这一点
public class Player : MonoBehaviour
{
Player()
{
//1 option for call some INIT methods from .dll
}
~Player()
{
//1 option for call some RELEASE methods from .dll
}
private void Awake()
{
//2 option for call some INIT methods from .dll
}
private void OnDestroy()
{
//2 option for call some RELEASE methods from .dll
}
}
Run Code Online (Sandbox Code Playgroud)
实际上,我为此目的使用 constructor + destructor,但根据我遇到的示例,我明白这不是 Unity 中的最佳实践,所以问题是 - 为什么?这里有什么问题?
Unity为处理游戏相关事件(加载、更新、物理碰撞...)而不是内存相关事件(构造、销毁)提供了一个生命周期。
创建:
您不能GetComponent<T>(...)在构造函数中调用 unity api(例如),因为MonoBehaviours它们只是某个特定的装饰器,GameObject并且GameObject在构造函数运行时无法验证创建是否已完成!
UnityAwake为每个对象只运行一次,当对象创建完成并MonoBehaviour添加所有对象时。
销毁:
此外,由于 c# 提供了开箱即用的内存管理,一旦没有对对象的更多引用(不会在删除最后一个引用后立即调用,即使在调用 时也不会),在不确定的时间点调用对象析构函数IDisposable.Dispose()。
Unity的OnDestroy被称为正好当对象被“破坏”,从而成为统一的生命周期无法使用。这是您需要知道的时间点,即您的游戏何时运行。c# 的析构函数在这里完全没用。
| 归档时间: |
|
| 查看次数: |
225 次 |
| 最近记录: |