【unity小技巧】使用动画状态机脚本实现一个简单3d敌人AI功能

简介: 【unity小技巧】使用动画状态机脚本实现一个简单3d敌人AI功能

敌人导航

选中地面,设置为静态导航

点击烘培

选中一些障碍物,也设置为静态导航

选择为不适合步行

重新点击烘培,一些障碍物区域就不可以行走了

敌人动画

可前往mixamo官网获取动画:https://www.mixamo.com/#/?page=1&type=Motion%2CMotionPack

导入动画

所有动画都配置为人类,并设置统一骨骼

ctrl+d复制出动画,删除原来模型动画

修改循环动画配置

这将时他移动时,动画看起来更好

比如走路 奔跑 攻击 待机动画

攻击动画也一样

其他不循环的动画配置

比如死亡 收击动画

配置敌人模型

配置导航参数

动画配置

提高行走动画速度

敌人速度也跟着修改

配置受击 两个死亡动画

提升受击动画播放速度

如果僵尸死亡,我们再射击,又会播放一次受击动画,但是什么都不会发生,然后卡在这里,我们可以在受击加一个空过渡到待机动画,什么都不需要修改

敌人受伤死亡脚本控制

public class Enemy : MonoBehaviour
{
    [SerializeField] private int HP = 100; // 敌人的生命值
    private Animator animator; // 动画控制器组件
    private NavMeshAgent navAgent; // 导航代理组件
    private void Start()
    {
        animator = GetComponent<Animator>(); // 获取动画控制器组件
        navAgent = GetComponent<NavMeshAgent>(); // 获取导航代理组件
    }
    public void TakeDamage(int damageAmount)
    {
        HP -= damageAmount; // 扣除伤害值
        if (HP <= 0)
        {
            int randomValue = Random.Range(0, 2); // 生成随机数,0或1
            if (randomValue == 0)
            {
                animator.SetTrigger("DIE1"); // 播放死亡动画1
            }
            else
            {
                animator.SetTrigger("DIE2"); // 播放死亡动画2
            }
        }
        else
        {
            animator.SetTrigger("DAMAGE"); // 播放受伤动画
        }
    }
    private void Update()
    {
        if (navAgent.velocity.magnitude > 0.1f)
        {
            animator.SetBool("isWalking", true); // 设置isWalking参数为true,播放行走动画
        }
        else
        {
            animator.SetBool("isWalking", false); // 设置isWalking参数为false,停止行走动画
        }
    }
}

子弹攻击调用

效果

敌人状态机

待机 行走 巡逻 攻击状态

过渡配置都去掉退出时间勾选,修改过渡持续时间为0.2

添加过渡参数

绑定动画,攻击动画 追击为奔跑动画

在待机处添加一个动画行为脚本

其他的状态,也都添加不同的行为脚本

修改待机行为脚本

修改巡逻行为脚本

修改追击行为脚本

修改攻击行为脚本

删除旧的动画控制代码

创建寻路点

配置每次待机时长

效果,可以看到人物移动有点滑动,这是因为导航和动画的冲突

通过修改动画播放速度,导航人物移动速度或者巡逻速度都可以解决这个问题

这里选择修改巡逻速度,每个模型都不一样,可能具体参数要自己去测试

修改代码,实时显示敌人各个状态的范围

效果

敌人攻击我们进行了裁剪

我们可以修改相机的裁剪平面为一个很小的值

效果

人物受击效果

在敌人手的位置添加一个攻击触发器范围

动态配置伤害值

修改玩家受伤脚本

配置参数

效果

添加血液效果

配置,留下A血液就行

修改参数

配制通用脚本,指定时间自动销毁物体

配置

调用喷血特效

效果

添加音效

音效包

调用

