• 注册
  • 技术交流 技术交流 关注:8 内容:20

    [uScript]指南-uScript类

  • 查看作者
  • 打赏作者
  • 当前位置: 未转变者中文社区 > 技术交流 > 正文
    大版主
    Lv.15

    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";
        }
    }

    请登录之后再进行评论

    登录
  • 发布内容
  • 任务中心
  • 实时动态
  • 偏好设置
  • 帖子间隔 侧栏位置: