在Unity热更新时,lua脚本中变量引用了一个GameObject,然后在Unity中将该GameObject进行Destroy,这个时候,lua脚本所对应的变量并没有为nil,这是因为在与Lua交互时,不能直接在Lua侧判断对象是否为nil(这样判断走的是C#的判空),应该调用如下方法(走的是Unity的判空)。将UnityEngineObjectExtensionForLua.cs注册到CustomSetting.cs中(ToLua),使用如下IsNull判断即可。
public static class UnityEngineObjectExtensionForLua
{
/// <summary>
/// 用于UnityEngine.Object及其子类对象的判空
/// 在使用DestroyImmediate销毁一个UnityEngine.Object对象时,该对象会被Unity认为已经是null
/// 但是C#并不认为它是null
/// 因此在与Lua交互时,不能直接在Lua侧判断对象是否为nil(这样判断走的是C#的判空),应该调用此方法(走的是Unity的判空)
/// </summary>
public static bool IsNull(UnityEngine.Object target)
{
return target == null;
}
}