UD3——JSON系列
UD3——JSON系列 数据持久化第三部分——系列代号UD3 JSON 全称:JavaScript 对象简谱(JavaScript Object Notation) Json是国际通用的一种轻量级的数据交换格式 主要在网络通讯中用于传输数据,或本地数据存储和读取 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率 我们一般使用 Json 文件来记录和传输数据 Json 文档就是使用 Json 格式配置填写的文档,后缀一般为 .json 我们在游戏中可以把游戏数据按照 Json 的格式标准 存储在 Json 文档中,再将 Json 文档存储在硬盘上或者传输给远端 达到数据持久化或者数据传输的目的 本系列学习内容 Json文件格式 Json 基本语法和配置规则 Excel 转 Json C#读取存储Json文件 JsonUtility LitJson JsonUtility 和 LitJson 对比 Newtonsoft.Json Json 和 Xml 的异同 共同点 都是纯文本 都有层级结构 都具有描述性 不同点 Json...
UG3——UGUI系列
UG3——UGUI系列 UI系统第三部分——系列代号UG3 UGUI UGUI是Unity引擎内自带的UI系统 官方称之为:Unity UI 是目前Unity商业游戏开发中使用最广泛的UI系统开发解决方案 它是基于Unity游戏对象的UI系统,只能用来做游戏UI功能 不能用于开发Unity编辑器中内置的用户界面 本系列学习内容: UGUI基础 六大基础组件 Canvas 渲染模式控制组件 Canvas Scaler 分辨率自适应组件(在制作所有的UI之前,一定要先设置好这个控件) Graphic Raycaster 射线事件交互组件 EventSystem和Standalone Input Module 点击事件监听组件 RectTransform UI 位置锚点组件 三大基础控件 Image 图片 Text 文本控件 Text Mesh Pro 相关,详见:U4S5——Text Mesh Pro RawImage (原始图片)大图控件 组合控件 Button 按钮 Toggle 单选多选框控件 InputField...
U3L20-4——导航网格动态障碍物组件(NavMesh Obstacle)
U3L20-4——导航网格动态障碍物组件(NavMesh Obstacle) 导航网格动态障碍组件 在游戏中常常会有这样的一个功能,场景中有一道门,如果这道门没有被破坏是不能自动导航到门后场景的 只有当这道门被破坏了,才可以通过此处前往下一场景, 而类似这样的物体本身是不需要进行寻路的,所以没有必要为它添加 NavMeshAgent 脚本 这时就会使用动态障碍组件实现该功能 导航动态障碍物组件的使用 为需要进行动态阻挡的对象添加 NavMeshObstacle 组件 设置相关参数 代码逻辑控制其的移动或者显隐 参数相关 Shape 动态障碍的形状 Capsule:胶囊 Box:盒装 Carve: 是否开启雕刻功能 开启后,障碍物会在导航网格中挖一个孔, 所谓挖孔就是会生成对应的网格信息,认为这篇区域无法前往 如果动态障碍物是固定不动的,建议开启,比如阻碍物门木桶栅栏等等 如果动态障碍物是频繁移动的,建议不开启该功能,比如汽车和玩家 Move Threshold: 移动阈值 当障碍物移动超过该距离时,会认为其为移动状态,会更新移动的孔 Time To...
U3L20-3——导航网格外连接组件(Off-Mesh Link)
U3L20-3——导航网格外连接组件(Off-Mesh Link) 导航网格外连接组件 我们在烘焙地形数据的时候 可以生成网格外连接 但是它是满足条件的都会生成 而且是要在编辑模式下生成 如果我们只希望两个未连接的平面之间只有有限条连接路径可以跳跃过去 并且运行时可以动态添加 就可以使用网格外连接组件 达到“指哪打哪”的效果 导航网格外连接组件的使用 使用两个对象作为两个平面之间的连接点(起点和终点) 添加Off Mesh Link脚本进行关联(哪里都能添加,起点或终点,或者另外一个物体上都可以) 设置参数 参数相关 Start 起始点 End 结束点 Cost Override 覆盖消耗值 负数或0则使用所属Area区域中的消耗值 如果为正数,则使用Area区域寻路消耗值*正数代表该连接点的寻路消耗 相当于我们可以自定义连接点的寻路消耗 主要用来解决当有"步行"和连接点都可以到达某一个目标时,希望优先选择步行区域,但是步行路径明显更远时修改该值 Bi Directional...
U3L20-2——导航网格寻路组件(NavMesh Agent)
U3L20-2——导航网格寻路组件(NavMesh Agent) 导航网格寻路组件 通过上节课导航网格生成知识点的学习 我们已经准备好了地形相关的数据 知道地形上哪些地方可以到达,哪些不能 那么寻路组件的作用就是帮助我们让角色可以在地形上准确的移动起来 寻路组件的本质就是根据烘焙出的寻路网格信息 通过基于A星寻路的算法计算出行进路径让我们在该路径上移动起来 本章代码关键字 1234567891011121314151617181920UnityEngine.AI //寻路组件相关命名空间NavMeshAgent //导航网格寻路组件类navMeshAgent.SetDestination() //自动寻路设置目标点navMeshAgent.isStopped //是否停止寻路navMeshAgent.speed //寻路移动速度navMeshAgent.acceleration ...
U3L20-1——导航网格的生成(NavMesh)
U3L20-1——导航网格的生成(NavMesh) 准备地形 在进行导航寻路网格生成时,第一步是需要有地形,地形由美术同学制作 打开导航网格数据窗口 Window ——> AI ——> Navigation 打开Unity内置的导航网格生成窗口 参数相关 Object 场景对象设置页签 在这里设置需要烘焙导航网格的地形对象,以及该对象的地形性质 Sceme Filter: 场景过滤器,配合Hierarchy窗口使用 All:显示场景上所有对象 MeshRenderers:显示挂载的网格渲染器的对象 Terrains:显示挂载了地形脚本的对象 Navigation Static 导航静态物体开关 被选中的物体会自动变为Navigation Static 非常重要,所有想要为其生成导航网格的地形都需要选中它 Generate OffMeshLinks 生成网格连接点开关****例如两个分离开的地形如果要连接网格就需要选择它 Navigation Area 导航区域选择,配合Areas页签使用 该项将决定地形对象的寻路消耗 Bake...
U3L20——导航寻路系统
U3L20——导航寻路系统 导航寻路系统 Unity中的导航寻路系统是能够让我们在游戏世界当中 让角色能够从一个起点准确的到达另一个终点 并且能够自动避开两个点之间的障碍物选择最近最合理的路径进行前往 Unity中的导航寻路系统的本质 就是在A星寻路算法的基础上进行了拓展和优化 注意!Unity2022版及以上的导航寻路系统发生了变化 ——> 具体可看 Unity2022及以上版本的导航寻路系统 学习内容 导航网格(NavMesh)的生成 要想角色能够在场景中自动寻路产生行进路径,那么必须得先有场景地形数据,导航网格生成就是生成用于寻路的地形数据 导航网格寻路组件(NavMesh Agent) 寻路组件就是帮助我们根据地形数据计算路径让角色动起来的关键 导航网格外连接组件(Off-Mesh Link) 当地形中间有断层,想让角色能从一个平面跳向另一个平面,网格连接组件时关键 导航网格动态障碍物组件(NavMesh...
U3L19——角色控制器
U3L19——角色控制器 角色控制器 角色控制器是让角色可以受制于碰撞,但是不会被刚体所牵制 如果我们对角色使用刚体判断碰撞,可能会出现一些奇怪的表现 比如: 在斜坡上往下滑动 不加约束的情况碰撞可能让自己被撞飞 等等 而角色控制器会让角色表现的更加稳定 Unity提供了角色控制器脚本专门用于控制角色 注意: 添加角色控制器后,不用再添加刚体****能检测碰撞函数 能检测触发器函数 能被射线检测 注意!如果使用角色控制器,那就不再建议使用动画上的根运动了!建议关闭Apply Root Motion 我们会通过角色控制器来达到控制角色移动的目的 本章代码关键字 12345CharacterController //角色控制器类 characterController.isGrounded //检测是否在地面characterController.SimpleMove //受到重力的移动characterController.Move //不受重力的移动OnControllerColliderHit() {...
U3L18-9——状态机复用
U3L18-9——状态机复用 状态机复用 游戏开发时经常遇到这样的情况 有n个玩家和n个怪物,他们的动画状态机行为都是一致的,只是对应的动作不同而已 这时如果我们为他们每一个对象都创建一个状态机进行状态设置和过渡设置无疑是浪费时间的 所以状态机复用就是解决这一问题的方案 主要用于为不同对象使用共同的状态机行为 减少工作量 提升开发效率 如何复用状态机 在Project窗口右键Create->Animator Override Controller 为Animator Override Controller文件在Inspector窗口关联基础的Animator Controller文件 Controller:要复用的状态机 Override:覆盖原状态机的对应的动画 关联需要的动画
U3L18-8——Statemachinebehaviour 状态机行为脚本
U3L18-8——Statemachinebehaviour 状态机行为脚本 状态机行为脚本 状态机行为脚本时一类特殊的脚本,继承指定的基类,它主要用于关联到状态机中的状态矩形上 我们可以按照一定规则编写脚本,当进入、退出、保持在某一个特定状态时我们可以进行一些逻辑处理 简单解释就是为Animator Controller状态机窗口中的某一个状态添加一个脚本 利用这个脚本我们可以做一些特殊功能 比如 进入或退出某一状态时播放声音 仅在某些状态下检测一些逻辑,比如是否接触地面等等 激活和控制某些状态相关的特效 本章代码关键字 12345678910StateMachineBehaviour //如果想要使一个脚本作为状态机脚本,则必须要继承这个基类OnStateEnter() { } //进入状态时,第一个Update中调用OnStateExit() { } //退出状态时,最后一个Update中调用OnStateIK() { } ...