AnimationCurve
来源:互联网 发布:医院诊断书生成器软件 编辑:程序博客网 时间:2024/04/30 01:43
第一部分:介绍
AnimationCurve是Unity3D里一个非常实用的功能。作用是编辑一条任意变化的曲线用在任何你想用在的地方。如曲线地形,曲线轨迹等。也被用在了模型动画播放时的碰撞盒缩放及重力调节。AnimationCurve 曲线的绘制方法和Ragespline中的物体轮廓勾勒的方法类似。
第二部分:基本使用
第一步:创建物体
第二步:创建脚本
创建AnimationCurveTutor.cs的脚本并添加到物体上。代码如下。
- using
UnityEngine; - using
System.Collections; - public
class AnimationCurveTutor : MonoBehaviour { - public
AnimationCurve anim; - }
第三步:绘制曲线
把脚本添加到物体上后,物体的Inspector面板下看到如下界面。
双击上图红色区域即进入曲线编辑界面(下图)。
双击任意区域内地方,创建关键点。对关键点点鼠标邮件,则出如下界面.
双击任意区域内地方,创建关键点。对关键点点鼠标邮件,则出如下界面.
基本操作:
创建关键点:左键双击
删除关键点:
(1)鼠标移动至关键点上,右键->Delete Key。
(2)左键单击关键点,然后按键盘上的delete
设置曲线类型:鼠标移动至关键点上,右键->
Auto:根据关键点自动设置曲线。
Free Smooth:统一设置入切线和出切线
Flat:入切线和出切线为水平
Broken:分别设置入切线和出切线
也可以选Left Tangent(入切线)或者Right Tangent(出切线)或者Both Tangents(两切线)。
Free:自由曲线,与Broken效果基本一样。
Linear:线性曲线
Constant:之前一直是上个点的值,然后瞬间变为这个点的值。
其中Auto最简单,Broken调整空间最大。曲线效果以绿线为准。
编辑好一条曲线后,在曲线的左右两端会有一个下拉菜单,点击设置两端各自重复的方式。
Loop:曲线循环
Pingpong: 曲线和该曲线上下翻转后的曲线循环
Clamp:一直为端点的值。
第四步:使用曲线
在上面的脚本里,再添加几行代码,如下
- using UnityEngine;
- using System.Collections;
- public class AnimationCurveTutor : MonoBehaviour {
- public AnimationCurve anim;
- public void Update()
- {
- transform.position = new Vector3(Time.time, anim.Evaluate(Time.time),0);
- }
- }
运行后,物体会按曲线轨迹向右移动。
第三部分:脚本创建AnimationCurve
AnimationCurve可以理解为2部分。(1)键序列(2)左右循环模式(又作左右包裹模式)
一:键序列
创建键序列:Keyframe[] ks =
曲线中加入键序列:AnimationCurve
获取曲线中的键序列:curve[index]
添加单键:curve.Addkey(time,value)
删除单键:curve.RemoveKey(index)
二:左右循环
anim.preWrapMode = WrapMode.Loop;
anim.postWrapMode = WrapMode.Once;
三:键
Keyframe kf = new Keyframe(time,value);
kf.inTangent = 45;
kf.outTangent = 45;
用脚本动态实时创建AnimationCurve。创建如下脚本,拖到任意物体运行即可。
- using UnityEngine;
- using System.Collections;
- public class CreateRuntime : MonoBehaviour {
-
-
void Start() { -
Keyframe[] ks = newKeyframe[3]; -
ks[0] = new Keyframe(0, 0); -
ks[0].inTangent = 0; -
ks[1] = new Keyframe(4, 0); -
ks[1].inTangent = 45; -
ks[2] = new Keyframe(8, 0); -
ks[2].inTangent = 90; -
anim = new AnimationCurve(ks); -
} -
void Update() { -
transform.position = new Vector3(Time.time, anim.Evaluate(Time.time), 0); -
} - }
第四部分:编辑器的AnimationCurve
创建EditorCurves.cs及FollowAnimationCurveMine.cs脚本如下。
使用时,先选中物体,再点击Unity菜单栏Examples->Mine,编辑好曲线后点击Generate Curve,之后运行即可。
- using UnityEngine;
- using System.Collections;
- using UnityEditor;
- public classEditorCurves :EditorWindow{
- AnimationCurve curveX = AnimationCurve.Linear(0,0,10,10);
- [MenuItem("Examples/Mine")]
- static voidInit()
- {
- EditorWindow window = GetWindow(typeof(EditorCurves));
- window.position = new Rect(0,300,200,100);
-
- }
- void OnGUI()
- {
-
- if(GUI.Button(newRect(3,60,position.width-6,30),"Generate Curve"))
-
ject(); - }
- void AddCurveToSelectedGameOb
ject() - {
- if(Selection.activeGameObject) {
-
comp = Selection.activeGameObject.AddComponent<FollowAnimationCurveMine >(); -
-
-
-
- }
- }
- using UnityEngine;
- using System.Collections;
- public classFollowAnimationCurveMine
: MonoBehaviour { - public AnimationCurvecurveX;
- public voidSetCurves(AnimationCurvetmpCurve)
- {
- curveX = tmpCurve;
- }
- void Update () {
- if(curveX !=null)
-
- }
- }
风宇冲Unity3D 转自
0 0
- AnimationCurve
- AnimationCurve
- AnimationCurve
- AnimationCurve
- AnimationCurve
- AnimationCurve
- AnimationCurve
- Unity之AnimationCurve
- AnimationCurve曲线简单使用
- Unity的AnimationCurve
- U3D之AnimationCurve
- Unity 动画曲线-AnimationCurve 实例
- Unity3D教程宝典之 AnimationCurve
- 用AnimationCurve制作Tween动画
- Unity3D之 AnimationCurve 动画曲线
- Unity3d对于AnimationCurve的相关研究
- unity使用AnimationCurve实现RPG中攻击与受伤时的分数的动态效果ScoreFlash
- Android的国际化
- Unity3d-常用插件
- 调用Android系统相机出现问题
- Eclipse开启代码自动提示功能
- eclipse快捷键
- AnimationCurve
- Memcached安装设置
- bootstrap的timepicker控件问题
- 用结构计算N个有理数的平均值
- 10年第六届湖南省acm程序设计大赛 第三题 C 数字整除
- Java短信发送平台代码
- js 获取 URL 参数
- 第16周项目1--数组的排序(指针)
- 微机实验之电子琴制作