animator(新动画系统):骨骼动画,骨骼驱动,格式化编辑,动画机图形化
animation(旧动画系统):物理系统,帧动画
一、如何建立动画文件 Animation Clip
手动添加动画
1、添加animation

旧动画和新动画Clips文件的区别:
旧动画,设置少
运动模式:
----Once:动画播放完毕,再次调用可以播放
----Clamp Forever:永远一次
----Loop:从新开始
----PingPong:从尾再到头

新动画,设置多
----Loop Time循环

Debug设置:
旧动画默认勾选,新动画默认不勾选,如果旧动画想在新动画系统播放,新动画系统也需要勾选

2、建立动画片段
Ctrl+6快速打开

3、添加关键帧
代表播放后的帧偏移(播放后多少帧发生什么动作),不代表游戏时间

旧动画系统:需要用代码来驱动Animation

自动添加动画,红色按钮

二、使用Animation组件来播放Clip
一个物体有多个动画状态,用代码切换动画状态,动画帧的复用
在父物体上添加Animation,在子物体上录制动画帧(子物体保留父物体的属性,记录父物体局部坐标系,不会记录世界坐标系)
把父物体生成预制体,预制体生成的新物体,动画不会受原坐标影响
动画片段的空间差异和时间差异
动画片段的播放,停止,融合
动画片段的切换:硬切和融合Crossfade
动画片段添加动画事件

能侦测同属一个物体身上的脚本方法

三、如何从模型文件提取动画文件Clip
1、如果有动画,Animation会有内容,关键帧表格,动画师会给出

2、旧动画,进入Rig,修改Legacy

3、添加片段:名字,起始帧,结束帧
选中相应的Clips可以播放片段
做好的片段的位置,在相应的模型文件目录下
不建议直接拖拽使用,建议提取出来,选中动画,按住Ctrl+D,可以独立出动画片段,仅对该类型模型有效(如果骨骼系统是同一系统,则可以复用)

 
用计时器控制Animation动画片段
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class AnimationManager : MonoBehaviour {
  5. public GameObject prefs;
  6. private float curTime = ;
  7. private float interval = 1.0f;
  8. void Update () {
  9. if (Time.time < )
  10. {
  11. curTime += Time.deltaTime;
  12. if (curTime >= interval)
  13. {
  14. Instantiate<GameObject>(prefs).transform.position = Vector3.right * Mathf.FloorToInt(Time.time);
  15. curTime = ;
  16. }
  17. }
  18. }
  19. }

用代码控制Animation动画片段

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class AnimationChange : MonoBehaviour {
  5. public Animation anim;
  6. void Update () {
  7. if (Input.GetKeyDown(KeyCode.Q))
  8. {
  9. anim.Play("AnimationChangeMove");
  10. }
  11. if (Input.GetKeyDown(KeyCode.E))
  12. {
  13. anim.Play("AnimationChangeScale");
  14. }
  15. if (Input.GetKeyDown(KeyCode.S))
  16. {
  17. anim.Stop();
  18. }
  19. }
  20. void SayBig()
  21. {
  22. Debug.Log("变大了");
  23. }
  24. void SaySmall()
  25. {
  26. Debug.Log("变小了");
  27. }
  28. }

