ScriptClass类似于标准类。您可以创建此类的实例,每个实例彼此独立。对于普通的类实现,不应该使用静态函数/属性,因为uScript无法正确识别它们。相反,您应该像在C#中构造类一样构造它。唯一的区别是需要根据需要添加构造函数/函数/属性属性。
请注意,ScriptConstructor是完全可选的。相反,您可以根据需要使用另一个类的属性来访问您的类。主模块使用vector3类的构造函数,但对player类来说并不是这样,对其大多数相关类(例如playerLook)也不是这样。
定义的ScriptClass可以直接用作ScriptConstructor、ScriptFunctions和ScriptProperties的参数或返回类型。
属性构造函数采用“name”参数。但是,这是完全可选的。如果不提供name参数,uScript将只使用类名。然而,为了团体项目和命名规范。我(Ster)强烈建议您直接命名为ScriptModule。
示例代码:
[ScriptClass("vector3")] public class Vector3Class { // 这里,我们存储Vector3的状态,以便与属性/函数一起使用。 public Vector3 Vector3 { get; private set; } // 此构造函数仅供模块使用。 public Vector3Class(Vector3 vector3) => Vector3 = vector3; // 此构造函数供脚本使用。 [ScriptConstructor] public Vector3Class(float x, float y, float z) => Vector3 = new Vector3(x, y, z); [ScriptProperty] public float X { get => Vector3.x; set => Vector3 = new Vector3(value, Vector3.y, Vector3.z); } [ScriptProperty] public float Y { get => Vector3.y; set => Vector3 = new Vector3(Vector3.x, value, Vector3.z); } [ScriptProperty] public float Z { get => Vector3.z; set => Vector3 = new Vector3(Vector3.x, Vector3.y, value); } [ScriptFunction] public float Distance(Vector3Class other) { return Vector3.Distance(Vector3, other.Vector3); } [ScriptFunction] public override string ToString() { return $"{Vector3.x}x, {Vector3.y}y, {Vector3.z}z"; } }