创建动画控制器和实现人物随机运动功能

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

创建动画控制器操作步骤如下:
1)新建一个Animator Controller,并拖到Player对象上。由于在本场景中将通过动画来控制角色的运动,所以需要勾选Animator Controller组件的Apply Root Motion选项
2)在Parameters中添加如下参数:
1.表示速度的float型参数speed;
2.表示角色运动方向的float型变量Direction
3.表示角色是否处于跳跃状态的bool型变量Jump
4.表示角色是否处于到招呼的bool型变量Hi
3)在Base Layer中新建一个空的动画状态(右键监视框。create empty),重命名为Idle,设置其motion属性为IdleShort,并勾选Foot IK选项
4)在Base Layer中新建一个Blend Tree类型的状态,重命名为Run,并进行双击编辑
选择Parameter为Direction,并设置范围为(-1,1),保持勾选Automate Thresholds选项,然后在Motion列表依次添加RunLeft,Run,RunRight三个动画片段。
在这里插入图片描述
5)在Animator编辑器中返回到Base Layer动画层,添加Jump动画片段(把jump拖到监视框就自动生成状态)
6)创建状态间的Transitions(右键状态,MakeTransition):
1.当角色从状态Idel到Run,Speed>0.1,去除HasExitTime项的勾选。反过来就Speed<0.1,去除HasExitTaime勾选。
在这里插入图片描述
2.当角色从Run到Jump,,Jump为true,去除HasExitTime选项;;反过来则保留默认条件,即ExitTime为0.9
在这里插入图片描述
3.创建HHi状态:在Animator编辑器中新建一个动画层Arm Layer,并在该层上创建Empty和Wave状态,wave状态的motion属性为动画片段Wave
1.角色从状态Empty过度到Wave的条件为参数Hi等于true,同时取消勾选HasExitTime选项
2.反过来保持默认条件,ExitTime的值等于093

学会以上创建后可以试着实现以下功能

人物随机运动

代码如下:

public float AvatarRange=25;
private Animator avatar;
private float SpeedDampTime=.25f;
private float DirectionDampTime=.25f;
private Vector3 TargetPosition=new Vector3(0,0,0);
void Start()
{
   avatar=GetComponent<Animator>();
}
void Update()
{
   if(avatar)
   {
     int r=Random.Range(0,50);
     avatar.SetBool("Jump",r==20);
     avatar.SetBool("Div",r==30);
     if(Vector3.Direction(TargetPosition,avatar.rootPosition)>5)
     {
      animator.SetFloat("Speed",1,SpeedDampTime,Time.deltaTime);
      Vector3 curentDir=avatar.rootRotation*Vector3.forward;
      Vector3 wantedDir=(TargetPosition-avatar.Position).normalized;
      
       if(Vector3.Dot(curentDir.wantedDir)>0)
       avatar.SetFloat("Direction",Vector3.Cross
       (avatarDir,wantedDir).y,DirectionDampTime,Time.deltaTime);
       
       else
       avatar.SetFloat("Direction",Vector3.Cross(currentDir,wantedDir).y>0?1:-1,DirectionDampTime,Time.deltaTime);
     }
     else 
     {
     avatar.SetFloat("Speed",0,SpeedDampTime,Time.deltaTime);
     if(avatar.GetSpeed("Speed"<0.01f))
     
     TargetPosition=new Vector3(
     Random.Range(-AvatarRange,AvatarRange),0,Random.Range(-AvatarRange,AvatarRange));
     }
   }
}

这里涉及到两个函数,分别使Vector3.Cross和Vector3.Dot。

Vector3.Dot 点积

其中这里Vector3.Dot(a,b)代表b对于a在什么角度,当Vector3.Dot(a,b)>1时代表小于90度,当Vector3.Dot(a,b)<1时代表大于90度。

Vector3.Cross 叉积

叉积的定义: c =a x b 其中a,b,c均为向量。即两个向量的叉积得到的还是向量!
我们可以使用叉积的正负值来判断向量a,b的相对位置,即向量b是处于向量a的顺时针方向还是逆时针方向。

Unity 学习笔记】动画组件动画控制器 SetFloat方法的意思是将刚体X轴速度的绝对值传给velocityX,除了SetFloat外,还有SetBool、SetIntSetTrrigger,除了SetTrigger,其余的都有两个参数,第一个参数是条件参数的名称,第二个参数是要传递的值。第二个问题,Unity在将一个变化的值0比较时可能会出现一些小错误,为了减少这种错误,我们可以将播放动画的条件设置为velocityX大于0.1。动画动画组件不难理解,动画是我们添加进Unity的资源文件,动画组件是添加进游戏物体的必要控件。 阅读详情

相关推荐

Unity3D角色智能眼神系统:5分钟集成RandomEyes3D插件教程

