玩家配置 (Player Configuration)
关于玩家,你可以使用本插件自带的“FPEPlayerController”预制体。或者使用Unity的Standard Asset资源包中“First Person Controlle”,但是需要从头开始配置。
目录
[TOC]
使用本插件自带的FPEPlayerController预制体(推荐) (Using Included FPEPlayerController prefab (Recommended))
- 在场景中添加一些几何物体,让玩家可以行走在上面(比如:一个Plane就很好),创建一个远光灯(direction light)照亮场景。
- 要使用“FPEPlayerController”预制体,只需将FPECore预制体的一个实例拖到场景中即可。
- 运行场景。
- 就完成啦!
有关此设置的示例,请参阅included _GettingStarted.Unity场景。
从头开始创建玩家控制器 (Building a Player Controller from Scratch)
要使用其他的玩家控制器(例如,Unity的Standard Asset资源包中“First Person Controlle”),请执行以下操作:
玩家控制器,就是角色控制器。
在场景中添加一些几何物体,让玩家可以行走在上面(比如:一个Plane就很好),创建一个远光灯(direction light)照亮场景。
在场景中添加一个空游戏物体,并命名为“MyCustomFPEPlayerController”。
将MyCustomFPEPlayerController的Tag设置为“Player”.
在MyCustomFPEPlayerController上,添加一个Character Controller组件,使高度为1.8。
在MyCustomFPEPlayerController上,添加一个RigidBody组件,并勾选Is Kinematic选项。
在MyCustomFPEPlayerController上,添加一个AudioSource组件,并将“Play On Awake”设置为false。
在MyCustomFPEPlayerController上,添加一个FPEPlayer脚本.
在MyCustomFPEPlayerController上,添加一个FPEFirstPersonController脚本(这将自动添加FPEMouseLook脚本)。
在MyCustomFPEPlayerController游戏物体中,添加以下的预制体(这些预制体可在Prefabs/CustomPlayerComponents文件夹中找到),作为MyCustomFPEPlayerController的子级:
- FPEAudioDiaryPlayer预制体:Position(局部坐标)设置为 (0,0,0)
- FPESecondaryInteractionSoundPlayer预制体:Position(局部坐标)设置为 (0,0,0)
- FPEJournalSFX预制体:Position(局部坐标)设置为 (0,0,0)
- FPEGenericSFX预制体:Position(局部坐标)设置为 (0,0,0)
在MyCustomFPEPlayerController游戏物体中,添加一个Camera游戏物体,作为MyCustomFPEPlayerController的子级。将这个Camera游戏物体命名为“MainCamera”,并设置它的Tag为“Main Camera”
将MainCamera移动到(0, 0.8, 0)的位置(局部坐标)
确保MainCamera的“Projection”选项设置为“Perspective ”。并且Clipping Planes选项中的“Near”设置为0.25,“Far”设置为1000。
在MainCamera游戏物体中,添加以下预制体(这些预制体可以在Prefabs/CustomPlayerComponents文件夹中找到),作为MainCamera的子级:
- ObjectPickupLocation预制体:Position(局部坐标)设置为(0.39,-0.406,0.7)
- ObjectTossLocation预制体:Position(局部坐标)设置为(0,-0.03,0.48)
- ObjectExamineLocation预制体:Position(局部坐标)设置为(0,0,0.557)
- ObjectInInventoryPosition预制体:Position(局部坐标)设置为(0,-0.5,0)
- ExaminationCamera预制体:Position(局部坐标)设置为(0,0,0)
将MyCustomFPEPlayerController的位置(Position)设置为(0,1.2,0)
选中MyCustomFPEPlayerController游戏物体,找到FPEFirstPersonController组件的“Footsteps Sounds(脚步的声音)”选项,并为这个选项指定一个足迹(Footsteps )的声音库(soundbank)。
也为“Jump Sounds(跳跃的声音)”选项和“Landing Sounds(落地的声音)”选项,设置声音。
请根据需要配置FPEFirstPersonController组件中“Custom Flags for Movement Options”的部分,来启用或禁用声音的播放(跳跃、移动声音等)。
将MyCustomFPEPlayerController做成预制体,放进Prefabs文件夹中。
现在,我们要确保你做的MyCustomFPEPlayerController预制体,能够被FPECore使用:请选中FPECore预制体,把MyCustomFPEPlayerController预制体拖给“FPECore组件”中的“Player Prefab”选项。
在你的场景中,添加一个FPECore预制体。(确保你的场景里,有且仅有一个FPECore预制体的实例)
运行场景。现在玩家应该能正常工作了(效果与本插件自带的FPEPlayerController预制体一样)
适配其他的玩家控制器(例如Standard Asset、UFP等) (Configuring Other Player Controllers (e.g. Standard Assets, UFPS, etc.))
注意!注意!!!
虽然有些客户已经成功地将第三方玩家控制器资产(如UFP)与First Person Exploration Kit插件一起使用,
但这些资产并未得到官方支持。
有关UFPS插件的集成,请参阅 Add-Ons page.
你可以将可交互的功能移植到任何的玩家控制器上,但这不是随便拖放一下就能完成的。你必须更改几个函数,以便FPEInteractionManagerScript.cs的核心能够按照预期进行工作。
所有这些需要更改的函数,都包含在FPEInteractionManagerScript.cs脚本中的Player_Controller_Specific代码区域中。
以下是FPEInteractionManagerScript脚本在交互期间,控制FPEPlayerController预制体的函数列表。
方法名 | 方法名的中文翻译———— | 说明 |
---|---|---|
private void rememberStartingMouseSensitivity() | 记住开始时鼠标的灵敏度 | 此方法用于记录鼠标的初始灵敏度(游戏开始时鼠标的灵敏度)。 Standard Asset的的MouseLook脚本,在Character Controller上使用灵敏度的X值,在Camera上使用灵敏度的Y值(鼠标的灵敏度是Vector2类型的)。 |
public void refreshAlternateMouseSensitivities() | 刷新鼠标滚轮的灵敏度 | 刷新鼠标滚轮(进行缩放等)的敏感度。 |
private void setMouseSensitivity(Vector2 sensitivity) | 设置鼠标的灵敏度 | 直接设置鼠标的灵敏度。 并确保FPEInteractionManagerScript脚本中的smoothMouseChange变量的值为false。 |
private void restorePreviousMouseSensitivity(bool smoothTransition) | 恢复之前的鼠标灵敏度 | 设置鼠标的灵敏度为“开始时的鼠标灵敏度(Starting Mouse Sensitivity)”。 鼠标的灵敏度是Vector2类型的。 如果smoothTransition为true,则鼠标的灵敏度不会一下子恢复到“开始时的鼠标灵敏度“,而是渐进地恢复的。如果为false,则立即恢复到“开始时的鼠标灵敏度“。 |
public void changeMouseSensitivityFromMenu(float sensitivity) | 从菜单更改鼠标的灵敏度 | 用于在游戏过程,在菜单或UI中设置鼠灵敏度。 注意:在这种情况下,为了简化UI,灵敏度的X值和Y值都设置为相同的值。如果需要,你也可以将X和Y作为单独的值,让玩家进行设置。 |
private void disableMouseLook() | 禁用鼠标的光标 | 锁定鼠标的光标,以便在查看对象时,移动鼠标以旋转对象。 如果使用另一个Character Controller(UFP等),则需要替换这个功能。 |
private void enableMouseLook() | 启用鼠标的光标 | 解锁鼠标的光标,这样我们就可以在行走/正常移动时,移动鼠标。 如果使用其他Character Controller(UFPS等),则需要替换这个功能。 |
private void disableMovement() | 禁用移动 | 锁定Character Controller的移动。 如果使用的是另一个Character Controller(UFP等),则需要替换这个功能。 |
private void enableMovement() | 启用移动 | 解锁Character Controller的移动(让Character Controller可以移动)。 如果使用的是另一个Character Controller(UFP等),色需要替换这个功能。 |
public bool isMouseLookEnabled() | Returns mouse look enabled value. | |
private void DockPlayer(FPEInteractableDockScript dock) | 玩家进入停靠 | 将玩家停靠到指定的“停靠点”。 |
private void UnDockPlayer(bool smoothDock = false) | 玩家退出停靠 | 将玩家从当前的停靠点解脱出来(退出当前的停靠点)。 注意:将此函数支持第三方资产(如UFP)可能是一项非常重要的工作。 有关现有实现的详细信息,请参阅FPEFirstPersonController.cs脚本。 |
private bool dockingCompleted() | 是否正在停靠 | 检查玩家控制器,以检查玩家当前是否正在进行停靠 |
public GameObject getCurrentDockForSaveGame() | 获取当前的“停靠点”(用于保存游戏) | 仅供Save Load Manager使用。 |
public void restoreCurrentDockFromSavedGame(GameObject cd) | 恢复至保存的停靠点 | 仅供Save Load Manager使用。 |
public void RestrictPlayerLookFromCurrentView(Vector2 angles) | 从当前视野限制玩家的视野范围 | 限制玩家的视野范围为:“准心的当前位置的x和y的角度” +/-(加或者减)“angles参数的x和y的角度”。 |
public void FreePlayerLookFromCurrentViewRestrictions() | 让玩家的视野恢复自由 | Removes any existing view restriction on player's view 删除对玩家视野的任何现有的限制。 |
public void suspendPlayerAndInteraction() | 暂停玩家和交互 | 此方法用于禁用玩家的移动和查看。这个方法供SaveLoadManager使用,或需要“锁定”玩家时使用。 |
public void resumePlayerAndInteraction(bool resetLook) | 继续玩家和交互 | This function enables player movement and look, for use by SaveLoadManager or other operation when it no longer requires player be 'locked' 此方法允许玩家移动和查看。这个方法供SaveLoadManager使用,或不再需要“锁定”玩家时使用。 |
当你让你的第三方玩家控制器代码具有这些函数时,你就可以按照上面的“Building a Player Controller from Scratch(从头开始创建玩家控制器)”章节进行操作,以确保玩家控制器具有需要的子对象(例如,Examination Camera、toss location等)。
注意:
一些人报告了“UFP的缩放”和“First Person Exploration Kit的缩放”发生了冲突。
但当他们更改了几个Tag(例如MainCamera),并确保每个资产包的控制不会相互冲突,这样似乎解决了他们的问题。
此外,如果当你集成这两个资产包的时候,遇到了任何其他的问题,我可以查看您的项目或代码仓库,并帮助你让工程按照预期工作。