系统的总览 (Systems Overview)

目录

[TOC]


核心系统(预制体和脚本) (Core Systems (Prefabs and Scripts))

本插件中有几个关键的预制体,可以控制第一人称探索套件的所有行为。它们都由一个预制体来进行管理:FPECore。

你只需要在场景中放置一个(并且只能放置一个)FPECore预制体,就可以在游戏生命周期中创建和管理所有其他的系统。

FPECore预制体包含了对“现有的系统预制体”的引用,比如FPEPlayerController预制体(第一人称角色控制器)。这些预制体可以“开箱即用”的驱动系统的行为,并驱动示例场景的运行。

FPECoreInspector.jpg

变量名———————— 变量名的中文翻译———————— 说明
Event System 事件系统 这个预制体是标准的Unity的EventSystem。这个预制体已经经过了定制,可以收听特定的Unity输入。它驱动了UI系统,包括菜单、可阅读物等。
Interaction Manager 交互管理器 这个预制体承担了大部分的交互工作。它负责处理玩家与游戏中的对象的交互、UI更新等。
Player 玩家 这个预制体是玩家的角色控制器。这是一个相当标准的角色控制器的对象,具有准心、摄影机等功能。它可以处理玩家的移动、奔跑、跳跃、蹲下和环顾四周。但这个角色控制器也有一些更复杂的东西,比如处理玩家与“可停靠类型的对象”的交互,冻结玩家的运动或视野等。如果你想使用你自己的角色控制器,你可以这样做。但是,你还要做一些额外的工作。
FPEInteractionManagerScript.cs文件中包含一个名为“Player_Controller_Specific”的代码区域。要切换到其他现成的角色控制器(如UFP插件的角色控制器,或者Unity的Standard Assets中的角色控制器)。你必须确保这个代码区域中的功能,与这些第三方角色控制器挂钩。

例如,EnableMouseLook()函数和DisableMouseLook()函数。它们负责与FPEMouseLook脚本通信。如果要让这个功能与第三方角色控制器一起工作,你必须更改这些功能,以确保与第三方角色控制器的功能相关联。
Input Manager 输入管理器 这个预制体在Unity输入系统和本插件的其余部分之间,提供了一个抽象层。输入是虚拟定义(应该是“使用虚函数定义”的意思吧)的,因此你可以更轻松地支持多种输入类型,而无需编辑本插件中的其余代码。
如果你希望用另外一个键来执行交互,那么你只需要更新FPEInputManager.cs脚本,并且不必更改任何其他的代码。
Save Load Manager 保存/加载管理器 这个预制体负责处理游戏文件的保存和加载。它使用C#代码,将二进制形式的对象数据,序列化为数据文件。
这个预制体只能保证在Windows PC版本上运行,但也为其他平台提供了良好的基础。但是我们不能保证能够维护这个功能在其他平台上的运行。(因为,我没有Mac或PS4 Pro的开发套件,也没有其他的开发套件)。

有关详细信息,请参阅 Save Game System documentation(保存游戏系统)的章节。
Menu 菜单 默认情况下,此预制体设置为FPEGameMenu预制体,但这个可以是任何FPEMenu类的派生类的预制体。
例如,你可以使用本插件自带的FPESimpleMenu预制体,将这个预制体上面的按钮换一换,把界面变得更美好一点,那么这个菜单的一切都将按预期工作。
你也可以制作自己的菜单预制体,并把这个预制体拖到这个选项中。


系统的图解 (Systems Diagram)

下图是First Person Exploration Kit插件的核心系统的可视化说明。

ArchitectureOverview.jpg


更换核心系统 (Replacing Core Systems)

"菜单"和"保存/加载系统",是可以完全被替换的。

出厂时,这个插件的FPEGameMenu预制体(FPECore中的默认菜单),和FPESaveLoadManager预制体(FPECOre中的默认保存/加载管理器)将一起使用。

如果,你想使用不同的菜单,并仍然使用插件自带的“保存/加载管理器”,你绝对可以这样做。你只需要确保新的菜单,会调用FPESaveLoadManager中的Public Interfaces)(公共接口),就像FPEGameMenu一样。

相反,如果你想重用FPEGameMenu预制体,但可以编写自己的“保存/加载管理器”。你只需要确保将FPEGameMenu预制体的UI元素中指定的按钮事件,重新分配给新的保存/加载功能。


一般来说,如果要替换这些系统,最好扩展现有的类。例如,如果你想编写自己的“保存/加载管理器”,最好创建一个它的子类,即使子类中的大部分的代码都和父类相同。这样,当以后这个插件更新时,你自定义的系统代码将不会被覆盖。

results matching ""

    No results matching ""