游戏开发虚拟角色制作中,角色动画的真实感是提升沉浸体验的关键技术。其核心原理是通过算法模拟生物的自然行为,如眼部微运动、视线追踪情绪响应,从而超越预设动画的局限性。这项技术的价值在于为数字角色注入“生命力”,使其能够根据环境、交互对象情绪状态做出智能反应,显著增强叙事表现力用户代入感。在应用场景上,它广泛服务于高质量叙事游戏、虚拟数字人、VR社交应用以及影视级实时动画制作。本文以Unity3D引擎为例,详细解析如何利用RandomEyes3D插件,快速为角色模型集成一套完整的智能眼神系统,涵盖从核

440

Unity 3D学习】控制Animator动画从随机帧开始

一、前提:游戏主场景有很多建筑,然后建筑上会有动画,如果存在多个同类型的建筑,就会出现多个相同动画频率一致的情况,这样子产品说体验性较差,所以考虑怎么控制动画从不同帧开始播放。 二、处理方案。 1、原理:通过设置动画状态机中的Cycle Offset,可以控制动画起始播放点,该值的区间是0到1,类型为float类型。 2、具体操作:我们首先给Animator添加一个“offset”参数,然后指定Animator状态机中所有状态使用Cycle offset属性,并且指定使用上面添加的“offset”参数

既然选择了远方,便只顾风雨兼程! 5025

Python连接高斯数据库踩坑实录:从SASL报错到SSL安全连接的完整指南

本文详细记录了Python连接高斯数据库时遇到的SASL authentication报错及其解决方法。通过剖析SASL认证机制,对比了修改数据库配置、使用官方驱动等方案的利弊,并重点提供了通过自动化脚本生成SSL证书,实现安全、免密连接的完整指南,帮助开发者彻底解决连接难题。

weixin_28340315的博客 386

Unity-动画系统_Avatar系统

利用Avatar系统,我们可以通过对骨胳操控实现动画的重利用效果,这也就是Mecanim系统中的动画重定向功能。Avatar工作原理对于人类角色来说,都包含着相同或者类似的骨骼。而Avatar,可以对角色中包含的骨骼结构或者角色模型进行分析与识别,并与Mecanim中已有的标准人类骨骼进行对比,并进行标示。它是一个接口,通过它可以被Mecanim系统所识别,成为一种可被Mecanim系统所识别的通...

HC9861的博客 1万+

Unity 如何实现游戏Avatar角色头部跟随视角转动

如何实现游戏Avatar角色头部跟随视角转动

当代野生程序猿 4514

Unity(2022.3.41LTS) - 动画控制器详解

Unity 中,动画控制器Animator Controller)是用于管理控制角色或物体动画状态的重要工具。

一然明月的博客 2808

MultiAnimation Sample分析

MultiAnimation Sample这个例子展示了使用高级shader语言、蒙皮技术D3DX动画控制器的多动画集的Mesh动画。动画控制器用来混合动画集,以确保从一个动画到另一个动画的平滑转换。 Path源代码: (SDK root)/Samples/C++/Direct3D/MultiAnimation 可执行文件: (SDK root)/Samples/C++/Direct3D

牛人专栏 2946

unity总结五

射线:通过该函数可以检测两个是否发生碰撞或者射击类游戏 也即经过avatar之后可以不同角色公用同一个avatar root motion:是人物动画行走时可以在空间中发生位移 在animator中勾选apply root motion,会自动设置好了动画行走发生位移,不勾选播放动画不发生位移 如果不勾选,我们这样通过脚本方式实现动画位移。在动画的属性中

zhangxiaofan666的博客 1054

Unity3D】智能巡逻兵

游戏规则与要求 游戏设计要求: 创建一个地图若干巡逻兵(使用动画); 每个巡逻兵走一个3~5个边的凸多边型,位置数据是相对地址。即每次确定下一个目标位置,用自己当前位置为原点计算; 巡逻兵碰撞到障碍物,则会自动选下一个点为目标; 巡逻兵在设定范围内感知到玩家,会自动追击玩家; 失去玩家目标后,继续巡逻; 计分:玩家每次甩掉一个巡逻兵计一分,与巡逻兵碰撞游戏结束; 程序设计要求: 必须使用订阅与发布模式传消息 工厂模式生产巡逻兵 游戏规则 玩家通过键盘控制人物在地图上移动 地图分为九个部

Khynnn的博客 495

2D-Rogoulike

加载图片到Unity后,最好先设置要发布的平台,如果你的项目很大,到最后再换平台就会花费大量的时间 所以在开始就应该设计好 创建PlayerEnemy 的预制体 使用 Animator override controller , 这个组件可是是不同的人物使用相同的动画控制器 对 Enemy1动画控制器右键,然后选择 Animator override Controller, 再选择重写的动画 ...

qq_34343249的博客 646

从零开始制作一个类幸存者肉鸽01

