认识未深,记录备忘

动画融合

Stealth秘密行动 14-17

新建状态机

面板上的Motion

//Motion运动
//Locomotion,运动,自己的命名
//Loco,机车
//Blend,混合

与普通动画在面板上的区别

//普通动画的Motion是一个动画Clip

新建行为树

//双击点进去

添加动画

//点击节点
//点击右边的先小圈圈,进行动画的添加
//动画项不够,就点击下面的“+”

(1D例子) Speed的大小控制由走到跑

//右下角可以拖其他模型

效果

//gif卡3M大小上传真不容易

可以拖其他模型到右下角的窗口

(2D例子)

unity TimeLine应用教程 酷炫开场动画 23-31
//cartesian,笛卡尔
//1、选择一个2D(哪个2D都试一试,主要出效果),选参数(Horizontal表示水平/左右,Vertical表示垂直/前后)
//2、随便选(可能就是角速度控制左右可以参考,其他的不知道要参考哪些要素),只要出3的效果

切/调整动画

一般是一个模型的所有动画都放在一个总Clip中,需要什么状态的Clip,已切好或自己切。
//1、切图看循环播放时是否连贯
//2、可以旋转,打钩(比如Idle/Walk/RunForward,就是不能旋转;相反地,RunLeft/RunRight没打钩·,可以旋转)
//3、Y轴没影响,都打钩,表示不会在Y(高度上变化)
//4、边移动边旋转,就是位移靠动画(以前不考就是靠角色控制器的SimpleMove()、MoveForward()之类的)
//5、镜像,省功夫的,比如RunRight是RunLeft的镜像,设置数据都是抄RunLeft的
//6、比如RunLeft/RunRight,Y角速度变化明显,所以在行为树中,适合用角速度来控制RunLeft/RunRight(详细有以下的“角速度”)

角速度

//角速度对转向的影响比较大
//转弯靠转身,而不是“螃蟹”横着走

效果

(问题) Animator打开为空

重启

IK

抗木头

unity TimeLine应用教程 酷炫开场动画 43-47

FixAnimatorIKPositionAndRotation(骨骼部位, 具体位置, 权重)【自定义的函数】

    [Tooltip("肩膀上的木头,一开始不激活")] public GameObject wood;[Tooltip("模型中左手腕处")] public Transform leftHand;[Tooltip("模型中右手腕处")] public Transform rightHand;//private void OnTriggerEnter(Collider other)//接触木头{if (other.tag == "Log"){Destroy(other.gameObject);print("碰撞");CarryWood();}}private void CarryWood()//扛木头{wood.SetActive(true);animator.SetBool(willHoldLogID,true);}private void OnAnimatorIK(int layerIndex)//每帧调用,需要层启用IK{if (layerIndex == 1)//对应HoldLog层{int weight = animator.GetBool(willHoldLogID) == true ? 1:0;//willHoldLogID的值FixAnimatorIKPositionAndRotation(AvatarIKGoal.LeftHand,leftHand, weight);FixAnimatorIKPositionAndRotation(AvatarIKGoal.RightHand,rightHand, weight);}}private void FixAnimatorIKPositionAndRotation(AvatarIKGoal target, Transform match, int weight)//使用match的位置角度来调整target{animator.SetIKPosition(target, match.position);//设置位置animator.SetIKRotation(target, match.rotation);animator.SetIKPositionWeight(target, weight);//设置优先级animator.SetIKRotationWeight(target, weight);}

第一个参数 骨骼部位

AvatarIKGoal.LeftHand
AvatarIKGoal.RightHand
意思是,这一层的状态机只动用到左右手。其他部分不归它管

第二个参数,位置LeftHand/RightHand

//具体操作是,在木头下新建两个空节点,来存储“抗木头”时左右手的Transform
//旋转手,使之贴合木头达到效果
//把此时左右手的Transform赋值给木头下的两个空节点。左右手复位

第三个参数 IK认骨骼的位置还是target(自己设置)的位置

//原理不清楚,反正不都设为1(认target的位置),都会出现位置错误

方法参数对比

Animator.SetIKPositionWeight

目标匹配 MatchTarget

翻墙

