在游戏制作过程中我们经常会Destroy一些没用的GameObject,那么在ulua里我们怎么样来判断我们的引用被Destroy了呢,这里要感谢阿盟哥,他已经为我们解决了这个问题,在他写的
Global.lua里,代码如下:
function IsNil(uobj)
return uobj == nil or uobj:Equals(nil)
end
只要将要判断的对象传进来就行了。好,我们来看个例子吧,lua代码如下:
function Main()
local GameObject = UnityEngine.GameObject;
local go = GameObject('go');
local node = go.transform;
node.position = Vector3.one;
GameObject.Destroy(go);
if go:Equals(nil) then
print("go is nil");
end
--[[print('gameobject is :'..tostring(go));--]]
end
function IsNil(uobj)
return uobj == nil or uobj:Equals(nil)
end
我这个是在LuaFrameword框架下运行的,结果不用说大家都知道就是打印 go is nil 这句话。
原先我的判断代码不是这样的我的是用go==nil 来判断的但是结果是false,而用go:Equals(nil)的结果是true;这个让我一时不知道是怎么一回事,后来通过百度让我想到了引用;引用变量存储的是对象的内存地址,对象销毁时内存还没有回收,也就是说go存储原来的内存地址,那他就不会等于nil了;而Equals是比较两个对象的状态,所以go == nil 是false,go:Equals(nil)的结果是true。
OK,今天就到这里,有兴趣的朋友可以去这里看看或许里面有你想要的 http://bbs.ulua.org/