
本页面提供了 PaddleBallSO 的概述,这是电子书 在 Unity 中使用 ScriptableObjects 创建模块化游戏架构 的配套演示项目,并解释了它如何在其代码架构中使用设计模式和模块化。
这是为帮助 Unity 开发者使用伴随电子书的演示而创建的六个迷你指南中的第一个。该演示受到经典球拍和球的街机游戏机制的启发,展示了 ScriptableObjects 如何帮助您创建可测试、可扩展且设计师友好的组件。
电子书、演示项目和这些迷你指南共同提供了在您的 Unity 项目中使用 编程设计模式 的最佳实践。这些提示可以帮助您简化代码、减少内存使用并促进代码重用。
本系列包括以下文章:
在您深入了解 ScriptableObject 演示项目和这一系列迷你指南之前,请记住,设计模式的核心只是一些想法。它们并不适用于每种情况。这些技术可以帮助您学习与 Unity 和 ScriptableObjects 一起工作的新的方法。
每种模式都有其优缺点。仅选择那些对您的特定项目有意义的模式。您的设计师是否在很大程度上依赖 Unity 编辑器?基于 ScriptableObject 的模式可能是一个不错的选择,可以帮助他们与您的开发人员协作。
最终,最佳的代码架构是适合您的项目和团队的架构。

PaddleBallSO 以经典游戏为中心,该游戏催生了现代视频游戏,特色是两个玩家、两个球拍和一个球。
这里的重点是基础设施,而不是游戏机制。将其视为“游戏管道”——虽然不那么光鲜,但却是保持应用程序运行的重要基础。
该项目专注于 ScriptableObjects 如何在幕后工作以构建统一的应用程序。使用它们构建多功能游戏系统,可以简化项目维护并促进代码重用。您还可以将它们用于玩家数据、游戏状态管理、游戏内行为等。
PaddleBallSO 项目与最新版本的 Unity 长期支持 (LTS) 兼容,目前是 2022 LTS。它结合了 UI 工具包用于创建运行时 UI,以及输入系统用于处理用户输入。

在 GitHub 仓库 中找到并下载该项目。
加载Bootloader_scene或从GameSystems菜单启用Load Bootstrap Scene on Play。进入播放模式以开始。
尽管这些并不特定于ScriptableObjects,但演示项目使用了一些常见技术,以帮助以一致和可预测的状态启动游戏应用程序。
场景 引导程序(或引导加载程序)是负责设置游戏初始状态的编辑器扩展脚本。此初始化代码与游戏逻辑分开,并确保场景中对象的所有依赖项都正确设置。
为了避免依赖问题,引导程序在加载场景时配置基本游戏对象、管理器或服务。
如果您的Unity应用程序跨越多个场景,引导加载程序可以强制加载特定的引导场景,该场景是构建设置中的第一个场景。退出播放模式时,编辑器会重新加载先前的场景。
引导场景中的另一个组件序列管理器可以在场景加载时实例化基本预制件。在这个特定的演示项目中,创建游戏所需的一切都是预制件,包括相机、启动画面、UI菜单和场景加载器。
场景加载器然后根据需要增量加载(和卸载)任何游戏场景。在大多数情况下,这些场景主要由预制件组成。
项目场景
每个迷你游戏关卡都是一个单独的Unity场景,并出现在构建设置中。如果您想探索这些单独的场景,请在GameSystems菜单中禁用SceneBootstrapper。
许多项目还包括引导场景后的主菜单的暂存区域。这个简化的演示项目省略了主菜单场景。

使用播放和模式菜单测试PaddleBallSO,其中包括:
核心文件夹包含代码库中与应用程序无关的部分,如基本模式脚本、场景管理和用户界面逻辑。这些是更通用的类,可以应用于各种应用程序。

示例游戏重现了一个标志性的2D物理模拟,并展示了基于ScriptableObject的设计模式的潜力。
然而,在深入了解模式之前,您需要熟悉构成应用程序的MonoBehaviours。正如您所料,像Paddle、Ball、Bouncer和ScoreGoal脚本这样的组件控制基本游戏玩法。
几个更高级的管理脚本控制游戏流程:
这些MonoBehaviours与您的ScriptableObjects一起工作。它们在连接这些组件方面发挥着至关重要的作用,以便它们可以相互交流和共享数据。
事件对于项目不同部分之间的通信至关重要。它们将这些管理脚本与其他场景对象和用户界面连接起来。这种事件驱动的架构可以帮助使代码更有组织性和可调试性。
我们还为每种最常见的ScriptableObject模式提供了简化的演示示例。当您熟悉它们时,您会开始认识到ScriptableObjects如何支撑迷你游戏的架构。
我们本可以用更少的代码行制作特色迷你游戏,但这个演示特别关注与ScriptableObjects的设计模式。请注意,您也可以在没有ScriptableObjects的情况下实现许多这些模式。
作为一个团队决定每种模式如何适用于您的项目,并选择最适合您的方法。

软件开发中的模块化涉及将应用程序分解为更小、更独立的部分。这些模块服务于特定目的,可以单独开发和测试。
每一小组对象作为一个单元运作,处理游戏的一个方面。这可以是控制玩家输入、处理物理或计算分数的任何事情。
在探索项目脚本时,请注意以下关键要点:
将大型单体脚本重构为更小的部分促进了可重用性和可扩展性。这导致了团队协作的改善和测试的简化。

我们创建了PaddleBallSO项目来演示ScriptableObject的用例。以下是您将看到它们在实际应用中的几个特定地方:
一定要查看设计模式演示以获取一些额外内容!

虽然ScriptableObjects可以是存储游戏数据和简化工作流程的强大工具,但有效使用它们以避免使项目杂乱是至关重要的。
以下是使用ScriptableObjects在Unity中的一些最佳实践:
遵循这些指南,您可以避免常见的开发陷阱。

在电子书《使用 ScriptableObjects 创建模块化游戏架构》中了解更多关于 ScriptableObjects 的设计模式。您还可以在电子书《通过游戏编程模式提升您的代码》中找到更多关于常见 Unity 开发设计模式的信息。