递归树

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class Tree : MonoBehaviour {
  5. public float size;
  6. public GameObject treeGo;
  7. public void CreateSelf()
  8. {
  9. if (size < 0.05f) return;//给递归添加限值
  10. for (int i = ; i < ; i++)
  11. {
  12. GameObject go = Instantiate<GameObject>(treeGo);
  13. go.transform.position = transform.position + transform.up * * size;
  14. go.transform.rotation = transform.rotation;
  15. go.transform.rotation *= Quaternion.AngleAxis(Random.Range(, ), Vector3.up) * Quaternion.AngleAxis(Random.Range(-, ), Vector3.right);
  16. go.GetComponent<Tree>().size = size * 0.5f;
  17. go.transform.localScale = Vector3.one * size * 0.5f;
  18. }
  19. }
  20. }
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class PlayerAnimation : MonoBehaviour {
  5. public Animation anim;
  6. // Use this for initialization
  7. void Start () {
  8.  
  9. }
  10.  
  11. // Update is called once per frame
  12. void Update () {
  13. //如果每帧检测到播放的是当前动画,则不会重复播放动画第一帧,会让动画继续播下去
  14. //anim.Play("Idle");
  15. if (Input.GetKeyDown(KeyCode.Alpha1))
  16. {
  17. anim.Play("Move");
  18. }
  19. if (Input.GetKeyDown(KeyCode.Alpha2))
  20. {
  21. anim.Play("Idle");
  22. }
  23. if (Input.GetKeyDown(KeyCode.Alpha3))
  24. {
  25. anim.Play("Death");
  26. }
  27. }
  28. }
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public enum PlaySta
  5. {
  6. Move,
  7. Idle,
  8. Death
  9. }
  10. public class PlayerControl : MonoBehaviour {
  11. public Animation anim;
  12. public PlaySta playSta;
  13. // Use this for initialization
  14. void Start () {
  15. playSta = PlaySta.Move;
  16. }
  17.  
  18. // Update is called once per frame
  19. void Update () {
  20. float h = Input.GetAxis("Horizontal");
  21. float v = Input.GetAxis("Vertical");
  22. moveDir.x = h;
  23. moveDir.z = v;
  24. cd += Time.deltaTime;
  25. Action();
  26. }
  27. void Action()
  28. {
  29. switch (playSta)
  30. {
  31. case PlaySta.Move:
  32. Move();
  33. break;
  34. case PlaySta.Idle:
  35. Idle();
  36. break;
  37. case PlaySta.Death:
  38. Death();
  39. break;
  40. }
  41. }
  42. Vector3 moveDir;
  43. Vector3 lookPoint;
  44. RaycastHit hit;
  45. public float moveSpeed = ;
  46. void Move()
  47. {
  48. anim.Play("Move");
  49. transform.position += moveDir * moveSpeed * Time.deltaTime;
  50. if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit, , << ))
  51. {
  52. lookPoint = hit.point;
  53. lookPoint.y = transform.position.y;
  54. transform.LookAt(lookPoint);
  55. }
  56. if (moveDir.magnitude < 0.01f)
  57. {
  58. playSta = PlaySta.Idle;
  59. }
  60. }
  61. void Idle()
  62. {
  63. anim.Play("Idle");
  64. if (moveDir.magnitude >= 0.01f)
  65. {
  66. playSta = PlaySta.Move;
  67. }
  68. }
  69. float cd;
  70. public void Damage()
  71. {
  72. cd = ;
  73. playSta = PlaySta.Death;
  74. }
  75. void Death()
  76. {
  77. anim.Play("Death");
  78. }
  79. public void OnTriggerEnter(Collider other)
  80. {
  81. if (other.tag == "Monster")
  82. {
  83. if (cd > 0.5f)
  84. {
  85. Damage();
  86. }
  87. }
  88. }
  89. }
  1. 抛异常的用法:
  2. try:包含异常的语句
  3. try不能单独使用,要搭配catchfinally使用
  4. catch:捕获异常,可以填参数
  5. catch(Exception e){},(Exception是所有异常的基类)
  6. finally:最后都会执行,作为替补收尾工作,
  7. 无论如何都会执行,即使前面有return
  8. 结果:输出“捕获到了异常”,而“”不会输出

树BlendTree
在外边不能播动画
里面两层中心点偏移
只能改中间层

