您好,欢迎来到Unity之家!   unity.jb51.net 
  • 首 页
  • 你问我答
  • 当前位置:首页 > 学习培训 > Unity入门 >
    利用Animation View制作动态的GUI
    时间:2015-03-02 10:00 来源:Unity之家 作者:unity.jb51.net 浏览:收藏 挑错 推荐 打印



    利用Animation View制作动态的GUI。如果要使 GUI 动态产生位移、缩放等动态变化,

    我们只要依时间改变去计算它们的值就可以做到,这使人想到又要宣告变数并写程式,

    但是如果善用 Unity 的 Animation View,可能不需要多写任何程式码就能完成更棒的效果。


    如果想使一个按钮从左向右移,程式如下:


    public float from;
    
    public float to;
    
    public float speed = 1;
     
    public Rect position = new Rect(0,0,50,25);
     
    void Start(){
     
    position.x = from;
    }
     
    void Update(){
     
    if(position.x < to) position.x += Time.deltaTime * speed;
    }
     
    void OnGUI(){
     
    GUI.Button(position , "test");
    }


    这样虽然达到目的,但无法控制几秒内完成这个动作,那么可以利用 Unity 的 Mathf Struct 改成这样:


    public float from;
    
    public float to;
    
    public float delay = 1;
     
    public Rect position = new Rect(0,0,50,25);
     
    void Update(){
     
    if(position.x < to){
    position.x = Mathf.Lerp(from , to , t);
    t += Time.deltaTime * delay;
    }
    }
     
    void OnGUI(){
     
    GUI.Button(position , "test");
    }


    这样改变数值的位移是属於线性变化,移动起来好像有点死版,

    所以也可以把 Mathf.Lerp 改成使用 Mathf.SmoothDamp,那么数值变化会变得更圆滑一些。

    如果会使用 iTween 的人可能会觉得 iTween 的 EaseType 呈现的动态效果曲线更好,所以可能会写这个样子:


    public float from;
    
    public float to;
    
    public float sec = 1;
    
    public Rect position = new Rect(0,0,50,25);
     
    void OnGUI(){
     
    if(GUI.Button(position , "test")){
    iTween.ValueTo(gameObject,
    iTween.Hash(
    "from" , from ,
    "to" , to ,
    "onupdate" , "UpdateX" ,
    "easetype" , "easeinoutback",
    "time" , speed
    )
    );
    }
    }
     
    private void UpdateX(float x){
     
    position.x = x;
    }



    以上,只要点击按钮就可以依指定的 EaseType 效果位移。

    但是如果善用 Unity 的 Animation View 的话,这些计算都可以省下来,只要在需要动作的时候让

     Animation View 执行 Play 即可,而数值调整只要在 Animation View 中调整就好了,


    那么程式可能改成这样:


    public Rect position = new Rect(0,0,50,25);
     
    void OnGUI(){
     
    if(GUI.Button(position , "start")){
    animation.Play();
    }
    }



    而 Animation View 中只是对这个 GUI script 的 position.x 设定两个 key 所连接的直线。

    如果想要像 iTween 的 EaseType 的曲线那样变化值的话,只要为 Animation View 的直线

    添加几个 key 调整成类似的曲线,那麽就能获得类似的动态;

    而且也可以依照自己的喜好拉出特别的动作曲线,而不用受限于他人的定义。





    (责任编辑:脚印)
    免责声明:Unity之家部分内容来源于互联网,如有侵权,请联系我们,本站将立即进行处理。