赞
踩
该脚本被设置为一个扩展了 Monobehaviour 的相当通用的 C# 类,但有几个值得注意的重要之处:序列化字段
在类主体的顶部,脚本为组件定义了两个字符串变量,以便在其启动和被命中时进行记录。但是,这两个字符串变量并未在代码中的任何地方定义。这是因为这些变量是序列化的,并且可以作为属性在编辑器中使用 Inspector 进行配置。
这与 Unreal 中 UProperties 的用法非常相似。在 Unity 中,可通过在变量声明上方添加“[Serialize Field]”属性来使变量出现在 Inspector 中。默认情况下,公共变量是序列化的,私有变量不是,因此不需要为公共变量使用该属性。即使变量是序列化的,你仍然可以对其进行初始化,如 hitLimit 变量所示。这将作为变量在 Inspector 中显示时的默认值。
Unreal 的基础对象类是 UObject 类,可通过扩展它来创建常规 Actor/Component 模式之外的对象。这些对象不会生成到世界中,但仍可以被其他对象/Actor 引用,对于在不污染关卡的情况下包含数据很有用。
使用 ScriptableObject
示例:游戏中的药水商店
以下是 Unreal 及其 Unity 对应项的一些常见用例和模式:
创建对象实例
类型之间的转换
销毁和禁用对象
访问组件
使用标签
查找游戏对象和组件
射线投射(追踪)
在 Unreal 中,射线投射和形状投射是使用 Trace 函数完成的。形状和光线追踪都支持按通道或对象类型进行追踪。投射输出一个 Hit Result 结构体,其中包含命中结果的所有相关信息。Unity 有几个用于射线投射的函数:
此外,还可以使用 RaycastAll() 或 SpherecastAll() 返回所有命中结果,而不仅仅是第一次命中。对于性能敏感的上下文,这些函数也有不分配垃圾的版本(例如:Physics.OverlapSphereNonAlloc)。
输入和输入管理
在 Unreal 中,可以使用 Input Actions/Axis 设置创建操作。通过这些设置,你可以为玩家操作定义各种绑定(例如,“Jump”或“Throttle”)。然后,可以将输入操作绑定到函数,以使代码能够对输入做出反应。Unity 也使用类似的系统:代码可以使用 **Input.GetAxis()**函数从定义的 Axes 读取输入。可在以下位置找到这些设置:Edit > Project Settings…> Input Manager > Axes。
Input.GetAxis(“Horizontal”) 默认绑定到 A/S 键和控制器上的左/右模拟轴。可以为每个轴设置死区、灵敏度、反转等选项。虽然被称为轴,但它也支持数字输入(使用 Input.GetButtonDown() 函数)。此外,还可以使用 Input.GetKeyDown() 查询显式键。
异步代码(延迟/时间轴)
事件系统
在 Unreal 中,大多数用户界面(UI) 是使用 Unreal Motion Graphics UI Designer (UMG) 控制的。UMG 是一种保留模式 UI 系统,使用 UMG 时,你在层级视图中创建 UI 对象,每个对象处理自己的数据和事件。UMG 使用称为小部件的特殊蓝图,使你能够在单个资源中设置 UI 布局和编写脚本。
Unity 还有一个基于 Canvas 组件的保留模式UI 系统,称为 Unity User Interface (Unity UI)。与 UMG 不同,该系统不需要单独的资源:只需使用带有UI 特定组件的游戏对象控制渲染、交互和布局。在 Hierarchy 中,所有 UI 游戏对象都放置在具有 Canvas 组件的另一个游戏对象下,它管理着 UI 的渲染方式以及如何与之进行交互。
Unity UI:https://docs.unity3d.com/Packages/com.unity.ugui@1.0/manual/index.html
向该 UI 添加行为是通过编写 C# 脚本或在 Inspector 中拖放 UnityEvent(对于像 Button 这样的组件)来完成的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。