多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## **animator与animation** **animation**:这是遗留的动画组件,在Unity当前动画系统引入之前,它被用于游戏对象的动画目的。 这个组件被保留在Unity中,只是为了向后兼容。对于新项目,请使用Animator组件 要导入旧版动画,必须先在mport Settinas窗口的Big选项卡中将Animation Type设置为Legacy: ## 属性 | ***属性:*** | ***功能:*** | | --- | --- | | **Animation** | 自动播放时将播放的默认动画(必须要指定动画)| | **Animations** | 可以从脚本访问的动画列表. | | **Play Automatically** |设置动画应该在游戏开始时自动播放与否 | | **Animate Physics** | 动画应该与物理相互作用吗? | | **Culling Type** | 确定何时不播放动画 | |         **Always Animate** | 始终播放动画. | |         **Based on Renderers** | 基于默认动画姿态进行筛选. | |         **Based on Clip Bounds** | 基于剪辑边界的剔除(在导入期间计算),如果剪辑边界不在视图中,动画将不会播放. | |         **Based on User Bounds** |根据用户定义的边界进行剔除,如果超出了用户定义的边界,则将不会播放动画 | 1、选中需要添加动画的那个物体,在Inspector面板创建animation组件,然后勾选play Automatically(要先做这一步,否则下面create创建的是新版动画) 2、选择window--->animation 调出animation面板 3、选中需要添加动画的那个物体,然后点击animation面板的Create 创建动画文件; 点击录制动画:注意录制后![](https://img.kancloud.cn/27/d4/27d4dbf0e5a33bf527d590c816abe8c8_130x35.png)是红色的 点击`Add Property ` 添加类型 选择Transform/Rotation(这里我们做一个简单的旋转动画所以选Rotation) ![](https://img.kancloud.cn/5b/48/5b489af71f348d9567724ab11113d48e_175x30.png) 点击红框的三角选择关键帧,默认有两个关键帧(可以左键双击添加关键帧),每关键帧设置不同的y的角度数,它们会在指定的时间类连续起来 ![](https://img.kancloud.cn/94/bb/94bb23c3237dc8c428579252d3cb7d2c_529x78.png) 为了兼容下面脚本的开门关门我们只保留两个关键帧开门和关门的状态 ![](https://img.kancloud.cn/e3/aa/e3aa9f2104988add34280af3a2a8398e_485x108.png) 还可以点击下面Curves的切换为曲线图来修改 ![](https://img.kancloud.cn/14/7f/147f441a0dbe8b7b79c4dba3aeeb94f2_301x86.png) 将动画文件拖进animation组件的Animation选项里 ![](https://img.kancloud.cn/32/78/3278a73cf24221e69fc5c3824985c479_360x222.png) 运行查下看效果 接下来脚本操作点击们打开,在点级关上的效果 创建名为Door脚本,注意动画的名要与这脚本的名一致,否则会报错 将此脚本拖到实现动画的这个门上 ``` using UnityEngine; using System.Collections; /// <summary> /// /// </summary> public class Door : MonoBehaviour { public bool doorStatus = false; public string animName = "Door";//动画名和脚本的名称必须相同 private Animation anim; // Use this for initialization private void Start() { anim = GetComponent<Animation>(); } private void OnMouseDown() { Debug.Log(anim); anim[animName].speed = -1; // if (doorStatus) { //很容易漏掉这一步 //anim[animName].time = 1; if (anim.isPlaying==false)//动画没播的时候才从头开始播 { // 关门时-1是倒着播的 不指定就是0~0 anim[animName].time = anim[animName].length; } //关门操作 anim[animName].speed = -1; } else { //开门操作 开门的时候本身默认就是从0开始的 从0秒播放到动画长度的秒数 anim[animName].speed = 1; } anim.Play(animName); doorStatus = !doorStatus; } } ``` 点击运行,在Game面板点击门查看效果