//绿球是以下代码生成的

        animator.MatchTarget(matchTarget,Quaternion.identity,avatarTarget,new MatchTargetWeightMask(matchTargetWeightMask, 0),startTime,endTime);

    private void Vault()//腾跃,尝试过和Slide重构复用,太麻烦{//1、播放动画//速度>3 && 是 LocalMotion行为树//射线检测float testDistance = 4f;//检测距离float vaultDistance = 3f;//起跳距离bool willVault = false;//是否要进行翻墙//rayPos,direction,射线,长度bool isHit = Physics.Raycast(transform.position+Vector3.up*0.3f, transform.forward, out RaycastHit hit, testDistance);if (isHit && hit.collider.tag == "Obstacle")//障碍物是墙{if (hit.distance > vaultDistance)//{willVault = true;//Vector3 point = hit.point;point.y = hit.collider.transform.position.y + hit.collider.bounds.size.y;//位置加自身高度matchTarget = point;//得到着手点matchTarget.y +=matchTargetOffsetY;}}          animator.SetBool(willVaultID, willVault);//2、MatchTarget//有一个状态叫ClimbOver && 在翻墙中, 不在状态切换过程中(差值)if (animator.GetCurrentAnimatorStateInfo(0).IsName("ClimbOver") && animator.IsInTransition(0) == false){//1、MatchTargetfloat startTime = 0.3f;float endTime = 0.4f;MatchTarget(matchTarget, AvatarTarget.LeftHand, Vector3.one, startTime, endTime);}}void MatchTarget(Vector3 matchTarget,AvatarTarget avatarTarget, Vector3 matchTargetWeightMask, float startTime, float endTime){//动画在(startTime,endTime)时animator.MatchTarget(matchTarget,Quaternion.identity,avatarTarget,new MatchTargetWeightMask(matchTargetWeightMask, 0),startTime,endTime);}

滑地

//我主要调endTime
//视频matchTarget = hit.point+transform.forward * 2(越大越远,视频看效果时设为10,滑地了很远)
//matchTarget决定改动画在(startTime, endTime)期内,整个模型会向前移动多远

    void Slide()//滑地{//1、播放动画//速度>3 && 是 LocalMotion行为树if (animator.GetFloat(verticalID) > runSpeed && animator.GetCurrentAnimatorStateInfo(0).IsName("LocalMotion")){//射线检测float testDistance = 4f;//检测距离float slideDistance = 2f;//滑地距离bool willSlide = false;//是否要进行翻墙//start,direction,射线,长度bool isHit = Physics.Raycast(transform.position + Vector3.up * 1.5f, transform.forward, out RaycastHit hit, testDistance);if (isHit && hit.collider.tag == "Obstacle")//障碍物是墙{if (hit.distance > slideDistance)//起跳距离{willSlide = true;//设置matchVector3 point = hit.point;point.y = 0;//滑行不影响高度point = point + transform.forward*10;matchTarget = point;//滑行个2米}                  }animator.SetBool(willSlideID, willSlide);}//if (animator.IsInTransition(0) == false && animator.GetCurrentAnimatorStateInfo(0).IsName("Slide")){//1、MatchTargetfloat startTime = 0.38f;//0.17float endTime = 0.67f;//0.67f;//30//float startTime = 0.17f;//0.17//float endTime = 0.30f;//0.67f;//30MatchTarget(matchTarget, AvatarTarget.Root, new Vector3(1, 0, 1), startTime, endTime );}}void MatchTarget(Vector3 matchTarget,AvatarTarget avatarTarget, Vector3 matchTargetWeightMask, float startTime, float endTime){//动画在(startTime,endTime)时animator.MatchTarget(matchTarget,Quaternion.identity,avatarTarget,new MatchTargetWeightMask(matchTargetWeightMask, 0),startTime,endTime);}

导播

public PlayableDirector director;//过场动画的相机,播放时间轴private void OnTriggerEnter(Collider other)//接触木头{if (other.tag == "Playable"){director.Play();//播放Timeline}}


