Unity Demo
自己实现的Unity Demo的记录
随机地图生成
原理说明:
预先准备好不同类型的房间模型。
现在要把第二个房间接在第一个房间上,只需要从第二个房间的Connectors随机挑选一个可用的Connector——connectTo,将它设为第二个房间的父物体。然后在第一个房间中也选一个Connector——connectFrom。
将connectTo设为connectFrom的子物体,然后重置connectTo的本地坐标和位置,再围绕y轴旋转180度即可拼接两个房间。
连接的核心代码为:
1 |
|
进一步可以通过调整参数控制地图的生成
角色控制
使用Character Controller和根运动动画
- PlayerPosture枚举: 这是角色的姿态枚举,用于描述角色当前的状态,比如站立、蹲下、跳跃、攀爬等。每个枚举值表示一种姿态。
- LocomotionState枚举: 这是角色的运动状态枚举,用于描述角色的移动状态,包括站立、行走、奔跑、攻击、使用技能等。每个枚举值表示一种运动状态。
- AnimatorInit()方法: 这个方法用于初始化动画状态机里相关参数的哈希值,以便在后续使用这些哈希值来控制动画状态。
- CheckEquipWeapon()方法: 检查是否装备武器,根据输入切换角色是否持有武器,并相应地激活/隐藏武器的游戏对象。
- CheckGround()方法: 用于检查角色是否在地面上。使用了射线检测来判断角色是否站在地面上,以便在合适的时机设置isGrounded变量。
- SwitchPlayerStates()方法: 根据角色的不同姿态和运动状态,进行状态切换。比如根据角色的运动状态和输入,判断角色应该是行走、奔跑还是站立。
- CaculateInputDirection()方法: 计算玩家输入方向在角色的本地坐标系下的方向。
- Jump()方法: 处理跳跃和攀爬等操作。根据输入和环境条件,决定角色应该执行的动作。
- SetupAnimator()方法: 设置动画参数,根据不同的状态和姿态来控制动画的播放。这里包括角色的移动速度、转向速度等信息。
- OnAnimatorMove()方法: 这个方法是 Unity 中 Animator 自带的回调函数。它在动画更新时被调用,用于应用动画控制的角色移动。这里根据不同的姿态和状态,应用动画的位移和角色的垂直速度来更新角色的位置。
针对跳跃攀爬,根据射线检测结果、玩家的输入方向和与墙体的角度等条件,决定玩家的下一步动作,如跳跃、低位攀爬、高位攀爬、翻越或爬墙。
角色技能
调用流程:
所有技能资源:预制体和图标都通过Resource动态加载
UI
整体框架
通过单例类UIManager来管理不同的UI面板。
通过解析json文件来获取不同面板的路径然后动态加载。
使用堆栈来管理面板进出的顺序,使得只有一个面板属于激活状态。
所有面板都继承面板基类并实现其中的方法。
1 |
|
背包管理
所有背包类似的功能都通过继承Inventory类实现,Inventory类实现了对应物品槽的管理,管理Slot对象。
真正的物品都放在槽里,挂在ItemUI脚本。
ItemUI脚本实现了物品的显示和交互,包括点击,拖拽事件,计算物品对人物的属性加成。
物品的定义通过继承物品基类Item类实现,Item类中定义了物品的类型,品质,属性。
接入ChatGPT
事件的管理通过EventManager单例类实现,初始化解析json文件实现初始的事件,同时每一次调用都会在后台通过ChatGPT生成新事件并存储在事件数组中,实现事件越来越丰富。