zoukankan      html  css  js  c++  java
  • iTween的用法总结

    Unity3D插件-iTween的基本用法


    本文提供全流程,中文翻译。

    Chinar坚持将简单的生活方式,带给世人!

    (拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例)




    1

    Introduce —— 基本介绍


    iTween 官网—— iTween官方文档介绍(英文薄弱,可以用“360极速浏览器”自带的谷歌翻译功能)


    推荐看下官方文档的介绍,里边的提供了键值对的解释。结合 Hash() 函数,往里边填值即可

    几乎所有 iTween 提供函数用法,都需传入对象,和一个哈希表。

    iTween 提供了一个 Hash() 函数,不用实例化哈希表,往里边一个一个Add键值对。直接Hash()函数里加入需要的键值对,来达到我们想要的效果

    这里写图片描述

    举个栗子黑白88

    iTween 支持的功能:

    这里写图片描述

    控制音频:AudioFrom、AudioTo、AudioUpdate、Stab

    控制相机:CameraFadeAdd、CameraFadeDepth、CameraFadeDestroy、CameraFadeSwap、CameraFadeFrom、CameraFadeTo、CameraTexture

    变色控制:ColorFrom、ColorTo、ColorUpdate

    绘制相关:DrawLine、DrawLineGizmos、DrawLineHandles、DrawPath、DrawPathGizmos、DrawPathHandles

    淡入淡出:FadeFrom、FadeTo、FadeUpdate

    视角控制:LookFrom、LookTo、LookUpdate、LookType

    移动控制:MoveAdd、MoveBy、MoveFrom、MoveTo、MoveUpdate

    路径操作:PutOnPath、PointOnPath

    旋转操作:RotateAdd、RotateBy、RotateFrom、RotateTo、RotateUpdate

    缩放操作:ScaleAdd、ScaleBy、ScaleFrom、ScaleTo、ScaleUpdate

    震动控制:ShakePosition、ShakeRotation、ShakeScale

    其他:Count、PathLength、EaseType(动画过度类型)、FloatUpdate、Hash、Init、Pause、Resume、Stop、StopByName、PunchPosition、PunchRotation、PunchScale、RectUpdate、ValueTo、Vector2Update、Vector3Update



    2

    EaseType —— 缓冲函数


    iTween 中定义了许多 EaseType 类型

    是不同的 贝赛尔曲线 函数 :实现不同的过渡效果

    这里都不一一列举,如果需要测试自己想要的效果,而又不知道该使用哪个函数。

    可以看下网络大神提供的网站势力,一目了然↓

    举个栗子黑白88

    曲线实例图解

    球体运动图解
    这里写图片描述


    3

    Hashtable Usage —— 哈希表的用法


    Hash() —— 哈希函数中的键值对顺序随意,但 必须按照官方要求去写,是固定的
    举个栗子黑白88

    using UnityEngine;
    
    
    /// <summary>
    /// 测试iTween——哈希表类
    /// </summary>
    public class TEST1 : MonoBehaviour
    {
        public GameObject      TargetGameObject; //目标物体:添加目标物体到inspector面板中
        public float           Time = 2;         //过渡时间
        public iTween.EaseType ITweenType;       //过渡动画曲线类型:可以外部调节
    
    
        /// <summary>
        /// 更新函数
        /// </summary>
        void Update()
        {
            if (Input.GetMouseButtonDown(0)) //如果点击鼠标左键
            {
                //iTween.MoveTo(TargetGameObject, new Vector3(3, 3, 3), Time); //移动(目标物体,目标位置,时间)
    
    
                //Hashtable args = new Hashtable();                 //实例化一个哈希表对象
                //args.Add("x",                3);                  //添加x坐标:3
                //args.Add("time",             2);                  //时间为:2秒
                //args.Add("delay",            0.1);                //延时:0.1秒
                //args.Add("oncomplete",       "onupdatefunction"); //动画结束时:回调函数
                //args.Add("oncompletetarget", gameObject);         //调用目标物体,脚本的 完成方法 onpupdatefunction
                //args.Add("looptype",         "pingpong");         //过度动画类型:来回动画(可自己定义,根据iTween提供的贝塞尔曲线函数,来达到想要的效果)
                //iTween.MoveTo(TargetGameObject, args);            //移动物体(目标物体,哈希表)
    
    
                //和上边方式一模一样,用iTween的Hash()函数,直接添加即可
                iTween.MoveTo(TargetGameObject,iTween.Hash("looptype", "pingpong", "oncompletetarget", gameObject, "oncomplete", "onupdatefunction", "delay", 0.1,"x", 3, "time", 2, "easetype", ITweenType));
            }
    
    
            if (Input.GetMouseButtonDown(1)) //如果点击鼠标右键
            {
                TargetGameObject.transform.position = Vector3.zero; //把物体位置归零
            }
        }
    
    
        /// <summary>
        /// 打印数字:名字自定义
        /// </summary>
        private void onupdatefunction()
        {
            print("动画完毕");
        }
    }

    这里写图片描述


    4

    Example —— 例子1- - 抛物线运动


    这是一个官方的例子,照着写的

    MoveTo —— 移动到指定坐标

    MoveBY —— 在自身的基础上,做增量移动

    举个栗子黑白88

    using UnityEngine;
    
    
    /// <summary>
    /// 球体自身挂载的脚本
    /// </summary>
    public class MySphere : MonoBehaviour
    {
        public  Vector3         TargetPos;     //目标位置
        private GameObject      Sphere;        //子物体 圆球的位置
        public  iTween.EaseType ShangEaseType; //上过度动画的类型
        public  iTween.EaseType XiaEaseType;   //下过度动画的类型
    
    
        /// <summary>
        /// 初始化方法
        /// </summary>
        void Start()
        {
            Sphere = transform.Find("Sphere").gameObject;                                                                             //找到球体预设物的子物体:Sphere
            iTween.MoveTo(gameObject, iTween.Hash("time", .7,  "position", TargetPos, "easetype", iTween.EaseType.easeOutCubic));     //移动到青色球所在的位置
            iTween.FadeTo(gameObject, iTween.Hash("time", .5,  "delay",    3,         "alpha",    0, "onComplete", "DestroyTarget")); //修改透明度
            iTween.MoveBy(Sphere, iTween.Hash("time",     .35, "y",        5,         "easetype", ShangEaseType));                    //移动球体预设物子物体Sphere 相对位置 y轴 到5:即向上移动
            iTween.MoveBy(Sphere, iTween.Hash("delay",    .35, "time",     .35,       "y",        -5, "easetype", XiaEaseType));      //向下移动,并调用方法
            //MoveBY是在自身的基础上,做增量移动
            //MoveTo是移动到指定坐标
        }
    
    
        /// <summary>
        /// 删除物体
        /// </summary>
        private void DestroyTarget()
        {
            Destroy(gameObject); //删除物体
        }
    }

    using UnityEngine;
    
    
    /// <summary>
    /// 测试脚本——球体运动类,挂在空物体
    /// </summary>
    public class Test_1 : MonoBehaviour
    {
        public GameObject SphereGameObject; //球体预设物
        public Transform  CyanTransform;    //中心球体的位置:青色球体位置
    
    
        /// <summary>
        /// 更新函数
        /// </summary>
        void Update()
        {
            RaycastHit hitinfo;                                                        //碰撞对象
            Ray        ray        = Camera.main.ScreenPointToRay(Input.mousePosition); //屏幕点转射线 —— 拿到射线对象
            bool       isCollider = Physics.Raycast(ray, out hitinfo);                 //射线是否照射到碰撞对象: hitinfo —— 返回bool值
            if (isCollider && hitinfo.collider.tag == "Ground")                        //如果照射到,并且对象标签是 “Ground”(标签需要自己设定地面为"Ground")
            {
                CyanTransform.position = hitinfo.point; //移动红色物体的坐标 —— 到被照射的点上
            }
            if (Input.GetMouseButtonDown(0)) //如果点击鼠标左键
            {
                Spawn(); //调用生成方法
            }
        }
    
    
        /// <summary>
        ///  生成物体
        /// </summary>
        void Spawn()
        {
            GameObject go                         = (GameObject) Instantiate(SphereGameObject); //实例化物体
            go.GetComponent<MySphere>().TargetPos = CyanTransform.position;                     //给物体身上的脚本中的 目标位置TargetPos 赋值:青色球体的位置
        }
    }

    这里写图片描述


    支持

    May Be —— 搞开发,总有一天要做的事!


    拥有自己的服务器,无需再找攻略!

    Chinar 提供一站式教程,闭眼式创建!

    为新手节省宝贵时间,避免采坑!


    先点击领取 —— 阿里全产品优惠券 (享受最低优惠)


    1 —— 云服务器超全购买流程 (新手必备!)

    2 —— 阿里ECS云服务器自定义配置 - 购买教程(新手必备!)

    3—— Windows 服务器配置、运行、建站一条龙 !

    4 —— Linux 服务器配置、运行、建站一条龙 !





    技术交流群:806091680 ! Chinar 欢迎你的加入


    END

    本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究

    对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email: ichinar@icloud.com

    对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址

  • 相关阅读:
    浅析Python闭包
    1、Spring framework IOC容器
    springcloud 返回流案例
    foreach使用场景
    Iterator遍历集合时不可以删除集合中的元素问题
    Spring整合MyBatis配置
    Mybatis案例配置
    interrupt() interrupted() isInterruped() 区别
    4.对象关系 Map(ORM)数据访问
    3.使用 JDBC 进行数据访问
  • 原文地址:https://www.cnblogs.com/chinarbolg/p/9601469.html
Copyright © 2011-2022 走看看