Unity 动画融合 IK MatchTarget 导播相关推荐

  1. 值得期待!中兴新支点4G多卡聚合技术将融合到新型导播机

    2018年10月8日,经过双方多轮技术交流.测试验证,中兴新支点公司与在导播机领域具有业界领先地位的南京某软件公司签署合作协议,将在纳加新型导播机项目中,由中兴新支点提供4G多卡传输模块,将4G多卡传 ...

  2. Unity(动画层 IK动画)

    动画层 关于动画层的使用        →        用于融合不同部位的动画 动画层设置 Weight(权重)        →        该层动画执行的比例 Mask(遮罩)        ...

  3. Unity动画☀️7. 通过MatchTarget匹配跳墙动画、Vector3、获取动画层GetCurrentAnimatorStateInfo(a).IsName(b)

    1️⃣ 关键代码释义 a.Vector3 // x = 0,y = 1, z = 0 Vector3.up;// 表示世界坐标系中 Y 轴正方向上的单位向量// x = 0,y = -1, z = 0 ...

  4. Unity动画系统详解8:IK是什么?

    摘要:IK是Inverse Kinematic的缩写,也就是反向动力学.是根据骨骼的终节点来推算其他父节点的位置的一种方法.比如通过手的位置推算手腕.胳膊肘的骨骼的位置. 洪流学堂,让你快人几步.你好 ...

  5. unity普通操作:animator播放,暂停,判断播放完成【(增加1个判断如果这个是动画融合的情况)】

    1.播放,暂停 anim.CrossFade("s2", 0); anim.speed=0://暂停 anim.speed=1://播放 判断播放完成(Update方式) void ...

  6. Unity动画系统学习

    Unity动画系统学习 文章目录 Unity动画系统学习 AnimationState 动画状态 Animation Transitions 动画过渡 动画分层和遮罩 动画混合 1D混合 2D混合 动 ...

  7. Unity动画系统详解9:Target Matching是什么?

    摘要:在游戏中,经常有这种情况:角色的手或者脚需要在特定时间放在特定的位置.比如角色需要用手撑着跳过一个石头或一堵墙,或者跳起抓住房梁.Target Match就是让动画的特定片段去匹配特定的位置. ...

  8. [Unity动画]04.Avatar Mask

    [Unity动画]04.Avatar Mask 参考链接: https://www.cnblogs.com/hammerc/p/4832637.html Avatar Mask主要用于动画层融合.例如 ...

  9. Unity3D教程:动画融合、动画层、动画混合、附加动画、程序动画、动画重放和取样

    原帖地址:http://www.unitymanual.com/5323.html 动画脚本 Animation Scripting Unity's 动画系统允许你创建一个漂亮的动画蒙皮角色,动画系统 ...

最新文章

  1. 活动报名 | 新国立尤洋:FastFold——将AlphaFold训练时间从11天减少到67小时
  2. mysql 5.6 与5.7 区别_mysql5.6和5.7的区别
  3. python的用途实例-python中pass语句意义与作用(实例分析)
  4. HTML5在豆瓣的各种应用
  5. 【页面传值6种方式】- 【JSP 页面传值方法总结:4种】 - 【跨页面传值的几种简单方式3种】...
  6. MySQL高级 trace工具
  7. java jcifs 速度_java – JCIFS:文件检索太慢而无法使用
  8. 使用代码获得Social Media Channel绑定的service url
  9. MyEclipse连接MySQL
  10. 谷歌guava_Google Guava –期货
  11. C# 加载C++的dll
  12. 面试题 17.21. 直方图的水量/42. 接雨水
  13. 如何不重启服务,把编译类放入正在运行的服务中去
  14. 钢铁侠要为Facebook的智能管家配音,really?
  15. 郭麒麟、宋轶主演的《赘婿》1-8集拍得怎么样?
  16. java代码混淆加密_关于Java加壳和代码混淆
  17. ListView优化之ViewHolder
  18. 高仿微信表情控件 -- LQREmojiLibrary
  19. 计算机专业如何推广太极拳,太极拳在年轻人群体中推广的怎么样不得不说挺吃惊...
  20. jzoj5442. 【NOIP2017提高A组冲刺11.1】荒诞

热门文章

  1. 如何为电力运维和配电公司提供与用户变电站互动的平台
  2. ios11.2计算机更新,iOS11.2正式版如何升级 iOS11.2正式版更新升级方法【详细教程】...
  3. URP 渲染顺序设置 RenderObjects
  4. 删除文件时提示需要**权限, 通过命令行修改文件/目录的所有者和权限
  5. php微信公众号红包开发,php微信公众号开发之现金红包
  6. 普通人网上赚钱,抖音机会仍旧会非常大!
  7. 10- ESP8266自主WiFi配网
  8. DFT的计算、FFT的基础代码、FFT的横纵坐标问题(matlab)
  9. 数字信号处理技术:系统因果性及稳定性判断
  10. 滚动条样式-鼠标悬浮才展示滚动条