《2D Roguelike游戏开发实战:从零构建无限地图生存游戏》 本文介绍了使用Unity引擎开发2D Roguelike游戏的核心实现过程。重点讲解了三个关键技术点:1)使用TileMap绘制无缝衔接的随机地图,通过图集打包解决瓦片缝隙问题;2)实现角色移动动画控制,包括Animator状态机管理Sprite翻转逻辑;3)创新性的无限地图系统,通过GameManager单例Reposition脚本动态调整地图位置,实现20x20地图块的循环复用。教程详细展示了代码实现逻辑,特别是如何处理相机跟随抖

YF云飞的博客 1467

qt同时两个动画执行_unity, 两个动画同时播

法一,animationLayer。处于不同animationLayer中的状态可以同时运行,即其中的动画可以同时播放。所以通常一个角色至少需要用两个animationLayer,一个layer用于动作动画,另一个layer用作表情动画。这样,动作表情就可以实现任意组合。注意:新创建的layer要将Weight调为1(默认是0),以便生效。法二:blendTree。可以创建一个blendTree...

weixin_39691055的博客 910

七、模型与动画

目录 智能巡逻兵 游戏设计要求: 创建一个地图若干巡逻兵(使用动画); 每个巡逻兵走一个3~5个边的凸多边型,位置数据是相对地址。即每次确定下一个目标位置,用自己当前位置为原点计算; 巡逻兵碰撞到障碍物,则会自动选下一个点为目标; 巡逻兵在设定范围内感知到玩家,会自动追击玩家; 失去玩家目标后,继续巡逻; 计分:玩家每次甩掉一个巡逻兵计一分,与巡逻兵碰撞游戏结束; 程序设计要求: 必须使用订阅与发布模式传消息 subject:OnLostGoal Publisher: ? Subscriber:

weixin_43372552的博客 345

unity开发记录-----Space Warrior(5)

我们的枪械虽然可以射击了,也可以打出音效了,但是在开火时枪械没有后座震动,行走时武器也没有契合人物动作的动画,使游戏画面看起来不美观。为此,本节将为枪械添加动画后座。

codeing_speci的博客 837

第七次作业 模型与动画

文章目录智能巡逻兵1. 提交要求2. 实现 智能巡逻兵 1. 提交要求 游戏设计要求 创建一个地图若干巡逻兵(使用动画); 每个巡逻兵走一个3~5个边的凸多边型,位置数据是相对地址。即每次确定下一个目标位置,用自己当前位置为原点计算; 巡逻兵碰撞到障碍物,则会自动选下一个点为目标; 巡逻兵在设定范围内感知到玩家,会自动追击玩家; 失去玩家目标后,继续巡逻; 计分:玩家每次甩掉一个巡逻兵计一分,与巡逻兵碰撞游戏结束; 程序设计要求 必须使用订阅与发布模式传消息 subject:OnLos

weixin_43227340的博客 208

3DMax基础- 常用修改器

在 3ds Max 中,修改器是一种强大的工具,用于对物体进行各种变形、修改增强。

一然明月的博客 8139

Unity卡通角色资源包实战:从快速原型到性能优化的完整指南

游戏开发与实时3D应用构建中,资源管理与工作流优化是提升效率的核心。其原理在于通过预制化、模块化的资源包,将复杂的建模、绑定与动画制作过程标准化,从而让开发者能聚焦于核心玩法与逻辑实现。这项技术的价值在于极大缩短了从概念验证到可视Demo的开发周期,降低了美术门槛,尤其适合独立开发者、小型团队进行快速原型开发、Game Jam或项目初期搭建。其应用场景广泛,涵盖游戏NPC填充、互动演示制作以及宣传视频的快速产出。本文以热门的“Cartoon Characters - Mega Pack”资源包为例,深入剖

weixin_34005042的博客 386

Unity3D PRO 3D游戏制作系列教程第四课:认识菜单二

讲下面的各种碰撞之前,我们先讲解一下什么是碰撞区域,一个物体想要其他物体产生碰撞的话,两个物体的身上必须有碰撞组件,所谓的碰撞组件包括下面的盒碰撞、球碰撞、胶囊碰撞等等,当我们给物体加上任意一种碰撞组件之后,我们就会发现,这个物体身上多了绿色的线框,这个线框所包围的区域就是物体的碰撞区域,上图中是一个cube加了盒碰撞,下图中是一个球体也加了盒碰撞,我们可以发现盒碰撞的碰撞区域默认大小刚好能包容它所附着的物体。这个其他渲染器一样,显示的作用,没有它,你的布料组件产生的效果将无法表现在屏幕上。

小小姑娘 272

unity 3D RPG教程(三)

unity 3D RPG教程

無限進步的全棧遊戲開發的博客 2910
上一篇: IK反向动力学简单理解
下一篇: 2D吃豆人一些自以为有用的功能总结
薛西佛斯
博客等级 码龄7年 2粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值