玩家配置 (Player Configuration)

关于玩家,你可以使用本插件自带的“FPEPlayerController”预制体。或者使用Unity的Standard Asset资源包中“First Person Controlle”,但是需要从头开始配置。

目录

[TOC]


  1. 在场景中添加一些几何物体,让玩家可以行走在上面(比如:一个Plane就很好),创建一个远光灯(direction light)照亮场景。
  2. 要使用“FPEPlayerController”预制体,只需将FPECore预制体的一个实例拖到场景中即可。
  3. 运行场景。
  4. 就完成啦!

有关此设置的示例,请参阅included _GettingStarted.Unity场景。


从头开始创建玩家控制器 (Building a Player Controller from Scratch)

要使用其他的玩家控制器(例如,Unity的Standard Asset资源包中“First Person Controlle”),请执行以下操作:

玩家控制器,就是角色控制器。

  1. 在场景中添加一些几何物体,让玩家可以行走在上面(比如:一个Plane就很好),创建一个远光灯(direction light)照亮场景。

  2. 在场景中添加一个空游戏物体,并命名为“MyCustomFPEPlayerController”。

  3. 将MyCustomFPEPlayerController的Tag设置为“Player”.

  4. 在MyCustomFPEPlayerController上,添加一个Character Controller组件,使高度为1.8。

  5. 在MyCustomFPEPlayerController上,添加一个RigidBody组件,并勾选Is Kinematic选项。

  6. 在MyCustomFPEPlayerController上,添加一个AudioSource组件,并将“Play On Awake”设置为false。

  7. 在MyCustomFPEPlayerController上,添加一个FPEPlayer脚本.

  8. 在MyCustomFPEPlayerController上,添加一个FPEFirstPersonController脚本(这将自动添加FPEMouseLook脚本)。

  9. 在MyCustomFPEPlayerController游戏物体中,添加以下的预制体(这些预制体可在Prefabs/CustomPlayerComponents文件夹中找到),作为MyCustomFPEPlayerController的子级:

    • FPEAudioDiaryPlayer预制体:Position(局部坐标)设置为 (0,0,0)
    • FPESecondaryInteractionSoundPlayer预制体:Position(局部坐标)设置为 (0,0,0)
    • FPEJournalSFX预制体:Position(局部坐标)设置为 (0,0,0)
    • FPEGenericSFX预制体:Position(局部坐标)设置为 (0,0,0)
  10. 在MyCustomFPEPlayerController游戏物体中,添加一个Camera游戏物体,作为MyCustomFPEPlayerController的子级。将这个Camera游戏物体命名为“MainCamera”,并设置它的Tag为“Main Camera”

  11. 将MainCamera移动到(0, 0.8, 0)的位置(局部坐标)

  12. 确保MainCamera的“Projection”选项设置为“Perspective ”。并且Clipping Planes选项中的“Near”设置为0.25,“Far”设置为1000。

  13. 在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)
  14. 将MyCustomFPEPlayerController的位置(Position)设置为(0,1.2,0)

  15. 选中MyCustomFPEPlayerController游戏物体,找到FPEFirstPersonController组件的“Footsteps Sounds(脚步的声音)”选项,并为这个选项指定一个足迹(Footsteps )的声音库(soundbank)。

  16. 也为“Jump Sounds(跳跃的声音)”选项和“Landing Sounds(落地的声音)”选项,设置声音。

  17. 请根据需要配置FPEFirstPersonController组件中“Custom Flags for Movement Options”的部分,来启用或禁用声音的播放(跳跃、移动声音等)。

  18. 将MyCustomFPEPlayerController做成预制体,放进Prefabs文件夹中。

  19. 现在,我们要确保你做的MyCustomFPEPlayerController预制体,能够被FPECore使用:请选中FPECore预制体,把MyCustomFPEPlayerController预制体拖给“FPECore组件”中的“Player Prefab”选项。

  20. 在你的场景中,添加一个FPECore预制体。(确保你的场景里,有且仅有一个FPECore预制体的实例)

  21. 运行场景。现在玩家应该能正常工作了(效果与本插件自带的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),并确保每个资产包的控制不会相互冲突,这样似乎解决了他们的问题。
此外,如果当你集成这两个资产包的时候,遇到了任何其他的问题,我可以查看您的项目或代码仓库,并帮助你让工程按照预期工作。

results matching ""

    No results matching ""