关于UnityEngine.Object

UnityEngine.Object重写了==运算符和!=运算符。

//
// Operators
//
public static bool operator == (Object x, Object y);
public static bool operator != (Object x, Object y);

当GameObject被销毁后,Class类并不是真正null,只是使用==运算符和!=运算符时,Unity会把它当作null值处理。

Lua代码

local go = CS.UnityEngine.GameObject('go')
CS.UnityEngine.GameObject.DestroyImmediate(go)

if (go ~= nil) then
    go.name = 'xxx'
end

在LUA里游戏对象在销毁后的判空实际上是有问题的。LUA示例代码里go不会为nil

解决方案就是在C#代码里扩展一个判空的方法,然后在LUA里调用该方法。

注意事项

UnityEngine.GameObject go = new UnityEngine.GameObject(); 
Debug.Log(go == null); // false

UnityEngine.Object obj = new UnityEngine.Object();
Debug.Log(obj == null); // true

 

posted @ 2019-12-26 16:01  何文西  阅读(752)  评论(0编辑  收藏  举报