一、前言

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、创建库存系统

基本设置

  1. 创建一个空游戏对象作为玩家对象的子对象
  2. 为该空对象添加 Inventory 组件
  3. 此对象将作为所有物品对象的父对象,并通过 Inventory 类进行管理

重要提示:库存组件必须附加在玩家对象的子对象上,否则会导致错误

前面我们通过一键创建的First Person Controller其实已经自带了库存系统
在这里插入图片描述

3、创建自定义库存物品

基础步骤

  1. 创建新脚本,继承自 InventoryItem 而非 MonoBehaviour
// 必需引用指令
using Akila.FPSFramework;
// 继承 InventoryItem 类
public class MyItem : InventoryItem
{
// 自定义代码
}
  1. 将此脚本附加到要作为库存子对象的游戏对象上
  2. 将该对象设为库存对象的子对象,系统将自动检测并管理其激活状态

拾取处理

  1. 从你的物品游戏对象创建预制体
  2. 将此预制体分配给一个"可拾取物品 (Pickable)"
  3. 当玩家与可拾取物品交互时,物品会自动添加到库存并切换到该物品

丢弃处理

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)

概念说明

可收集物与库存物品不同,其主要目的是追踪物品数量。例如:

  • 医疗包使用次数
  • 手榴弹数量
  • 枪支共享的弹药数量

创建步骤

  1. 在库存组件中添加可收集物

    • 选择库存对象

    • 在 Inspector 窗口中点击 Collectables 列表的 “+” 按钮
      在这里插入图片描述

    • 配置三个字段:

      • Count:当前数量
      • Limit:最大持有数量
      • Identifier:标识符(用于区分不同类型)
  2. 创建标识符

    • 在项目窗口中右键: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--;
}
}

拾取可收集物设置

  1. 将可拾取物品的 Type 设置为 Collectable
  2. Collectable Identifier 字段中分配对应的标识符
  3. 设置 Amount to Collect 字段定义拾取时增加的数量
    在这里插入图片描述

确保:相同的收集物标识符也包含在库存的 Collectables 列表中,这样才能正确累加数量

其他参考官方文档说明


专栏推荐

地址
【unity游戏开发入门到精通——C#篇】
【unity游戏开发入门到精通——unity通用篇】
【unity游戏开发入门到精通——unity3D篇】
【unity游戏开发入门到精通——unity2D篇】
【unity实战】
【制作100个Unity游戏】
【推荐100个unity插件】
【实现100个unity特效】
【unity框架/工具集开发】
【unity游戏开发——模型篇】
【unity游戏开发——InputSystem】
【unity游戏开发——Animator动画】
【unity游戏开发——UGUI】
【unity游戏开发——联网篇】
【unity游戏开发——优化篇】
【unity游戏开发——shader篇】
【unity游戏开发——编辑器扩展】
【unity游戏开发——热更新】
【unity游戏开发——网络】

完结

好了,我是向宇,博客地址:https://xiangyu.blog.csdn.net,如果学习过程中遇到任何问题,也欢迎你评论私信找我。

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!
在这里插入图片描述