Unity3D游戏开发之详解 Animation类和Animator类

Unity3D游戏开发之详解 Animation类和Animator类

Animation类

animation组件用于播放动画。可以指定动画剪辑到动画组件并从脚本控制动画播放。在Unity的动画系统基于权重并且支持动画融合,叠加动画,动画混合,标签和完全控制动画播放的各个方面。

如果想播放一个简单的动画,可以使用Animation.Play;如果想在动画之间交叉淡入,可以使用Animation.CrossFade;如果想改变动画模式(循环,一次,乒乓),可以改变动画导入设置里面的动画帧的WrapMode,或者在运行时改变AnimationState.wrapMode的值; AnimationState可以用于改变动画的层,修改播放速度,并且直接控制融合与混合。动画也支持枚举,所以你可以像这样在AnimationStates之间循环【狗刨学习网】:


// 使这个角色的所有动画的播放速度降为一半

for (var state : AnimationState in animation) {

state.speed = 0.5;

}

Variables变量

clip 默认的动画剪辑。

playAutomatically 是否在开始的时候自动播放默认的动画

wrapMode 动画剪辑播放完成之后,应该如何操作

isPlaying 是否在播放任何动画?

this [string name] 返回名称为name的动画状态。

animatePhysics 如果打开这个选项,动画会在物理循环过程中被执行。这个选项只有在结合运动学刚体的时候才有用。

animateOnlyIfVisible 如果打开这个选项,Unity可能在它认为用户不会看到当前动画的时候停止播放。

cullingType 控制动画组件的消隐。

localBounds 在本地坐标空间这个动画的动画组件的AABB。

Functions函数

Stop 停止所有当前Animation正在播放的动画。

Rewind 倒播名称为name的动画。

Sample 在当前状态对动画进行采样。

IsPlaying 名为name的动画正在播放吗?

Play 没有任何混合的播放动画。

CrossFade 在一定时间内淡入名称为name的动画并且淡出其他动画。

Blend 在接下来的几秒内混合名称为name的动画直到targetWeight

CrossFadeQueued 在前一个动画播放完成之后淡入淡出下一个动画。

PlayQueued 在前一个动画播放完成之后直接播放下一个动画。

AddClip 给动画添加一个名称为newName的动画剪辑。

RemoveClip 从动画列表移除剪辑。

GetClipCount 取得当前动画的动画剪辑数量。

SyncLayer 同步某层的动画的播放速度。

Animator 类

Mecanim动画系统中,通过Animator组件来控制动画的播放,设置和获取动画中的参数。

变量

isHuman 是否为人形动画。Humanoid则返回true。Generic 则返回false。

humanScale 人形动画Avatar缩放倍数。 (generic默认返回 1)

deltaPosition相对于上一帧Avatar位置变化量。

deltaRotation相对于上一帧Avatar旋转(朝向)变化量。

rootPosition 根节点(gameObject)位置。

rootRotation根节点(gameObject)朝向。

applyRootMotion 根节点受动画(animations)控制。

animatePhysics  如果为true,动画在物理循环中播放. 仅用来和动力学刚体(kinematic

rigidbodies)交互。

gravityWeight 重力值,取决于当前播放的动画。

bodyPosition 重心位置。

bodyRotation 重心方向。

stabilizeFeet 动画切换和混合时自动对齐脚

layerCount 动画控制器( AnimatorController)层数。

feetPivotActive脚底轴心权值. 为 0% 表示轴心在重心,为 100% 轴心在脚底。

pivotWeight 轴心权值;

pivotPosition 轴心当前位置。

isMatchingTarget 是否自动匹配。

speed播放速度。( 1表示未缩放)。

targetPosition 目标点位置通过 SetTarget()函数设置。

targetRotation 目标点方向.通过SetTarget()设置。

cullingMode 裁剪模式.

avatar 获取和设置当前Avatar。

layersAffectMassCenter 附加层,影响重心。

函数

GetFloat 获取一个浮点数类型的参数。

SetFloat设置一个浮点数类型的参数。

GetBool获取一个布尔类型的参数。

SetBool 设置一个布尔类型的参数。

GetInteger获取一整数类型的参数。

SetInteger设置一个整数类型的参数。

GetVector获取一个向量类型的参数。

SetVector设置一个 向量类型的参数。

GetQuaternion获取一个四元数类型的参数。

SetQuaternion设置一个四元数类型的参数。

IsParameterControlledByCurve 参数是否通过曲线控制。

GetIKPosition 得到反向动力学的目标点位置。

SetIKPosition 设置反向动力学的目标点位置。

GetIKRotation 获取反向动力学目标点的方向。

SetIKRotation设置反向动力学的目标点方向。

