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

修改参数

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

配置

调用喷血特效

效果

添加音效

音效包

调用

目录
相关文章
|
4月前
|
图形学 C#
超实用!深度解析Unity引擎,手把手教你从零开始构建精美的2D平面冒险游戏,涵盖资源导入、角色控制与动画、碰撞检测等核心技巧,打造沉浸式游戏体验完全指南
【8月更文挑战第31天】本文是 Unity 2D 游戏开发的全面指南,手把手教你从零开始构建精美的平面冒险游戏。首先,通过 Unity Hub 创建 2D 项目并导入游戏资源。接着,编写 `PlayerController` 脚本来实现角色移动,并添加动画以增强视觉效果。最后,通过 Collider 2D 组件实现碰撞检测等游戏机制。每一步均展示 Unity 在 2D 游戏开发中的强大功能。
193 6
|
3月前
|
前端开发 图形学 开发者
【独家揭秘】那些让你的游戏瞬间鲜活起来的Unity UI动画技巧:从零开始打造动态按钮,提升玩家交互体验的绝招大公开!
【9月更文挑战第1天】在游戏开发领域,Unity 是最受欢迎的游戏引擎之一,其强大的跨平台发布能力和丰富的功能集让开发者能够迅速打造出高质量的游戏。优秀的 UI 设计对于游戏至关重要,尤其是在手游市场,出色的 UI 能给玩家留下深刻的第一印象。Unity 的 UGUI 系统提供了一整套解决方案,包括 Canvas、Image 和 Button 等组件,支持添加各种动画效果。
143 3
|
3月前
|
设计模式 存储 人工智能
深度解析Unity游戏开发:从零构建可扩展与可维护的游戏架构,让你的游戏项目在模块化设计、脚本对象运用及状态模式处理中焕发新生,实现高效迭代与团队协作的完美平衡之路
【9月更文挑战第1天】游戏开发中的架构设计是项目成功的关键。良好的架构能提升开发效率并确保项目的长期可维护性和可扩展性。在使用Unity引擎时,合理的架构尤为重要。本文探讨了如何在Unity中实现可扩展且易维护的游戏架构,包括模块化设计、使用脚本对象管理数据、应用设计模式(如状态模式)及采用MVC/MVVM架构模式。通过这些方法,可以显著提高开发效率和游戏质量。例如,模块化设计将游戏拆分为独立模块。
192 3
|
4月前
|
开发者 图形学 C#
深度解密:Unity游戏开发中的动画艺术——Mecanim状态机如何让游戏角色栩栩如生:从基础设置到高级状态切换的全面指南,助你打造流畅自然的游戏动画体验
【8月更文挑战第31天】Unity动画系统是游戏开发的关键部分,尤其适用于复杂角色动画。本文通过具体案例讲解Mecanim动画状态机的使用方法及原理。我们创建一个游戏角色并设计行走、奔跑和攻击动画,详细介绍动画状态机设置及脚本控制。首先导入动画资源并添加Animator组件,然后创建Animator Controller并设置状态间的转换条件。通过编写C#脚本(如PlayerMovement)控制动画状态切换,实现基于玩家输入的动画过渡。此方法不仅适用于游戏角色,还可用于任何需动态动画响应的对象,增强游戏的真实感与互动性。
105 0
|
4月前
|
图形学 C# 开发者
全面掌握Unity游戏开发核心技术:C#脚本编程从入门到精通——详解生命周期方法、事件处理与面向对象设计,助你打造高效稳定的互动娱乐体验
【8月更文挑战第31天】Unity 是一款强大的游戏开发平台,支持多种编程语言,其中 C# 最为常用。本文介绍 C# 在 Unity 中的应用,涵盖脚本生命周期、常用函数、事件处理及面向对象编程等核心概念。通过具体示例,展示如何编写有效的 C# 脚本,包括 Start、Update 和 LateUpdate 等生命周期方法,以及碰撞检测和类继承等高级技巧,帮助开发者掌握 Unity 脚本编程基础,提升游戏开发效率。
84 0
|
4月前
|
开发者 图形学 前端开发
绝招放送:彻底解锁Unity UI系统奥秘,五大步骤教你如何缔造令人惊叹的沉浸式游戏体验,从Canvas到动画,一步一个脚印走向大师级UI设计
【8月更文挑战第31天】随着游戏开发技术的进步,UI成为提升游戏体验的关键。本文探讨如何利用Unity的UI系统创建美观且功能丰富的界面,包括Canvas、UI元素及Event System的使用,并通过具体示例代码展示按钮点击事件及淡入淡出动画的实现过程,助力开发者打造沉浸式的游戏体验。
105 0
|
4月前
|
图形学
Unity动画☀️Unity动画系统Bug集合
Unity动画☀️Unity动画系统Bug集合
|
5月前
|
机器学习/深度学习 人工智能 算法
|
3月前
|
测试技术 C# 图形学
掌握Unity调试与测试的终极指南:从内置调试工具到自动化测试框架,全方位保障游戏品质不踩坑,打造流畅游戏体验的必备技能大揭秘!
【9月更文挑战第1天】在开发游戏时,Unity 引擎让创意变为现实。但软件开发中难免遇到 Bug,若不解决,将严重影响用户体验。调试与测试成为确保游戏质量的最后一道防线。本文介绍如何利用 Unity 的调试工具高效排查问题,并通过 Profiler 分析性能瓶颈。此外,Unity Test Framework 支持自动化测试,提高开发效率。结合单元测试与集成测试,确保游戏逻辑正确无误。对于在线游戏,还需进行压力测试以验证服务器稳定性。总之,调试与测试贯穿游戏开发全流程,确保最终作品既好玩又稳定。
122 4
|
4月前
|
图形学 缓存 算法
掌握这五大绝招,让您的Unity游戏瞬间加载完毕,从此告别漫长等待,大幅提升玩家首次体验的满意度与留存率!
【8月更文挑战第31天】游戏的加载时间是影响玩家初次体验的关键因素,特别是在移动设备上。本文介绍了几种常见的Unity游戏加载优化方法,包括资源的预加载与异步加载、使用AssetBundles管理动态资源、纹理和模型优化、合理利用缓存系统以及脚本优化。通过具体示例代码展示了如何实现异步加载场景,并提出了针对不同资源的优化策略。综合运用这些技术可以显著缩短加载时间,提升玩家满意度。
207 5