今天学习了unity—动画,掌握了基本要领,每天早上要拿出三十分钟时间看笔记呦!!!
每日一句:接受普通的自己,然后拼尽全力去与众不同,
生活给你压力就还它奇迹,追逐光、成为光、散发光!
目录
查找最近的敌人(习题:续)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FindEnemyByMinDistance : MonoBehaviour
{
void OnGUI()
{
if (GUILayout.Button("查找距离最近的敌人"))
{
//查找场景中所有Enemy类型的引用
EnemyDemo[] allEnemy = Object.FindObjectsOfType<EnemyDemo>();
EnemyDemo min=FindEnemyMinDistance(allEnemy);
min.GetComponent<MeshRenderer>().material.color = Color.red;
}
}
public EnemyDemo FindEnemyMinDistance(EnemyDemo[] allEnemy)
{
EnemyDemo min = allEnemy[0];
float minDistance = Vector3.Distance(this.transform.position, min.transform.position);
for (int i = 1; i < allEnemy.Length; i++)
{
float newDistance = Vector3.Distance(this.transform.position, allEnemy[i].transform.position);
if (minDistance > newDistance)
{
min = allEnemy[i];
minDistance = newDistance;
}
}
return min;
}
}
动画animation
Animation View
通过动画视图可以直接创建和修改动画片段(Animation Clips)
显示动画视图:Window—>Animation
创建动画片段
为物体添加Animation组件
在动画视图中创建片段(点击Creat)
录制动画片段
点击录制按钮
点击Add Property,选择组件类型
调整时间点
在关键帧设备属性(双击可增加关键帧)
任何组件以及材质的属性都可进行动画处理,即使是自定义脚本组件的公共变量
时间线
可以单击时间线上的任何位置预览或修改动画片段
数字显示为秒数和帧数(60帧为1秒)
例如:1:30表示1秒和30帧
(当前目标片段播放哪个)
常用API函数
bool isPlay=animation.isPlaying;
bool isPlay=animation.IsPlaying(“动画名”);
目前是否正在播放动画?
animation.Play(“动画名”);
播放没有混合的动画。
animation.PlayQueued(“动画名”);
在先前的动画播放完毕后再播放动画。
Animation.CrossFade(“动画名”);
在后续 time 秒的时间段内,使名称为 animation 的动画淡入,使其他动画淡出。
Animation[“动画名”].speed=-1(倒着播)/0/1/2;
animation[“动画名”].wrapMode=WrapMode.PingPong;
应如何处理超出此剪辑播放范围的时间?
animation[“动画名”].length;
animation[“动画名”].time;
需求:开门关门的动画
代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyDemo : MonoBehaviour
{
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class doorDemo : MonoBehaviour
{
public bool doorState = false;//默认关门状态:开门操作
public string animName = "door";
private Animation anim;//为了找动画组件
// Start is called before the first frame update
void Start()
{//找引用
anim = GetComponent<Animation>();
}
// Update is called once per frame
void OnMouseDown()
{
//如果开门状态
if(doorState)//如果ture
{
//关门操作:倒放
if(anim.isPlaying==false)
{
//从最后开始
anim[animName].time = anim[animName].length;
}
anim[animName].speed = -1;
}
else
{
//开门操作:正播放
anim[animName].speed = 1;
}
anim.Play(animName);
doorState = !doorState;//动画播放了,状态就得改
}
}