Tencent / puerts

PUER(普洱) Typescript. Let's write your game in UE or Unity with TypeScript.
Other
4.98k stars 696 forks source link

[Unity] Bug: BlittableCopy 导致可空的结构体闪退 #1562

Open birnfly opened 11 months ago

birnfly commented 11 months ago

前置阅读 | Pre-reading

Puer的版本 | Puer Version

2.x(普通模式)和1.4.x

Unity的版本 | Unity Version

2021.3.8f1

发生在哪个平台 | Platform

Editor(mac)

错误信息 | Error Message

当属性声明成 Vector4? 可空时,js端调用会闪退,包括编辑器也会闪退。 在1.4.x 和 2.x的普通模式下都有问题。 另外在2.x中,开启IL2CPP 模式,可以正常使用。

[BlittableCopy]
static IEnumerable<Type> Blittables
{
    get
    {
        return new List<Type>()
        {
               typeof(Vector4)
        };
    }
}

问题重现 | Bug reproduce

在js端口调用 Vector4? 属性时,编辑器崩溃。

zombieyang commented 11 months ago

        void Start()
        {
            jsEnv = new JsEnv();

            jsEnv.Eval(@"
                console.log(CS.PuertsTest.JsCallCs.v4_1)
                console.log(CS.PuertsTest.JsCallCs.v4_2)
            ");
        }

        public static UnityEngine.Vector4? v4_2 = null;
        public static UnityEngine.Vector4? v4_1 = new UnityEngine.Vector4(1, 2, 3, 4);

这么写了下并没有事。是否有别的补充呢

birnfly commented 10 months ago

将 v4_2 、 v4_1 定义成 get set 试试