【C#/Lua】Unity中Object的==判定问题

问题

Unity中的Object在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:53  JimmyZou  阅读(15)  评论(0)    收藏  举报