目录
相关文章
|
1月前
|
C# 图形学 开发者
【Unity3D实例-功能-镜头】俯视角
本文介绍了Unity中常用的俯视角镜头实现方法,涵盖模型添加、角色Tag设置、摄像机脚本编写及测试运行,帮助开发者快速掌握俯视角在策略与模拟类游戏中的应用技巧。
200 0
|
1月前
|
人工智能 定位技术 C#
【Unity3D实例-功能-移动】通过鼠标点击进行角色移动
本文介绍了如何在Unity中实现鼠标点击控制角色移动的功能。通过安装导航网格、设置地图与角色、烘焙路径及编写脚本,带领读者一步步构建角色自动寻路系统,增强游戏交互体验。
100 0
|
2月前
|
C# 图形学 开发者
【Unity3D实例-功能-移动】复杂移动(Blend Tree方式)
本文介绍了使用Unity中Blend Tree实现角色移动控制的完整教程,涵盖动画器设置、Blend Tree创建、CharacterController组件添加及代码控制,帮助开发者实现流畅自然的角色动画效果。
74 0
|
2月前
|
图形学 开发者
【Unity3D实例-功能-移动】角色移动-通过WSAD(CharacterController方式)
本文介绍了如何在Unity中使用CharacterController组件实现角色灵活移动。内容包括模型准备、动画处理、添加组件、编写移动脚本及测试运行,帮助开发者快速掌握角色控制技巧,打造流畅的游戏体验。
139 0
|
2月前
|
C# 图形学 开发者
【Unity3D实例-功能-移动】角色移动-通过WSAD(Rigidbody方式)
本文介绍了如何在Unity中使用Rigidbody组件实现角色自由移动,包括模型准备、组件添加、脚本编写与测试运行,帮助开发者快速掌握基础角色控制技巧。
161 0
|
2月前
|
C# 图形学
【Unity3D实例-功能-移动】角色移动-通过WSAD(Transform方式)
本文介绍了如何在Unity中实现角色移动功能,使用Transform组件控制角色基础移动,并详细讲解了模型导入、动画设置、动画控制器配置及移动脚本编写等内容,适合Unity初学者学习角色控制的基础知识。
104 0
|
5月前
|
人工智能 并行计算 Linux
斯坦福黑科技让笔记本GPU也能玩转AI视频生成!FramePack:压缩输入帧上下文长度!仅需6GB显存即可生成高清动画
斯坦福大学推出的FramePack技术通过压缩输入帧上下文长度,解决视频生成中的"遗忘"和"漂移"问题,仅需6GB显存即可在普通笔记本上实时生成高清视频。
1097 19
斯坦福黑科技让笔记本GPU也能玩转AI视频生成!FramePack:压缩输入帧上下文长度!仅需6GB显存即可生成高清动画
|
5月前
|
机器学习/深度学习 人工智能 编解码
AI视频生成也能自动补全!Wan2.1 FLF2V:阿里通义开源14B视频生成模型,用首尾两帧生成过渡动画
万相首尾帧模型是阿里通义开源的14B参数规模视频生成模型,基于DiT架构和高效视频压缩VAE,能够根据首尾帧图像自动生成5秒720p高清视频,支持多种风格变换和细节复刻。
1110 9
AI视频生成也能自动补全!Wan2.1 FLF2V:阿里通义开源14B视频生成模型,用首尾两帧生成过渡动画
|
5月前
|
机器学习/深度学习 人工智能 PyTorch
模型手动绑骨3天,AI花3分钟搞定!UniRig:清华开源通用骨骼自动绑定框架,助力3D动画制作
UniRig是清华大学与VAST联合研发的自动骨骼绑定框架,基于自回归模型与交叉注意力机制,支持多样化3D模型的骨骼生成与蒙皮权重预测,其创新的骨骼树标记化技术显著提升动画制作效率。
827 27
模型手动绑骨3天,AI花3分钟搞定!UniRig:清华开源通用骨骼自动绑定框架,助力3D动画制作
|
机器学习/深度学习 人工智能 算法

热门文章

最新文章