unity3d动画如何位移_unity3d 动画位移 - CSDN
  • Unity 禁用动画位移

    2016-09-17 10:13:44
    今天在自己做demo的时候,发现网上找到的动画资源是自带位移的,就是说只要播放动画,角色就会移动,但是我想自己控制角色移动,便于控制移动速度和动画混合。 解决方法是,在Animator组件的属性里面有一个叫做...

    今天在自己做demo的时候,发现网上找到的动画资源是自带位移的,就是说只要播放动画,角色就会移动,但是我想自己控制角色移动,便于控制移动速度和动画混合。

    解决方法是,在Animator组件的属性里面有一个叫做Apply Root Motion的bool值,取消勾选即可。



    展开全文
  • Unity3D中下载的模型动画自带位移,就是说没有写任何脚本,在动画控制器上添加动画,模型会自己移动,在模型Animator组件的属性上有一个Apply Root Motion的值,将勾选去掉的话就不会再自带位移了,勾上就是模型自带...

    Unity3D中下载的模型动画自带位移,就是说没有写任何脚本,在动画控制器上添加动画,模型会自己移动,在模型Animator组件的属性上有一个Apply Root Motion的值,将勾选去掉的话就不会再自带位移了,勾上就是模型自带位移。
    在这里插入图片描述

    展开全文
  • 如何让Unity3D Mecanim动画系统Generic动画支持动画中的位移 发表回复 由于目前我们正在做的这个游戏中可能暂时还没有太强烈的需求去使用Mecanim动画系统中最新的Humanoid类型动画,我们首选的还会使用Generic...

    由于目前我们正在做的这个游戏中可能暂时还没有太强烈的需求去使用Mecanim动画系统中最新的Humanoid类型动画,我们首选的还会使用Generic动画,所以呢,前路漫漫其修远,大坑前面等你栽。 确定要使用Generic动画之后,那就继续呗。因为之前项目中使用的都是旧的动画系统(Legacy),所有角色和NPC的动画都是在原点做动作,角色和NPC在播放动画的同时需要通过脚本来控制角色的位移,这个要求负责程序和负责动画的童鞋密切合作把角色动画位移调整到一个协调的状态,这个当然也不是什么特别困难的事情,要不你看现在App Store里的所有游戏不都好好的嘛。 不过如果能让动画直接带上位移,那么程序和美术童鞋都解放了,动画设计的时候就能更大胆了,毕竟角色动画的真实位移相对于程序控制的更协调,而且大家都省了不少的事情,何乐不为啊。废话说了一大堆,好吧,回到正题。 那就做一个连续的带位移的动画吧,导入Unity之后,创建Animator Controller之后,把动作设置好,点击Play按钮,看看效果吧。尼玛,发现单个动画在播放的过程中角色确实发生位移了,但是每个动画结束之后回到IDLE状态动画的时候,角色在场景中的位置会发生一次闪回,直接重新归位到动画开始播放时角色所在的位置,并且在整个动画播放的过程中,角色的位置从未发生过变化,角色身上绑的Capsule Collider也完全不会移动,完全落在角色身后了。这是啥问题呢?这个问题在我使用Humanoid动画的时候木有出现啊,尝试再次恢复到Humanoid动画类型,确认了在Humanoid动画类型下确实不会出现这个位移闪回的问题,每个动画结束后,角色所在的位置就是动画结束时位置。 Mecanim-Generic-Rig-Apply-Root-Motion-Error 搜索良久最终找到了解决方法,其实只需要在导入动画的时候指定好动画骨骼的根节点就OK了。  

    Generic-FBX-Import-Rig-Setting Humanoid-FBX-Import-Rig-Setting

     

     

     

     

     

    咱们对比一下这两个设置的选项,其中Humanoid动画类型导入时,根本就不需要设置Rig的根节点,而Generic动画就需要设置,而且默认设置是none,所以需要手动指定为模型对应骨骼的根节点。

    看来Unity动画支持Apply Root Motion这个特性的实现机制就是根据骨骼在动画中的位移在引擎内进行计算滴,如果我们选择使用Humanoid动画的话呢,肯定需要设置一个人形的骨骼Avatar信息,这个Avatar信息中就会包含骨骼各个节点的信息,其中当然也包含了根节点(或者说已经不需要根节点了,因为所有关键的骨骼信息都会映射到Avatar信息上)。而对于Generic动画呢,Unity自身并不清楚骨骼之间的关系,而Apply Root Motion这个特性就是根据骨骼位移自行计算的,那么就需要我们手动地指定动画使用的骨骼的根节点了,根据根节点在动画中的位置变化就可以动态计算出来对象在场景中实时的位置了。

    下图就是修改Root Node设置之后动画播放时的效果了,Capsule Collider也实时跟着动画的播放改变位置了。

    Generic-Apply-Root-Motion-1 Generic-Apply-Root-Motion-2

    展开全文
  • C#程序员整理的Unity 3D笔记(十):Unity3D位移、旋转的3D数学模型 遇到一个想做的功能,但是实现不了,核心原因是因为对U3D的3D数学概念没有灵活吃透。故再次系统学习之第三次学习3D数学.   ...

    原文:

    C#程序员整理的Unity 3D笔记(十):Unity3D的位移、旋转的3D数学模型



    遇到一个想做的功能,但是实现不了,核心原因是因为对U3D的3D数学概念没有灵活吃透。故再次系统学习之第三次学习3D数学.

     

    本次,希望实现的功能很简单:

    image

    如在小地图中,希望可以动态画出Player当前的位置、z的朝向:用3条线、z轴正向、30°旋转、-30°旋转。

    问题是:0点可以获得,P1点? P2点是未知的。

    我尝试了2个小时,结果不竟如人意,少于沮丧。

    image

     

    不得不,再次花点时间系统的学习3D数学:

    1 位移?向量和点:

       点: 点和向量在数学上是一致的,实际生活中点的概念比较好理解,坐标点来定位?南二环、北二环。   【点用(3,4,5)圆括号来标示,简称P】    向量:“俗称增量”,有大小和方向,如”往前1步走。 左转90度”. 往前走,直到碰到墙,你才会停下来?在这之前,你无法准确获得碰到墙的点的坐标或者你和墙的距离。                                              【向量用<3,4,5>尖括号来标示,简称V】 在U3D中,统一用Vector3对象来表达向量和点,这个也是导致新手晕头转向的一个很重要的原因; 一个技巧,凡是在API中用position、Point的,V3肯定代表是点;凡是Vector、direction的是向量;多看官方的API手册,写得很明白。

    做个游戏,列表出你用过的Vector3的API,分析分析用到的Vector3是向量(V)还是点(P)

    需求

    API

    向量(V)

    点(P)

    备注

    平滑位移

    Vector3 MoveTowards(Vector3 current, Vector3 target, float maxDistanceDelta);

    P

     

    平滑位移

    Vector3 Slerp(Vector3 from, Vector3 to, float t)

    P

     

    新的坐标点

    this.m_transform.position = pos;

    P

    符合常规思维

    变动一次坐标

    m_transform.Translate(new Vector3(rx, 0, -m_Speed * Time.deltaTime));

    V

    可认为是增量

    求方向

    Vector3 relativePos = this.m_transform.position ? m_Player.position;

    V

    向量减法,较难理解

    设置新坐标点

    lineRenderer.SetPosition(0,this.gameObject.transform.position);

    m_NavAgent.SetDestination(this.m_Player.transform.position);

    P

    符合常规思维

    新的位置

    pointer.transform.position = hitInfo.point + (transform.position ? hitInfo.point) * 0.01f;

    P、V

    力的叠加?

    求距离

    float dis = Vector3.Distance(v1, v2);

    float f1 = (v1 ? v2).sqrMagnitude;

    float f3 = (v1 ? v2).magnitude;

    P、V

    Distance用点即可

    向量减法也可以

    缩放正向

    Vector3 v3 = this.m_transform.forward * 200f;

    V

    V的数乘

    射线检测

    Ray r = new Ray(source, dest);

    Physics.Raycast(r, out hit, 1000, m_ShootMask)

    V、P

    Source:P

    Dest:V

    加一个力

    rigidbody.AddForce (0, 10, 0);

    V

     

     

    依据这个游戏,可以整理出目前用到的有4个组件(含Vector 3)会发生位移:

    位移常用的4个组件和Vector3:

    组件

    函数

    Unity 圣典的API说明

    是否

    用过

    transform组件

    translate函数

    向某方向移动物体多少距离【默认local坐标系】

    或者相对某物体移动

    yes

     

    Position属性

    在世界空间坐标transform的位置

    Yes

    RigidBody组件

    [FixedUpdate函数]

    Velocity属性

    刚体的速度向量

    Unity 官方demo Done用的很酷

    Yes

     

    AddForce函数

    添加一个力到刚体。作为结果刚体将开始移动。

    yes

     

    MovePosition函数

    移动刚体到position

     

    NavMeshAgent组件

    SetDestination函数

    设置自动Path目标点

    yes

    CharacterController

    组件

    Move函数

    一个更加复杂的运动函数,每次都绝对运动

    yes

     

    SimpleMove函数

    以一定的速度移动角色

     

    Vector3向量

    Lerp函数

    两个向量之间的线性插值。

    “像弹簧一个跟随目标物体”

     
     

    Slerp函数

    球形插值在两个向量之间

    “在日出和日落之间动画弧线”

     
     

    MoveToward函数

    当前的地点移向目标

    和Vector3.Lerp相同,maxDistanceDelta限速

     
     

    SmoothDamp 函数

    随着时间的推移,逐渐改变一个向量朝向预期的目标。

     

     

    我的几个向量相关的问题:

    如何判断A向量和B向量是否同方向? 如何判断A向量和B向量前、后、左、右? 如何判断A向量和B向量的夹角? 向量的减法貌似比加法更有用一些? Vector.Forward和this.transform.Forward都表达local坐标系,那么数值为什么不一样呢?

     

    2 旋转?Quaternion、eulerAngles、Quaternion.Euler

      

    旋转在3D中是比较复杂的,在Unity 3D中一般用Quaternion来进行旋转, 旋转仅涉及向量的概念(向量的方向),请思考对于坐标点或者零向量旋转有无意义?

    而按照Unity 3D API官方的说法,仅有约7个方法或者操作符比较常用,且占99%的概率,我截止目前还没有用到这么多,我用到的Quaterniong约有4个函数。

    旋转常用7个API:

    Quaternion API

    Unity 圣典的API说明

    是否

    用过

    Quaternion.LookRotation

    创建一个旋转,沿着forward(z轴)并且头部沿着upwards(y轴)的约束注视。也就是建立一个旋转,使z轴朝向y轴朝向up。 常用的是transform.LookAt

    yes

    Quaternion.Angle

    返回a和b两者之间的角度。

     

    Quaternion.Euler

    返回一个旋转角度,绕z轴旋转z度,绕x轴旋转x度,绕y轴旋转y度(像这样的顺序)。

    yes

    Quaternion.Slerp

    球形插值,通过t值from向to之间插值。

     

    Quaternion.FromToRotation

    从fromDirection到toDirection创建一个旋转。

     

    Quaternion.identity

    返回恒等式旋转(只读)。这个四元数对于“无旋转”:这个物体完全对齐于世界或父轴。

    yes

    Quaternion.operator *

    由另一个四元数来旋转一个旋转角度,或由一个旋转角度来旋转一个向量

    yes

     

    我的几个旋转相关的问题:

    1 Quaternion.LookRotation和Vector3.RotateTowards的区别?

    2 Quaternion.Angle和Vector3.Angle的区别?

    3 Quaternion.LookRotation和transform.LookAt的区别?

    [官方回答:   大多数时间你可以使用transform.LookAt代替

                      Quaternion.LookRotation]

    4 如何实现2个GameObject face to face,即Z轴相对?

     

     

     

    磨刀不误砍柴工: 经过一周的复习、反复验证,果然在系统学习3D 数学后,要实现的功能可以了,如下:

    image

     

    参考博客:

    坐标系的简介:C#程序员整理的Unity 3D笔记(八):Unity 3D坐标系介绍

    宣雨松的博客:http://www.xuanyusong.com/archives/1977

    总结:

    据说80%、90%Unity 3D程序员是自学的,大多数是看看书、实战视频、源码分析;而科班出生的同学会有3D数学这门核心课?估计占一个学期、会有作业等。为了赶上科班同学的水平,花点时间,补补数学知识,会使得自己少走一些弯路。一句话:”3D数学模型很关键。“


    展开全文
  • Unity3d Mecanim动画如何应用3dmax中的动画位移大家好!我是小周,这是我的第一篇博客,自己喜欢游戏,所以大学报了计算机专业,毕业以后也如愿以偿的进入了游戏开发者的队列,现在用Unity3d做MMORPG游戏快一年了,...
  • 1.Generic要TPose模型的Root node设置为骨骼Root:Bip01,Humanoid无需操作;...注意点一:如果有跳跃动作(Y轴有位移),那么Y的Bake Into Pose要勾上; 注意点二:如果发现在做动作时有旋转(一般为90度的旋转),
  • unity 的 asset store 里面下载 的动作。 有的时候会产生动画的位移。 使得 人物角色的 animator 的 apply root motion 保持 取消勾选的状态。动画播放就不会进行移动了。...Unity 禁用动画位移 2. 3.
  • Unity3D 动画偏移问题

    2019-04-23 16:59:45
    接受目前的项目的时候,游戏角色已经有一套完整的动作动画以及逻辑。但是由于逻辑过于凌乱,并且用了新的骨骼,动画也重新由外包发了一份,所以我重新导入了所有的动画并且重写了角色的动作逻辑。 默认导入的FBX...
  • Unity3D从入门到进阶】文章目录及设置这个专栏的初衷 二、Animation动画系统 Animation:动画片段 Animations:动画片段数组 Play Automatically:是否自动播放动画 Animate Physics:动画物理碰撞 Culling Type...
  • 但如果某些动画本身不是匀速运动,比如丧失的走路动画,可能会是一个非线性运动,这个时候如果要策划在编辑器通过调曲线来调出走路的非线性移动是相当困难的,而spine-unity并没有提供像3dmax一样将移动转换为unity...
  • Unity3D Mecanim动画系统骨骼动画问题解决方法 发表回复 这几天开始做游戏中跟动画相关的部分了,此次新项目我们决定一次从新开始,就是能用新的东西就都用新的东西,没有必要总是把自己局限在之前的认知里头...
  • Unity3D 制作路径动画 插件包
  • 由于目前我们正在做的这个游戏中可能暂时还没有太强烈的需求...因为之前项目中使用的都是旧的动画系统(Legacy),所有角色和NPC的动画都是在原点做动作,角色和NPC在播放动画的同时需要通过脚本来控制角色的位移,这个
  • 3dsmax做的含FBX动画模型导入进Unity3D之后总需要对其缩放Scale调整一番,毕竟模型是在3dsmax中做出来的,不可能和Unity3D中的场景完全匹配。 我们自然而言地会对模型的Scale属性进行调节,以放大或者缩小从而适应...
  • )那就是在用unity自带的动画系统建立动画之后,你会发现,当你勾选Apply Root Motion的时候,动画播放之后会发生莫名奇妙的改变。 因为这个选项是允许动画改变物体的位移等属性,所以可能使用的时候会发现人物会...
  • Unity3D游戏开发FBX模型载入与人物行走动画的播放
  • Unity3D拥有很强大的动画系统,不仅可以制作简单动画还能管理动画。 制作简单动画可以借助Animation。详情请看这篇Animation博客 为了管理动画Unity3D配置了Animator Controller文件类型,它包含以下功能。 可以...
  • 导入模型动画的时候,选择Legacy,Store in Nodes,并且将模型作为一个GameObject的child。这样,模型动画播放的时候,只是以GameObject的位置作为参考,GameObject的位置移动不会使得模型动画回原来的位置。
  • 博主今天想和大家分享的是在Unity3D中使用...相信在大家的印象中,Mecanim动画系统主要运用在3D动画中,因为Mecanim动画系统提供了像动画重定向、人体骨骼动画等3D动画的特性,那么Unity3D的Mecanim动画系统能不能
  • 本文介绍了unity3d动画和游戏对象之间的关系
1 2 3 4 5 ... 20
收藏数 1,168
精华内容 467
关键字:

unity3d动画如何位移