对我来说,JetBrains 的 Rider 长期以来一直被认为是 Unity 开发的最佳 IDE。在最近的 Rider 2023.1 版本中,添加了许多新功能,使开发人员的工作更轻松。 JetBrains 再一次没有让人失望,并继续设定高标准。
新版本允许通过 USB 电缆调试在 Android 设备上运行的游戏。一般来说,它通过自动为连接的玩家创建临时运行配置、优化后续会话以及允许在各种平台上轻松保存和与您的团队共享来简化调试。对于某些人来说,一个重要的特性将是在 IDE 中支持本地化文档。
现在也是最终深入研究和探索 UI 工具包的时候了。
Rider 在 UI Toolkit 的基础上为 Unity Editor 添加了三个 UI 扩展模板。
Rider 2023.1 包括在使用 [SerializeReference] 属性识别字段、在 Unity 动画中查找 C# 用法(这被严重遗漏)以及格式化 [Header] 属性方面的改进。
通常,为使用 C# 添加了许多增强功能。最后但同样重要的是,最甜蜜的部分:来自 JetBrains 的期待已久的 DOTS 支持。
好吧,让我们简单回顾一下这是怎么回事,以及是否值得将 Rider 升级到最新版本。如果您还没有使用过这个 IDE,那么这篇文章对您也很有用。
有时,一款游戏在 Unity 编辑器中运行得非常好,但在设备上却不那么顺利。现在,Rider 允许您通过 USB 直接在设备上调试代码。嗯,这很鼓舞人心。
请记住,要使此功能起作用,必须在启用 Development Build 和 Script Debugging 选项的情况下编译构建。
我想提醒您的是,设备本身也应该正确设置。首先,必须在设备上启用开发者模式。
另一种查找“内部版本号”项目的简单方法是在设置中搜索它。
接下来,您需要做的是在出现的“开发者选项”中启用“USB调试”。
只剩下几步了。在设备上启动您的游戏,在 Rider 的主菜单中,单击“运行”,然后单击“附加到 Unity Process...”。在打开的窗口中,选择带有您的应用程序的 Android 设备。
一切都准备好了!直接从设备设置断点和调试您的游戏!不要犹豫,利用这个强大的调试工具来增强您的游戏开发过程。
一旦您第一次开始调试,Rider 就会自动为 Android 播放器创建一个临时运行配置。如果您想保存运行配置以供将来使用,您可以这样做并与您的团队分享。
当然,我们都非常习惯旧的、好的,同时非常不灵活的 IMGUI。然而,Unity 团队长期以来一直致力于开发新的 UI Toolkit 包,以改善我们为游戏创建 UI 的体验。从 Unity 2022.2 开始,建议在编辑器中创建 UI 时使用新方法。
UI Toolkit 是一个单独的深度主题。我只想说,新方法提供了一种更方便、在某种程度上更通用的 UI 创建方法。如果您有使用 HTML 和 CSS 的经验,您将很容易适应。但我也建议其他人不要耽误掌握 UI Toolkit。
现在,对于 Unity 2022.2 或更早版本的项目,Rider 默认提供新模板的使用。让我们试试其中之一。为此,首先,我们将创建一个简单的 ScriptableObject 来描述游戏中的项目。
[CreateAssetMenu(fileName = "GameItem", menuName = "Game Item", order = 0)] public class GameItem : ScriptableObject { public string itemName; public int weight; public int price; }
让我们为这个 ScriptableObject 创建一个自定义编辑器。为此,请右键单击 Rider 中的 Editor 文件夹,然后添加并选择 Unity Script。
在打开的窗口中,选择自定义编辑器。让我们将我们的编辑器命名为 GameItemEditor。
在 CustomEditor 属性中,指示创建的编辑器用于 GameItem 类。
using UnityEditor; using UnityEngine.UIElements; [CustomEditor(typeof(GameItem))] public class GameItemEditor : Editor { public override VisualElement CreateInspectorGUI() { return base.CreateInspectorGUI(); } }
打开窗口-> UI 工具包-> UI Builder。在视口中,保存当前的 UI 文档并将其命名为 GameItem.uxml。在“库”窗口中,添加三个与我们的 GameItem 类字段相对应的字段,并为它们指定适当的名称。
使用 UI Toolkit 有几个明显的优势。可以通过 UI Builder 以及编程(有点类似于 IGMUI)以图形方式编辑开箱即用的 UXML 文档。现在可以在USS中设置UI显示样式,本质上类似于CSS,然后在项目中复用。哦,这怎么不见了。还提供自动撤消支持。
另一个重要的事实是自动数据绑定。让我们在绑定路径字段中指明 GameItem 类字段的名称。
不要忘记通过视口窗口中的文件-> 另存为…菜单保存文档。保存 Ctrl-S / Cmd-S 的热键在这里对你没有帮助。
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" editor-extension-mode="False"> <ui:TextField picking-mode="Ignore" label="Name" name="Name" binding-path="itemName" /> <ui:IntegerField label="Weight" value="0" name="Weight" binding-path="weight" readonly="false" /> <ui:IntegerField label="Price" value="0" name="Price" binding-path="price" focusable="true" /> </ui:UXML>
现在让我们完成 GameItemEditor 的编写,以便它直接从 UXML 文档形成检查器。
[CustomEditor(typeof(GameItem))] public class GameItemEditor : Editor { public VisualTreeAsset treeAsset; public override VisualElement CreateInspectorGUI() { var inspector = new VisualElement(); treeAsset.CloneTree(inspector); return inspector; } }
在“项目”窗口中选择 GameItemEditor 脚本并为 Tree Asset 字段指定创建的 UI 文档 GameItem.uxml,只需将其拖到那里即可。
我们的 GameItem 类自定义编辑器已准备就绪。您可以对 UI 文档进行一些试验,看看它的更改将如何影响检查器中的显示。
那么,新 Rider 2023.1 的发布是深入研究 UI Toolkit 并获得其使用的所有好处的一个很好的理由。
Unity 的 Data-Oriented Technology Stack,简称 DOTS,是 Unity 团队开发多年的一个项目。在将近一年没有任何更新后,DOTS 软件包已从实验状态转为预发布版本,即 1.0.0 版。在撰写本文时,它是 1.0.0-pre.65。并承诺在 2023 年发布。
尽管开发时间很长并且有些人对 DOTS 持怀疑态度,他们已经放弃等待发布,但新堆栈的功能和性能仍然令人惊叹。
面向数据的设计,或者一般来说,实体组件系统 (ECS),为游戏编程架构提供了一种完全不同的方法。与熟悉的面向对象编程模式不同,这里的重点是数据的分离及其处理。在这样的架构中,相似的数据通常在内存中彼此靠近,并允许系统以惊人的速度处理它,特别是如果这可以在多线程模式下完成。
在 DOTS 上做了大量工作,添加了本机内存管理机制,以便可以直接从 C# 方便地使用它们。
随着 DOTS 1.0.0 的发布,应用程序开发的许多方法都发生了变化。在我看来,它们变得更加方便和直观。
尽管仍然缺乏良好的文档,但足以让您开始深入 DOTS 令人难以置信的高效世界,并为 ECS 和多线程数据处理重新连接您的大脑。
我之前发布了一篇关于使用Gravity Simulation With Unity DOTS 1.0进行重力模拟的文章。如果需要,您还可以找到许多其他教育材料来学习这个堆栈。为了测试 Rider 的新功能,我打开了旧的 Wave Propagation 项目,该项目是在以前版本的 DOTS 上编写的。
一直让我恼火的是,由于编写代码的特殊性,Rider 或 Visual Studio 会发出许多警告。现在代码看起来干净、令人愉快。
最后!我多么期待这个! Rider 正式支持 DOTS,这无疑使其成为 Unity 开发的第一 IDE。现在 Rider 真正明白什么是对的,什么是不对的。
例如,在这段代码中,
public partial struct TransformingSystem : ISystem { [BurstCompile] public void OnUpdate(ref SystemState state) { var field = SystemAPI.GetSingleton<Field>(); var job = new TransformingJon { HeightScale = field.CellHeightScale, DeltaTime = SystemAPI.Time.fixedDeltaTime, FieldViscosity = field.Viscosity, MinHeight = field.MinHeight }; job.ScheduleParallel(); } }
Rider 建议现在,为了正确访问单例 Field,OnCreate() 需要通过方法 state.RequireForUpdate<Field>() 设置期望值。
public partial struct TransformingSystem : ISystem { public void OnCreate(ref SystemState state) { state.RequireForUpdate<Field>(); } [BurstCompile] public void OnUpdate(ref SystemState state) { var field = SystemAPI.GetSingleton<Field>(); var job = new TransformingJon { HeightScale = field.CellHeightScale, DeltaTime = SystemAPI.Time.fixedDeltaTime, FieldViscosity = field.Viscosity, MinHeight = field.MinHeight }; job.ScheduleParallel(); } }
为 MonoBehaviors 创建面包师的模板已经出现,您将被要求创建一个新组件或向现有组件添加字段。
当然,并非一切都是完美的。生成面包师代码时,使用了过时的模板。我得到了这段代码。
public class FieldAuthoring : MonoBehaviour { public GameObject CellPrefab; public Field Field; public Impulse Impulse; public class FieldAuthoringBaker : Baker<FieldAuthoring> { public override void Bake(FieldAuthoring authoring) { AddComponent(new FieldComponentData { CellPrefab = GetEntity(authoring.CellPrefab), Field = authoring.Field, Impulse = authoring.Impulse }); } } } public struct FieldComponentData : IComponentData { public Entity CellPrefab; public Field Field; public Impulse Impulse; }
在这里,使用了已经过时的方法 GetEntity() 和 AddComponent()。相反,现在应该以这种方式添加组件。
public override void Bake(FieldAuthoring authoring) { var entity = GetEntity(TransformUsageFlags.Dynamic); AddComponent(entity, new FieldComponentData { CellPrefab = GetEntity(authoring.CellPrefab, TransformUsageFlags.Dynamic), Field = authoring.Field, Impulse = authoring.Impulse }); }
当然,您可以自己更改模板。但我认为 JetBrains 的修复不会花很长时间到达。还可以为组件创建一个带有面包师的授权 MonoBehaviour。在他们的博客中,您已经可以找到一篇文章,其中广泛描述了使用 DOTS 时的新功能,所以我认为在这里描述相同内容没有意义。
Rider 2023.1 版本为 Unity 开发人员带来了大量新功能和改进,巩固了其作为 Unity 开发最佳 IDE 的地位。凭借针对 Android 设备的增强调试、UI 工具包的新模板、期待已久的 DOTS 支持,以及快速访问 Unity 注册表包和本地化 API 文档的在线文档等附加功能,JetBrains 继续提高游戏开发工具的标准。这些功能不仅简化了开发过程,而且使开发人员能够创建更好、更高效的游戏。
此外,Rider 2023.1 还提供了其他几个更新,例如更准确地检测代码中的序列化字段、改进了对在 Unity 动画中查找 C# 用法的支持,以及强烈要求更新格式化引擎以将 [Header] 属性放在单独的行上。这些增强功能有助于提供更加精简和高效的开发体验。
无论您是经验丰富的Unity开发人员还是新手,Rider 2023.1 版本都值得探索。新功能可满足广泛的需求,并有助于简化开发过程。如果您以前没有使用过 Rider,此版本提供了一个亲身体验其强大功能的绝佳机会。对于那些已经在使用 Rider 的人来说,升级到最新版本无疑会增强您的游戏开发工作流程。
使用 Rider 2023.1 拥抱 Unity 开发的最新进展,并将您的游戏项目提升到新的高度。不要错过改善您的开发体验和创建更具吸引力的高性能游戏的机会。