【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血液就行

修改参数

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

配置

调用喷血特效

效果

添加音效

音效包

调用

目录
相关文章
|
2月前
|
存储 人工智能
|
2天前
|
人工智能 IDE 开发工具
给IntelliJ IDEA添加AI功能
这篇文章讲解了如何在IntelliJ IDEA中安装和使用阿里云开发的通义灵码插件,以增强IDE的人工智能辅助编程功能。
9 0
给IntelliJ IDEA添加AI功能
|
1月前
|
人工智能 监控 数据可视化
如何利用 DataV 的 AI 功能进行数据可视化?
如何利用 DataV 的 AI 功能进行数据可视化?
|
1月前
|
人工智能 自然语言处理 安全
【通义】AI视界|谷歌推出AI搜索功能“问照片”,照片一问即得……
本文汇总了AI领域的最新动态,包括谷歌推出的“问照片”功能,使用户能用自然语言检索Google Photos;OpenAI的商业用户激增及ChatGPT的广泛应用;Anthropic发布的企业级AI助手Claude Enterprise;美英欧盟首个人工智能法律约束条约;OpenAI前首席科学家新公司获巨额融资;以及比尔·盖茨对AI前景的乐观展望与安全建议。
|
1月前
|
机器学习/深度学习 人工智能 搜索推荐
如何让你的Uno Platform应用秒变AI大神?从零开始,轻松集成机器学习功能,让应用智能起来,用户惊呼太神奇!
【9月更文挑战第8天】随着技术的发展,人工智能与机器学习已融入日常生活,特别是在移动应用开发中。Uno Platform 是一个强大的框架,支持使用 C# 和 XAML 开发跨平台应用(涵盖 Windows、macOS、iOS、Android 和 Web)。本文探讨如何在 Uno Platform 中集成机器学习功能,通过示例代码展示从模型选择、训练到应用集成的全过程,并介绍如何利用 Onnx Runtime 等库实现在 Uno 平台上的模型运行,最终提升应用智能化水平和用户体验。
36 1
|
14天前
|
人工智能 数据中心
使用光模块Breakout功能减少AI训练中断故障
本文介绍了使用大成鹏通信光模块Breakout功能可以减少AI训练中断故障的问题。通过Breakout功能,单通道故障不会中断其他通道的数据转发,有效解决了传统光模块因单通道故障导致的训练中断问题。同时,还介绍了如何利用Breakout功能进行更灵活的AI基础网络组网。
|
2月前
|
机器学习/深度学习 人工智能 编解码
|
2月前
|
开发者 图形学 C#
深度解密:Unity游戏开发中的动画艺术——Mecanim状态机如何让游戏角色栩栩如生:从基础设置到高级状态切换的全面指南,助你打造流畅自然的游戏动画体验
【8月更文挑战第31天】Unity动画系统是游戏开发的关键部分,尤其适用于复杂角色动画。本文通过具体案例讲解Mecanim动画状态机的使用方法及原理。我们创建一个游戏角色并设计行走、奔跑和攻击动画,详细介绍动画状态机设置及脚本控制。首先导入动画资源并添加Animator组件,然后创建Animator Controller并设置状态间的转换条件。通过编写C#脚本(如PlayerMovement)控制动画状态切换,实现基于玩家输入的动画过渡。此方法不仅适用于游戏角色,还可用于任何需动态动画响应的对象,增强游戏的真实感与互动性。
61 0
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
3D智能导诊系统源码,基于AI引擎,针对患者的病情及症状,结合性别年龄特征,智能推荐医院科室
智能导诊系统是一款基于AI技术的医疗辅助工具,利用自然语言处理和机器学习分析患者病情,精准推荐科室和医生。系统支持按性别分类导诊,设有3D人体模型辅助定位症状,界面简洁易操作。采用B/S架构,可无缝对接HIS数据库,支持多种接入形式,包括公众号、小程序和App,有效提升就诊效率并减轻医护人员负担。
|
3月前
|
人工智能
[AI 快手 LivePortrait] 引领高效肖像动画新时代
快手推出了 LivePortrait,具备拼接与重定向控制的高效肖像动画,下载代码,准备环境,下载预训练权重并开始推理。
[AI 快手 LivePortrait] 引领高效肖像动画新时代

热门文章

最新文章