开始您的开发

本页面为您提供了一些关于如何组织您自己的开发的提示。有关开发的更多一般信息,请查看 Unity文档或教程。

选择 Unity版本

我们强烈建议使用与我们相同的最新 Unity LTS(长期稳定版本 - https://unity3d.com/unity/qa/lts-releases)。这为您自己的开发提供了一个稳定的 Unity基础版本。当然,您也可以使用更新的 Unity版本,但这风险更高,我们无法保证所有 realvirtual.io 功能和特性的完全兼容性。

创建您自己的解决方案文件夹

为了将您自己的开发与 realvirtual.io 标准资源分开,建议将您自己的开发组织在 Unity Asset 文件夹下的自己的文件夹中。例如,创建一个名为 MyDevelopment 的文件夹:

将您的开发内容放入自己的文件夹

一旦 realvirtual.io 有可用的更新,您可以导入资源而不会冒险覆盖您的任何开发内容。

设置程序集定义

ℹ️

您不需要使用程序集定义,但对于较大的项目,我们建议使用它,因为它减少了编译时间并增加了类的分离度。

realvirtual.io 框架组织在不同的程序集中,这些程序集由程序集定义(Assembly Definitions)定义。您必须创建自己的程序集并引用 game4automation 程序集定义。为此,您必须在文件夹的顶级创建程序集定义。

创建程序集定义

在您的程序集定义中,您必须引用 game4automation.base 才能使用 realvirtual.io 的脚本和类。

使用新的命名空间

建议使用您自己的命名空间,例如 MyNamespace,以将您的类与标准类分开。要使用 realvirtual.io 类,您需要在 using 语句中包含 game4automation。您的解决方案的基 MonoBehavior 可能如下所示:


using UnityEngine;
using realvirtual;

namespace MyNamespace
{
    public class myownbehaviour : MonoBehaviour
    {
        // Start is called before the first frame update
        void Start()
        {

        }

        // Update is called once per frame
        void Update()
        {

        }
    }
}c

realvirtual.io 基础组件

大多数 realvirtual.io 脚本基于 Game4AutomatiohBehaviour 类,其中大多数使用存储在 realvirtual.io 预制体内 Game4AutomationController 中的设置。

您的场景应至少包含 Game4AutomationController。将 Game4AutomationController 资源拖入场景后,如果您不想使用 UI 功能、灯光、摄像机或场景导航,可以删除其中的部分内容。如果删除所有这些,您将需要定义自己的带有鼠标导航的摄像机脚本和自己的灯光。

构建您自己的行为模型

realvirtual.io 的一个重要部分是行为模型(Behavior Models)。它们将输入和输出链接到通用的 驱动传感器。在行为模型中,您可以定义自己的行为(例如您的特殊电机)并将其链接到基础 驱动。为此,您自己的类必须继承自 BehaviorInterface

以下是一个非常简单的 Drive 行为示例,该行为通过一个信号(布尔值)控制 Drive:


using game4automation;
using UnityEngine;

namespace MyNamespace
{    
    [RequireComponent(typeof(Drive))]
    public class myownbehaviour : BehaviorInterface
    {
        public PLCOutputBool StartMotor;
        private Drive drive;
        
        // Start is called before the first frame update
        void Start()
        {
            drive = GetComponent<Drive>();
        }

        // Update is called once per frame
        void Update()
        {
            if (StartMotor.Value == true)
                drive.JogForward = true;
            else
                drive.JogForward = false;
        }
    }

使用 RequireComponent 标签,您定义您的脚本需要同一个 Gameobject 上附加一个 Drive。如果没有,将自动添加一个 Drive。

GetComponent 是一个耗时的方法,这就是为什么最好在启动时获取引用(这里是私有变量 drive)

如果您将行为附加到组件上,您将自动在 Hierarchy 窗口中看到图标:

请注意,在示例中,PLCOutputBool 必须被分配。如果不分配,将发生 NULL 错误。可以像 PLCOutputBool!=null 这样进行空值检查,但空值检查也很昂贵。最好在 StartAwake 函数中检查是否为空并设置本地变量。Rider 作为高级开发框架甚至可以自动执行此操作。以下是最终且运行时优化的代码:

从基类派生您的类

在更高级的用例中,您可能希望开发自己的 Drive。您可以从标准 Drive 派生您的类,或者如果您想从头开始,可以从类 BaseDrive 派生。如果您从 BaseDrive 派生,您将需要自己开发完整的运动学和定位功能。

改进脚本的 Inspector 外观

realvirtual.io 在越来越多的组件中使用 NaughtyAttributes 来改善公开脚本属性的用户体验。您需要在 using 语句中包含 naughtyattributes 命名空间才能使用 NaughtyAttributes。您可以在此处获取 NaughtyAttributes 的文档: