【C#/Lua】

问题

Unity中的GameObject在C#层面判空为true,但是在Lua层面并不等于nil。

原因

Unity里的Object采用的是两层模型(https://developer.unity.cn/projects/693922a0edbc2af1c82a6761),本质是个「包装器(wrapper object)」,它的 C# 实例只是个"代理",真正干活的是背后的 C++ 原生对象。当某个对象为空的时候,

解决方案

通过真正销毁Object

可以吗?

通过C#层面的==来判断实际的native对象是否为空

function cs_is_null(obj)
    return CS.LuaUtility.IsNull(obj)
end
public class LuaUtility 
{
    // 变量是否为空的判断由C#来做比较保险
    public static bool IsNull(UnityEngine.Object o)
    {
        return o == null;
    }
}
posted @ 2026-03-16 17:52  JimmyZou  阅读(3)  评论(0)    收藏  举报