一、前言
FPS Framework 是一个旨在大幅加快您的 FPS 开发进程的资产。该资产提供大量内置系统和工具,您在开发过程中将需要它们。
文档:https://akila.gitbook.io/fps-framework/tutorials/rp-conversions
二、插件下载安装
https://assetstore.unity.com/packages/templates/systems/fps-framework-2-0-278978
三、切换渲染管线
FPS 框架内置了 RP 转换器,可自动安装和配置您选择的渲染管线。无需额外步骤。要开始,请通过导航:Tools > Akila > FPS Framework > Settings
四、快速开始
FPS Framework 中的第一人称控制器基于character controller,它为角色提供了大量控制,无需任何外部物理行为。
1、创建第一人称控制器

点击 FPS 控制器后,你应该在你的场景中有一个功能性的第一人称控制器。角色默认有一个摄像头;如果你的场景中已经有了摄像头,请将其删除。
现在你应该看到的是:
2、拖入Game Manager

3、拖入测试场景(可选)

五、参数
1、FirstPersonController参数说明

| 参数名 | 描述 |
|---|---|
| 加速度 (Acceleration) | 角色启动和停止的运动速度。值越高,角色开始移动和停止的速度越慢。 |
| 行走速度 (Walk Speed) | 角色行走时的移动速度。值越高,角色移动越快。 |
| 冲刺速度 (Sprint Speed) | 角色冲刺时的移动速度。值越高,角色移动越快。 |
| 战术冲刺速度 (Tactical Sprint Speed) | 角色进行战术冲刺时的移动速度。值越高,角色移动越快。 |
| 跳跃高度 (Jump Height) | 角色能够跳跃的高度。值越高,跳跃高度越高。 |
| 下蹲高度 (Crouch Height) | 角色下蹲时的降低程度。值越高,角色下蹲幅度越小。 |
| 脚步间隔 (Step Interval) | 角色脚步的频率(不影响移动速度,只影响音效)。值越高,脚步频率越快。 |
| 斜坡滑落 (Slide Down Slopes) | 如果为true,当角色处于坡度大于CharacterController.slopeLimit的斜坡时,会向下滑落。 |
| 斜坡滑落速度 (Slope Slide Speed) | 角色在斜坡上滑落的加速度。值越高,滑落速度越快。 |
| 重力系数 (Gravity) | 角色重力的乘数。实际重力 = Physics.gravity × 重力系数。 |
| 最大下落速度 (Max Fall Speed) | 最大下落速度(单位:Km/h)。 |
| 地面吸附力 (Stick To Ground Force) | 当角色在地面或斜坡上时施加的力。值越高,跳跃高度越低。 |
| 摄像机 (Camera) | 旋转视角时应移动的摄像机或摄像机支架。 |
| 灵敏度 (Sensitivity) | 视角旋转对输入的反应敏感度。 |
| X轴最大角度 (Maximum X) | 视角能够达到的最大角度。 |
| X轴最小角度 (Minimum X) | 视角能够达到的最小角度。 |
| 动态灵敏度 (Dynamic Sensitivity) | 如果为true,灵敏度会随视野(FOV)变化,保持相同的手感。 |
| 锁定光标 (Lock Cursor) | 如果为true,游戏开始时光标将不可见并被锁定。 |
| 全局方向 (Global Orientation) | 如果为true,方向将是全局的,角色自身的旋转不会影响视角。 |
| 脚步声效 (Footsteps SFX) | 脚步发生时播放的音频配置文件列表。 |
| 跳跃音效 (Jump SFX) | 跳跃时播放的音频配置文件。 |
| 落地音效 (Land SFX) | 落地时播放的音频配置文件。 |
2、事件

OnJump跳跃时:在跳跃时被调用OnLand着陆时:在着陆时被调用
六、库存
1、系统概述
本库存系统基于 IInventory 接口构建,使用两个核心列表来管理物品:
- 物品列表 (Items):由
InventoryItem对象组成,这些对象继承自MonoBehaviour并附加在游戏对象上 - 可收集物列表 (Collectables):独立追踪每种库存物品的数量数据
2、创建库存系统
基本设置
- 创建一个空游戏对象作为玩家对象的
子对象 - 为该空对象添加
Inventory组件 - 此对象将作为所有物品对象的父对象,并通过
Inventory类进行管理
重要提示:库存组件必须附加在玩家对象的
子对象上,否则会导致错误
前面我们通过一键创建的First Person Controller其实已经自带了库存系统
3、创建自定义库存物品
基础步骤
- 创建新脚本,继承自
InventoryItem而非MonoBehaviour
// 必需引用指令
using Akila.FPSFramework;
// 继承 InventoryItem 类
public class MyItem : InventoryItem
{
// 自定义代码
}
- 将此脚本附加到要作为库存子对象的游戏对象上
- 将该对象设为库存对象的子对象,系统将自动检测并管理其激活状态
拾取处理
- 从你的物品游戏对象创建预制体
- 将此预制体分配给一个"可拾取物品 (Pickable)"
- 当玩家与可拾取物品交互时,物品会自动添加到库存并切换到该物品
丢弃处理
using Akila.FPSFramework;
using UnityEngine;
public class MyItem : InventoryItem
{
public Pickable itemToPickup; // 可拾取物品引用
protected override void Start()
{
base.Start();
replacement = itemToPickup; // 告诉系统丢弃时生成什么物品
}
protected override void Update()
{
base.Update();
if (Input.GetKeyDown(KeyCode.E))
{
Drop(true); // 将物品丢弃到地面上
}
}
}
4、创建自定义可收集物 (Collectables)
概念说明
可收集物与库存物品不同,其主要目的是追踪物品数量。例如:
- 医疗包使用次数
- 手榴弹数量
- 枪支共享的弹药数量
创建步骤
在库存组件中添加可收集物
选择库存对象
在 Inspector 窗口中点击 Collectables 列表的 “+” 按钮

配置三个字段:
- Count:当前数量
- Limit:最大持有数量
- Identifier:标识符(用于区分不同类型)
创建标识符
- 在项目窗口中右键:Create > Akila > Inventory Collectable Identifier
- 这会创建一个脚本化对象文件
- 设置合适的名称和"DisplayName"字段

在代码中使用可收集物
using Akila.FPSFramework;
public class MyItem : InventoryItem
{
public InventoryCollectableIdentifier healthKitCollectableIdentifier;
private InventoryCollectable healthKitCollectable;
protected override void Start()
{
base.Start();
// 通过标识符查找对应的可收集物
healthKitCollectable = inventory.collectables.Find(
collectable => collectable.identifier == healthKitCollectableIdentifier
);
}
protected override void Update()
{
base.Update();
if (Input.GetKeyDown(KeyCode.T)) Heal();
}
public void Heal()
{
// 检查是否有剩余数量
if (healthKitCollectable.count <= 0)
{
// 可在此处移除医疗包或执行其他逻辑
return;
}
// 执行治疗逻辑
Debug.Log("已治疗");
// 减少可收集物数量
healthKitCollectable.count--;
}
}
拾取可收集物设置
- 将可拾取物品的 Type 设置为 Collectable
- 在 Collectable Identifier 字段中分配对应的标识符
- 设置 Amount to Collect 字段定义拾取时增加的数量

确保:相同的收集物标识符也包含在库存的 Collectables 列表中,这样才能正确累加数量
其他参考官方文档说明
专栏推荐
完结
好了,我是向宇,博客地址:https://xiangyu.blog.csdn.net,如果学习过程中遇到任何问题,也欢迎你评论私信找我。
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!
浙公网安备 33010602011771号