Unity3D学习笔记(十四):Animation旧动画的更多相关文章

  1. python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例

    python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...

  2. (C/C++学习笔记) 十四. 动态分配

    十四. 动态分配 ● C语言实现动态数组 C语言实现动态数组,克服静态数组大小固定的缺陷 C语言中,数组长度必须在创建数组时指定,并且只能是一个常数,不能是变量.一旦定义了一个数组,系统将为它分配一个 ...

  3. 【转】angular学习笔记(十四)-$watch(1)

    本篇主要介绍$watch的基本概念: $watch是所有控制器的$scope中内置的方法: $scope.$watch(watchObj,watchCallback,ifDeep) watchObj: ...

  4. angular学习笔记(十四)-$watch(1)

    本篇主要介绍$watch的基本概念: $watch是所有控制器的$scope中内置的方法: $scope.$watch(watchObj,watchCallback,ifDeep) watchObj: ...

  5. SharpGL学习笔记(十四) 材质:十二个材质球

    材质颜色 OpenGL用材料对光的红.绿.蓝三原色的反射率来近似定义材料的颜色.象光源一样,材料颜色也分成环境.漫反射和镜面反射成分,它们决定了材料对环境光.漫反射光和镜面反射光的反射程度.在进行光照 ...

  6. Unity3D学习笔记(四)Unity的网络基础(C#)

    一 网络下载可以使用WWW类下载资源用法:以下载图片为例WWW date = new WWW("<url>");yield return date;texture = ...

  7. Unity3D学习笔记(四):物理系统碰撞和预制体

    Rigidbody(刚体组件):加了此组件游戏物体就变成刚体了 ----Mass(质量,单位kg):重力G = 质量m * 重力加速度g(g=9.81 m/s^2) --------冲量守恒定理 动量 ...

  8. Java学习笔记十四:如何定义Java中的类以及使用对象的属性

    如何定义Java中的类以及使用对象的属性 一:类的重要性: 所有Java程序都以类class为组织单元: 二:什么是类: 类是模子,确定对象将会拥有的特征(属性)和行为(方法): 三:类的组成: 属性 ...

  9. [转]Unity3D学习笔记(四)天空、光晕和迷雾

    原文地址:http://bbs.9ria.com/thread-186942-1-1.html 作者:江湖风云 六年前第一次接触<魔兽世界>的时候,被其绚丽的画面所折服,一个叫做贫瘠之地的 ...

  10. MYSQL进阶学习笔记十四:MySQL 应用程序优化!(视频序号:进阶_32)

    知识点十五:MySQL 的应用程序优化(32) 一.访问数据库采用连接池 把连接当做对象或设备,统一放在‘连接池’里.凡是需要访问数据库的地方都从连接池里取连接 二.采用缓存减少对于MySQL的访问: ...

随机推荐

  1. SpringBoot @Transactional声明事务无效问题

    查看系统支持的存储引擎:show engines; 查看表使用的引擎:show table status from db_name where name='table_name'; 修改表引擎方法:  ...

  2. python 基础 字典

    字典操作 字典一种key - value 的数据类型 特性: 无顺序 去重 查询速度快,比列表快多了 比list占用内存多 语法: info = { 'abc001': "Ben" ...

  3. 006-springboot2.0.4 配置log4j2,以及打印mybatis的sql

    一.pom配置 普通项目 <!-- log4j2 --> <dependency> <groupId>org.apache.logging.log4j</gr ...

  4. Unity 补充安装

    当需要下载 安装Unity之时没勾选的一些组件时, 1.去Unity官网点开Unity旧版本 2.找到你的Unity版本,然后只要下载Unity安装程序 3.点开安装程序,去掉已安装组件的勾选,勾选你 ...

  5. [LeetCode] 161. One Edit Distance_Medium

    Given two strings s and t, determine if they are both one edit distance apart. Note: There are 3 pos ...

  6. Locust性能测试4-参数关联

    前言 前面[Locust性能测试2-先登录场景案例]讲了登录的案例,这种是直接传账号和密码就能登录了,有些登录的网站会复杂一点, 需要先从页面上动态获取参数,作为登录接口的请求参数,如[学信网:htt ...

  7. Selenium Webdriver——操作隐藏的元素(二)display属性

    有时候我们会碰到一些元素不可见,这个时候selenium就无法对这些元素进行操作了.例如,下面的情况: 页面主要通过“display:none”来控制整个下拉框不可见.这个时候如果直接操作这个下拉框, ...

  8. HTML 显示/隐藏DIV的技巧(visibility与display的差别)

    参考链接:http://blog.csdn.net/szwangdf/article/details/1548807 div的visibility可以控制div的显示和隐藏,但是隐藏后页面显示空白: ...

  9. c++虚函数实现机制(转)

    前言 C++中的虚函数的作用主要是实现了多态的机制.关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数.这种技术可以让父类的指针有“多种形态”,这是一种泛 ...

  10. Qt addStretch()详解

    addStretch函数,是在布局的时候用到. 函数原型: void QBoxLayout::addStretch ( int stretch = 0 ) 作用:平均分配Layout 比如: QVBo ...