Skip to content
This repository was archived by the owner on Sep 11, 2024. It is now read-only.

常见问题

huliangjie edited this page Sep 3, 2020 · 2 revisions

值类型 (Vector3)

JS 中并没有值类型, 因此 JS 中 Vector3 等类型的赋值操作要特别注意.

let a = new Vector3(1, 1, 1);
let b = a;
a.Set(2, 2, 2); // 将同时改变 b 的值, 因为他们实际引用的是同一个 JS 对象.

let c = a + new Vector3(2, 2, 2); // + 运算会自动产生一个新的 Vector3 对象(JS)

C# 数组

默认情况下 C# 数组不会自动映射为 JS 数组. 其中 GameObject.GetComponents() 等方法在生成绑定代码时已经做过额外处理, 返回值将映射为 JS 数组.

C# 数组本身是引用类型, 自动映射将产生非预期的副作用

class Foo {
    static int[] GetValues() {
        // ...
    }
}
let values = Foo.GetValues();   // => [C#] System.Array<number>
let value = values.GetValue(0); // 通过 C# Array 接口可以操作 C# 数组
let arr = jsb.ToArray(values); // 转换成 JS 数组
console.log(arr[0] == value);

let objects = gameObject.GetComponents(MonsterBehaviour); // => [JS] Array<MonsterBehaviour>
let obj = objects[0]; // 通过 JS 数组操作
Clone this wiki locally