共 43 篇主题
为了每次传送时都拥有淡入淡出的效果,直接在游戏中通过脚本实例化一个持久对象,在场景切换时会一直存在,重复调用。调用Fader脚本时,先将之前的测试代码给删除。 PeristentObjectSpawner: Fader: Portal:
为了防止加载场景过于生硬以及等待时长,使用UI组件制作一个淡入淡出的效果,在切换场景时播放,通过控制canvasGroup的alpha来实现效果。 Fader:
当场景出现多个触发传送点时,需要知道传送和传送之间的正确性,使用一个枚举并设置变量,用来设置多个触发传送的目标点,给两个场景中互相传送的目标点设置为一致。这样就可以让玩家识别传送到哪一个传送点。 Portal: ...
设置玩家的传送点,加载场景后更新玩家的位置 Portal:
讲解关于协程的知识,通过协程加载场景,在场景中创建一个用于加载场景的门户 Portal
在导演控制脚本中编写逻辑,在动画播放时取消玩家的动作,禁用玩家的控制器脚本。动画停止时启用。 之前的战斗脚本中调用取消方法,只是停止了攻击,并没有取消移动,所有需要先加上 Mover: CinematicControlRemove: ...
进入到动画触发时,当点击地面,会发现玩家依然可以行动,所以需要取消玩家的控制权,等触发动画播放完才可以行动。 这里引入了事件的概念和使用,事件主要是用于类和类或者对象之间的通知。 CinematicControlRemove: FakePlayableDirector:该脚本仅仅用于教学,后面会被删除 ...
这部分主要讲解关于CineMachine组件的使用,制作触发动画 CinematicTrigger:
设置AI自动巡逻,追逐玩家时,分别为不同的移动速度,由于我们使用的自动寻路,所以在脚本中通过一个变量来设置navMeshAgent的速度,这样我们可以通过变量来自定义玩家和AI的速度,在移动逻辑部分,设置一个浮点值。通过浮点值来设置AI在巡逻时为行走状态,追逐玩家时为跑步状态。 移动部分因为动画资源和教程不同,所以使 ...
AI巡逻到达每个巡逻点之后停留一段时间,然后在前往下一个巡逻点。
编写AI巡逻的具体逻辑,AI需要先获取当前场景中是否存在巡逻点,如果有巡逻路径,就前往,检测是否到达当前巡逻点,就切换到下一个巡逻点 PatrolPath: AIController:
制作巡逻点,创建PatrolPath脚本,编写巡逻的路径,先将路径点给绘制出来 PatrolPath
添加AI失去对玩家的视线后,在原地怀疑一段时间后,自动回到初始站岗的位置。 AIController
在AI控制器脚本添加绘制线框球体的方法,方便unity查看敌人追逐角色的范围 上面这个方法是实现显示线框 OnDrawGizmosSelected()是选中后才显示,看自己需求使用
修复角色死亡后,依然可以移动的问题,修复角色死亡,敌人将不在追逐,一旦角色死亡后,将关闭角色的碰撞体和寻路 逻辑也比较简单,在角色控制器和AI控制器的更新中加上一个死亡判断就行, if (health.IsDead()) return; 具体代码如下 Health: PlayerController: AIController Mover ...
编写AIController脚本,用于AI的控制,攻击范围的主要逻辑为检测AI和玩家的距离,并设定一个追逐距离。 设定玩家的标签为player,玩家身上也需要挂载生命值脚本,修改Fighter脚本,把Attack方法和CanAttack的CombatTarget修改成Gameobject,这样就可以让AI也调用该脚本 还需将PlayerController报错的地方修改成gameobject。 ...
添加玩家攻击敌人时的转向,让角色可以随时攻击敌人随时朝向敌人,当多个敌人在范围内,允许玩家随时攻击任意敌人,并修复玩家在攻击和点击地面移动时的攻击冷却问题,主要是对stopAttack触发重置。 Fighter: PlayerController ...
P36-P37部分主要讲诉关于Prefab预制体的内容,可忽略,在动画状态机中添加死亡动画 把做好的Player复制一套,移除掉PlayerControler脚本用于当作敌人,命名Enemy,添加CombatTarget和Health组件,各自做成预制体。 具体代码如下: Health Fighter ...
设置角色攻击动画的间隔时间,创建生命值脚本,添加攻击触发事件 Fighter: Health
添加攻击动画,在动画状态机添加名为attack的Trigger,更新代码 Fighter