GetIKPositionWeight 得到反向动力学位移权重。(0表示原始位置。1表示反向动力学

目标位置)

SetIKPositionWeight设置反向动力学位移权重。

GetIKRotationWeight 得到反向动力学方向权重。

SetIKRotationWeight 设置反向动力学方向权重。

SetLookAtPosition 设置观察方向(z轴正方向)。

SetLookAtWeight 设观察点方向权重。

GetLayerName 得到层的名称。

GetLayerWeight 得到层的当前权重。

SetLayerWeight 设置层的当前权重。

GetCurrentAnimatorStateInfo 获取当前动画控制器当前状态信息。

GetNextAnimatorStateInfo 得到当前动画控制器的下一个状态信息。

GetAnimatorTransitionInfo 得到指定动画控制器层上的转换信息。

GetCurrentAnimationClipState得到当前动画剪辑的状态信息。

GetNextAnimationClipState 获取下一个动画剪辑状态信息。

IsInTransition 是否正在进行状态切换

MatchTarget 自动对齐到目标位置和方向。

InterruptMatchTarget 中断自动对齐操作。

ForceStateNormalizedTime 设置归一化时间(到达目标点的时间)。

SetTarget 设置目标位置。

IsControlled transform属性是否受Animator控制。

GetBoneTransform 返回骨骼的Transform 属性。

动画播放和取样

在3ds Max或者Maya中创建了一个每秒60帧的动画后,当导入进Unity,同样也是60帧的动画。然而游戏在运行的时候,帧率却不是恒定不变的。在一些速度较快的PC上帧率会更快,帧率也会每一秒在摄像机与给出的任意一点上所看到复杂度不同。基本上这意味着我们可以不用当游戏运行的时候去假设确切的帧率。如果有一个60帧的动画,它应该是可以从不同的帧率上回放回来,比如56.18 fps,或者87.61fps,可以是任何的点。

Unity在不同帧率上的的采样动画,并不是它们真正的帧率。但是很幸运,3D电脑图形上的动画不是由分离的帧所组成的,而是连续的曲线。这些曲线对任何点的采样都是很适合的,不是光只是在时间轴上原始帧的那些点。这意味着游戏在运行的时候,在比较高的帧率上,动画效果看起来会更平滑和流畅。

在大多数练习的情况下,事实上Unity采样动画在这些可变的帧率上并不是你想像中还需要去做连接的。然而,如果你有一个在游戏逻辑上要去判断控制动画的坐标属性,那就得注意了。举个例子,如果你有一个30帧的动画是来旋转一个对象从0-180度,你想知道当代码何时进行到当动画进行到一半的时候即90度,不应该去添加一个条件语句来判断现在对象的旋转是不是已经进行到了90度。因为Unity的动画采样是依照游戏不同的帧率来进行的,当旋转在90度以下的时候就该判断了,等到90度的时候就刚好。如果你需要知道何时动画中一个指定点的时候,应该去用AnimationEvent代替。

要注意在可变帧率上的因果关系,一个回放动画要用WrapMode.Once是不可能为一个上一帧的准确时间来采样的。在游戏的动画帧上可以在动画播放后去采样,在下一个帧上的时间上就有多余动画长度,所以就关闭也不会去采样。如果你真的需要上一帧的动画去做采样,就需要WrapMode.ClampForever.这样动画就会正常保持上一帧的采样直到你要停止播放动画。

声明:此篇文档时来自于【狗刨学习网】社区,是网友自行发布的Unity3D学习文章,如果有什么内容侵犯了你的相关权益,请与官方沟通,我们会即时处理。

时间: 2024-12-13 09:45:54

Unity3D游戏开发之详解 Animation类和Animator类的相关文章

Android研究之游戏开发多线程详解

 游戏开发与软件开发多线程的重要性       如果程序主线程被阻塞超过5秒,系统会提示"应用程序无响应" 这就是ANR . ANR的全称是Application Not Responding,使用多线程可以避免ANR.但是这里要注意一下不要为了避免ANR而过多的使用多线程,除非万不得已的情况. 比如访问网络服务端返回的过慢.数据过多导致滑动屏幕不流畅.或者I/O读取过大的资源等等.这里可以开启一个新线程来处理这些耗时的操作. 如果过多使用多线程会出现数据同步的问题须要程序员去处理

Android+3D游戏开发技术详解与典型案例

 内容导读 本书共分两篇,第一篇介绍了Android 3D游戏开发的基础知识,主要对OpenGL ES的相关内容进行了介绍. 章 名主 要 内 容 第1章 英雄还看今朝-Android简介本章介绍了市场上主流的手机平台,同时也分析了未来手机平台的发展趋势及Android平台的前景 第2章 数风流人物-当前流行游戏类型简介本章以分类的方式简要地介绍了当前流行的游戏的玩法,游戏的视觉效果,游戏的设计及<仙剑>等著名游戏的历史 第3章 不积跬步,无以至千里-游戏开发基础知识本章初步介绍了游戏开发的基

