C#层对象已经删除了,但是lua层判断不为nil。然后lua调用了,又会报nil的错误。
这里提供了一种判断方式。
lua里的判断。这个Util.IsNull()是C#层代码。
function HelperFunc.IsNull(obj) if obj == nil then return true end return Util.IsNull(obj) end
public static bool IsNull(object o) { if (o is UnityEngine.Object) { return (o as UnityEngine.Object) == null; } return o == null; }
这里是类似的情况。这里有一句话说的很对。ngx.null就是一个代表null的userdata结构,类似一个自定义的类,但是没有什么具体含义,同时文档里面也提到了类似的值还有cjson.null,以后小心被坑。
打印这时候的typeof(obj),显示的是userdata,他不是lua的nil,是C#的null。对其内容操作,报的是nil的错。
报错代码:
if obj ~= nil then obj.gameObject:SetActive(true)//报错是这行,attempt to index gameobject on a nil value return obj