http://blog.sina.com.cn/s/blog_471132920101f8nv.html

说明:
关于animationCurve的使用总结
1 创建,可以新建脚本,创建animationCurve变量,然后直接在脚本上手动拖动可视化创建曲线,也可以用代码创建(这种比较不直观)

2 使用,anim.Evaluate(Time.time)

3 存储,编辑器手动创建曲线,然后代码中读取各项key数据,二进制保存起来,用的时候再读取

原创文章如需转载请注明:转载自风宇冲Unity3D教程学院


                   AnimationCurve

第一部分:介绍
第二部分:基本使用
第三部分:脚本创建AnimationCurve
第四部分:编辑器里的AnimationCurve

第一部分:介绍
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 = new Keyframe[3];

曲线中加入键序列:AnimationCurve curve = new AnimationCurve(ks);

获取曲线中的键序列:curve[index]   或者 curve.keys[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 {
public AnimationCurve anim = new AnimationCurve();
void Start() {
Keyframe[] ks = new Keyframe[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,之后运行即可。


  1. using UnityEngine;
    using System.Collections;
    using UnityEditor; public class EditorCurves :EditorWindow {
    AnimationCurve curveX = AnimationCurve.Linear(0,0,10,10);
    [MenuItem("Examples/Mine")]
    static void Init()
    {
    EditorWindow window = GetWindow(typeof(EditorCurves));
    window.position = new Rect(0,300,200,100);
    window.Show();
    }
    void OnGUI()
    {
    curveX = EditorGUI.CurveField(new Rect(3,3,position.width-6,15), "Animation on X", curveX);
    if(GUI.Button(new Rect(3,60,position.width-6,30),"Generate Curve"))
    AddCurveToSelectedGameObject();
    }
    void AddCurveToSelectedGameObject()
    {
    if(Selection.activeGameObject) {
    FollowAnimationCurveMine comp = Selection.activeGameObject.AddComponent<FollowAnimationCurveMine>();
    comp.SetCurves(curveX);
    } else {
    Debug.LogError("No Game Object selected for adding an animation curve");
    }
    }
    }

    using UnityEngine;
    using System.Collections; public class FollowAnimationCurveMine : MonoBehaviour {
    public AnimationCurve curveX;
    public void SetCurves(AnimationCurve tmpCurve)
    {
    curveX = tmpCurve;
    }
    void Update () {
    if(curveX != null)
    transform.position = new Vector3(1f*Time.time, curveX.Evaluate(Time.time) * 0.3f,0);
    }
    }

AnimationCurve的更多相关文章

  1. Unity利用AnimationCurve做物体的各种运动

    ​之前一直都是自己学习Unity各种做Demo,最近开始正式使用Unity来做一个款2d的游戏. 其中在做一个类似小球弹跳运动的时候遇到了点问题,查找了很多资料,无意间发现AnimationCurve ...

  2. Unity的AnimationCurve

    转自:风宇冲Unity3D教程学院http://blog.sina.com.cn/s/blog_471132920101f8nv.html,本文有多处增删减改,详细内容请查看原文. 1.介绍 Anim ...

  3. iOS 系统数字键盘左下角加确定按钮

    首先在 viewWillAppear 方法中注册监听相应的键盘通知,并且要在 viewWillDisappear 方法中注销通知- (void)viewWillAppear:(BOOL)animate ...

  4. 使用javascript生成的植物显示过程特效

    查看效果:http://keleyi.com/keleyi/phtml/html5/33.htm .NET版本:http://keleyi.com/a/bjac/66mql4bc.htm 完整HTML ...

  5. iOS8.3发布了Swift 1.2带来哪些新变化

    苹果前几日在面向开发者推送iOS 8.3 Beta的同时,还发布了版本号为6D520o的Xcode 6.3 Beta,其中便包含了iOS 8.3 Beta和OS X v10.10 SDK,并进一步提升 ...

  6. 使用 Sublime Text 2 开发 Unity3D 项目

    用 Sublime 已经有很长一段时间,很舒适,很贴心,根本停不下来.之前因为是开发页游,所以是用 AS3 开发,近段时间,新开了个手游项目,引擎方面选定了 Unity3D,老实说,之前没有太多的 3 ...

  7. Unity3D 第一人称控制器 C#脚本

    CharacterMotor.cs using UnityEngine; using System.Collections; /** * @Author : www.xuanyusong.com */ ...

  8. 转一篇Unity的相机动画控制

    最近真是忙,连研究细看的时间都没有了,原帖地址:https://alastaira.wordpress.com/2013/11/08/smooth-unity-camera-transitions-w ...

  9. [转]unity3d 脚本参考-技术文档

    unity3d 脚本参考-技术文档 核心提示:一.脚本概览这是一个关于Unity内部脚本如何工作的简单概览.Unity内部的脚本,是通过附加自定义脚本对象到游戏物体组成的.在脚本对象内部不同志的函数被 ...

随机推荐

  1. JVM GC调优一则--增大Eden Space提高性能

    版权声明:本文为横云断岭原创文章,未经博主同意不得转载.微信公众号:横云断岭的专栏 https://blog.csdn.net/hengyunabc/article/details/24924843 ...

  2. ME11创建信息记录 Function

    转自 http://blog.csdn.net/zeewjj/article/details/7941530  CALL FUNCTION 'ME_DIRECT_INPUT_INFORECORD' D ...

  3. 第一个Vert.x程序

    Jar依赖 <dependency> <groupId>io.vertx</groupId> <artifactId>vertx-core</ar ...

  4. Java for LeetCode 096 Unique Binary Search Trees

    Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...

  5. CentOs7 配置nfs 系统

    一.介绍 NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,功能是让客户端通过网络访问不同主机上磁盘里的数据,主要用在类Unix系统上实现文件共享 ...

  6. Codeforces 872C Maximum splitting:数学【分解成合数之和】

    题目链接:http://codeforces.com/contest/872/problem/C 题意: 给你一个数n,问你最多能将n分解成多少个合数之和.(若不能分解,输出-1) 题解: 若要让合数 ...

  7. Luke 5—— 可视化 Lucene 索引查看工具,可以查看ES的索引

    Luke 5 发布,可视化 Lucene 索引查看工具  oschina 发布于2015年08月31日  这是一个主要版本,该版本支持 Lucene 5.2.0. 它支持 elasticsearch ...

  8. listen 56

    Kettles Stop Whistling in the Dark British physicist Lord Rayleigh is best known for his discovery o ...

  9. Hover show tips

    像上面这种效果,hover1时显示2,且1和2有一定间距的东东,一般有两种实现办法: 1.用JS,原理:over1时让2显示,out1时开个定时器延迟500ms再消失,over2时清除定时器,out2 ...

  10. POJ2657Comfort(扩展欧几里得基础)

    A game-board consists of N fields placed around a circle. Fields are successively numbered from1 to ...