美文网首页
Itween制作物体随机移动的效果

Itween制作物体随机移动的效果

作者: xiaoxingyun | 来源:发表于2016-10-14 00:26 被阅读97次

    用ITween这个插件制作物体的各种运动效果很方便,而且可以描述的运动种类很多,下面是一个用它实现某个物体随机运动的例子,可以调节的参数有物体运动的速度,物体主要朝哪个方向运动,物体随机的范围,运动的坐标系。

    public class RandomMove:MonoBehaviour
    {
        public float intervalTime;//每次移动间隔的时间
        public Vector3 dir;//运动的主方向
        public Vector3 bounds;//随机运动的边界
        [Tooltip("Dont modify at runtime")]
        public bool localPos=true;//Itween 的一个参数,是否是本地坐标
        public Itween.EaseType easeType=Itween.EaseType.easeInOutQuad;
        
        private bool move=false,stopped=true;
        private Vector3 initialPos;//记录物体的初始位置
        
        void Start()
        {
            initialPos=getPos();
        }
    
        void ItweenMove(Vector3 nextPos)
        {
           Hashtable ha=new Hashtable();
           ha.Add("position",nextPos);//运动的目标位置
           ha. Add("islocal",localPos);
           ha.Add("time",intervlTime);//每次运动的时间
           ha.Add("eastype",easeType);
           iTween.MoveTo(gameObject,ha);
        }
    
        //重置物体的位置
        //这个函数是在Inspector的脚本中加一个触发事件,就是Inspector上脚本右侧那个小下拉菜单中
        [ContexMenu("Reset Pos")]
        public void ResetPos()
         {
            if(localPos)
            {
              transform.localPosition=initialPos;
            }
           else
           {
             transform.position=initialPos;
           }
         }
    
        void OnEnable()
        {
          move=true;
          if(stopped)
          StartCoroutine(MoveToPos());
        }
        void OnDisable()
        {
          move=false;
        }
    
        IEnumerator MoveToPos()
        {
          stopped =false;//用stopped判断协程是否开始,结束,如果stopped为false,说明协程正在运行,此时不能再startCoroutine(),否则会发生错误。
          Vector3 nextPos=getPos();
          while(move)
          {
            float randomX=Random.Range(-bounds.x,bounds.x);
            float randomY=Random.Range(-bounds.y,bounds.y);
            float randomZ=Random.Range(-bounds.z,bounds.z);
    
            nextPos+=new Vector3(randomX,randomY,randomZ);
            ItweenMove(nextPos);
            yield return new WaitForSeconds(intervalTime);
          }
          stopped=true;
        }
      //返回物体的localPosition||position
      Vector3 getPos()
      {
        return localPos?transform.localPosition:transform.position;
      }
    }
    

    相关文章

      网友评论

          本文标题:Itween制作物体随机移动的效果

          本文链接:https://www.haomeiwen.com/subject/nmlgyttx.html