Canvas前端游戏开发——FlappyBird详解

一直想自己做点小东西,直到最近看了本<HTML5游戏开发>,才了解游戏开发中的一点点入门知识. 本篇就针对学习的几个样例,自己动手实践,做了个FlappyBird,源码共享在度盘;也可以参考github,里面有更多的游戏样例. (可点击底部[阅读原文]下载源码) 游戏截图 HTML5之Canvas Canvas是Html5中用于绘图的元素,它可以绘制各种图形,比如长方形,多边形,圆形等等.如果想要了解Canvas的使用可以参考: http://www.w3school.com.cn/tags/

【Unity3D游戏开发】—— 太空大战打飞机游戏详解

大家好我是Kaven,今天给大家带来的是一个Unity3D的打飞机的小项目.俗话说"眼看千变,不如手过一边",学了差不多两星期Unity3D了,是时候找个小项目练练手了.于是就翻出了cocos2d-x的一个例子,模仿着写了一个飞机大战的游戏,虽然有一些功能没有实现,但总体上是完成了.闲话少说,下面开始吧. 由于这个用的是Unity3d自带的原生的2D插件native 2d,所以创建项目时左下角选择2d. 这个小游戏我分了三个场景,菜单场景,游戏场景,结束场景.由于菜单场景与结束场景都比

Unity3D游戏开发之粒子系统实现详解

 今天为大家分享的是Unity3D中的粒子系统,粒子系统通常用来表现烟雾.云等高级效果,是一个十分注重制作技巧的部分,今天我们将以一个气泡的演示实例来一起学习如何在Unity3D中使用粒子系统.首先我们创建一个Unity3D项目,然后我们导入官方提供的粒子系统资源包,如下图: 接下来,我们创建一个粒子对象,如图所示: 接下来我们在属性面板中完成对粒子系统的设置,我们通过一张图来介绍这个属性面板: 接下来,我们单击Renderer,以设置该模块的Material属性,我们将官方提供的SoapB

Unity3D游戏开发之跑酷游戏项目详解

更多精彩请到http://www.gopedu.com/ 今天的博客的主题就是<Unity3D游戏开发之跑酷游戏项目讲解>. 从我们自身来考虑这件事情,当你选择做自己热爱的事情的时候,你的内心一定是充满激情和勇气的,你愿意看到自己的努力,你愿意看到自己的付出,我们成长是为了促进自我对认知的不断完善,所以我们应该以一种虔诚.谦恭的态度来对待我们的生命,我们或许无法选择出身,但我们可以选择向自己喜欢的生活去努力.或许我和这些人真的不是一个世界的人吧,很多事情在今天都给出了结局,对于这种人我已经没有

【Unity3D游戏开发】—— PlayerPrefs类实现本地持久化数据存储

在很多游戏中都会有"存储进度","读取进度"等菜单,或者当我们进入下一个场景时有些数据需要带入下一个场景.这就需要数据储存.Unity中提供了一个用于本地持久化保存于读取数据的类--PlayerPrefs. 它是以键值对的形式将数据保存在文件中. 下面来看看PlayerPrefs的简单用法.. //得到存储的数据 Grade = PlayerPrefs.GetFloat("mGrade", 0.0f).ToString(); //获取浮点型 Ag

农场游戏系统开发怎么做?丰乐惠农场游戏玩法详解。

一.丰乐惠牧场系统介绍 乌鸡 9.9元 每天收益1元 15天共收益15元 北京鸭 99.9元 每天收益9元 15天共收益135元 藏猪 699.9元 每天收益67元 16天共收益1072元 白羊 1699.9元 每天收益170元 17天共收益2890元 藏獒 3499.9元 每天收益350元 18天共收益6300元 二.动态奖励 1级:5% 2-3级:2% 4-12级:1% 13-15级:2% 三.全球分红 1.当天直推有效会员3人,享受平台当天总业绩的2%(均分) 2.当天直推有效会员6人,享

Unity3D游戏开发从零单排(五) - 导入CS模型到Unity3D

游戏动画基础 Animation组件 Animation组件是对于老的动画系统来说的. 老的动画形同对应的动画就是clip,每个运动都是一段单独的动画,使用Play()或CrossFade(),直接播放动画 或淡入淡出播放动画. animation.Play("name"); animation.CrossFade("name"); 下面的是它的几个属性 Animation:默认的动画片段: Aniamtions:包含的动画片段: Play Automaticall