热门标签
共 43 篇主题
这套教程比较基础,在Udemy上评分很高,我觉得用作新人学习Unity非常合适,学习前提,最好是掌握一些基本C#编程。 P29章前主要是简单介绍了如何使用Unity自带的AI寻路烘焙,使用AI来制作角色的移动,相机的跟随,制作玩家的动画混合,并对动画进行更新。 玩家的移动主要通过射线检测碰撞,如果点击处没有寻路网格,玩家则不 ...
创建动作调度器,判断当前处于什么动作,为后续做准备
在上一节我们创建了一个动作调度器的脚本,动作调度器的目的主要是为了减少脚本之间的依赖,避免在移动的脚本中编写过多的逻辑,所以使用接口让动作调度器通关一个Cancel的方法来处理移动和战斗的逻辑 创建接口 IAction,同时Mover和Fighter脚本中进行修改,在动作调度器处理逻辑 ActionScheduler Mover Fighter ...
添加攻击动画,在动画状态机添加名为attack的Trigger,更新代码 Fighter
设置角色攻击动画的间隔时间,创建生命值脚本,添加攻击触发事件 Fighter: Health
P36-P37部分主要讲诉关于Prefab预制体的内容,可忽略,在动画状态机中添加死亡动画 把做好的Player复制一套,移除掉PlayerControler脚本用于当作敌人,命名Enemy,添加CombatTarget和Health组件,各自做成预制体。 具体代码如下: Health Fighter ...
添加玩家攻击敌人时的转向,让角色可以随时攻击敌人随时朝向敌人,当多个敌人在范围内,允许玩家随时攻击任意敌人,并修复玩家在攻击和点击地面移动时的攻击冷却问题,主要是对stopAttack触发重置。 Fighter: PlayerController ...
编写AIController脚本,用于AI的控制,攻击范围的主要逻辑为检测AI和玩家的距离,并设定一个追逐距离。 设定玩家的标签为player,玩家身上也需要挂载生命值脚本,修改Fighter脚本,把Attack方法和CanAttack的CombatTarget修改成Gameobject,这样就可以让AI也调用该脚本 还需将PlayerController报错的地方修改成gameobject。 ...
修复角色死亡后,依然可以移动的问题,修复角色死亡,敌人将不在追逐,一旦角色死亡后,将关闭角色的碰撞体和寻路 逻辑也比较简单,在角色控制器和AI控制器的更新中加上一个死亡判断就行, if (health.IsDead()) return; 具体代码如下 Health: PlayerController: AIController Mover ...
在AI控制器脚本添加绘制线框球体的方法,方便unity查看敌人追逐角色的范围 上面这个方法是实现显示线框 OnDrawGizmosSelected()是选中后才显示,看自己需求使用
添加AI失去对玩家的视线后,在原地怀疑一段时间后,自动回到初始站岗的位置。 AIController
制作巡逻点,创建PatrolPath脚本,编写巡逻的路径,先将路径点给绘制出来 PatrolPath
编写AI巡逻的具体逻辑,AI需要先获取当前场景中是否存在巡逻点,如果有巡逻路径,就前往,检测是否到达当前巡逻点,就切换到下一个巡逻点 PatrolPath: AIController:
AI巡逻到达每个巡逻点之后停留一段时间,然后在前往下一个巡逻点。
设置AI自动巡逻,追逐玩家时,分别为不同的移动速度,由于我们使用的自动寻路,所以在脚本中通过一个变量来设置navMeshAgent的速度,这样我们可以通过变量来自定义玩家和AI的速度,在移动逻辑部分,设置一个浮点值。通过浮点值来设置AI在巡逻时为行走状态,追逐玩家时为跑步状态。 移动部分因为动画资源和教程不同,所以使 ...
这部分主要讲解关于CineMachine组件的使用,制作触发动画 CinematicTrigger:
进入到动画触发时,当点击地面,会发现玩家依然可以行动,所以需要取消玩家的控制权,等触发动画播放完才可以行动。 这里引入了事件的概念和使用,事件主要是用于类和类或者对象之间的通知。 CinematicControlRemove: FakePlayableDirector:该脚本仅仅用于教学,后面会被删除 ...
在导演控制脚本中编写逻辑,在动画播放时取消玩家的动作,禁用玩家的控制器脚本。动画停止时启用。 之前的战斗脚本中调用取消方法,只是停止了攻击,并没有取消移动,所有需要先加上 Mover: CinematicControlRemove: ...
讲解关于协程的知识,通过协程加载场景,在场景中创建一个用于加载场景的门户 Portal
设置玩家的传送点,加载场景后更新玩家的位置 Portal: