• 中文
  • 注册
  • 技术交流 技术交流 关注:4 内容:20

    [uScript]指南-uScript类

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

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

      请登录之后再进行评论

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