Unity3d场景漫游---iTween实现

接触U3D以来,我作过的场景漫游实现方式通常有如下几种:

  • Unity3d中的Animation组件,经过设置摄像机的关键点实现场景漫游
  • 第一人称或第三人称控制器
  • 编写摄像机控制脚本
  • iTween
iTween实现相对来讲比较简单,并且动画效果很是好,所以是我作场景漫游的首选,下面我来总结一下iTween作场景漫游的具体实现

简单作了个小demo如图:函数

scene.png
我在场景中建了4个空物体做为路径点,摄像机从一个路径点到下一个路径点循环往复,当按下空格键后,漫游会暂停,松开后继续,代码符合我一向的风格,注释很详细,我就很少解释了.oop

涉及到的代码绑在摄像机上面,以下:

using UnityEngine;
using System.Collections;

public class TweenRoam : MonoBehaviour
{

    public Transform[] paths;  //路径寻路中的全部的关键点 使用空物体路径点 
    //public Vector3[] paths;  //也可使用这句代码直接给路径点的位置赋值
    public Hashtable args;   //设置路径键值对
    public float m_speed = 10f;  //漫游的速度
    public bool isMove = true;  //是否漫游
    
    void Start()
    {
        args = new Hashtable();

        args.Add("path", paths);  //设置路径的点  

        args.Add("easeType", iTween.EaseType.linear);  //设置类型为线性,线性效果会好一些。  

        args.Add("speed", m_speed);  //设置寻路的速度  

        args.Add("movetopath", false);   //是否先从原始位置走到路径中第一个点的位置  

        args.Add("orienttopath", true);//是否让模型始终面朝当面目标的方向,拐弯的地方会自动旋转模型,若是你发现你的模型在寻路的时候始终都是一个方向那么必定要打开这个  

        args.Add("looktarget", Vector3.zero);   //移动过程当中面朝一个点  

        args.Add("loopType", "loop");   //三个循环类型 none loop pingpong(通常 循环 来回)  

        args.Add("NamedValueColor", "_SpecColor");  //这个是处理颜色的。能够看源码的那个枚举。  

        args.Add("delay", 0f);   //延迟执行时间  

        iTween.MoveTo(gameObject, args);   //让模型开始寻路  这个方法和放在Update函数里的MoveUpdate()方法效果同样  Update里为了控制是否移动    
    }

    void Update()
    {
       RoamControl();
    }

    /// <summary>
    /// 控制动画暂停和继续的函数
    /// </summary>
    void RoamControl()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            iTween.Pause();
        }
        if (Input.GetKeyUp(KeyCode.Space))
        {
            iTween.Resume();
        }
    }

    void OnDrawGizmos()
    {
        //在Scene视图中绘制出路径  
        iTween.DrawLine(paths, Color.yellow);
        iTween.DrawPath(paths, Color.red);
    }
}

Demo源码地址: http://pan.baidu.com/s/1jIulQpo动画

注意:代码绑定到摄像机上后要给paths指定路径,或者用vector那句直接赋值也能够3d

关于iTween的其余知识点

  • iTween.MoveTo(): 让模型移动到一个位置,它的底层函数是经过动态的修改模型每一帧的transform.position完成的,因此它会百分之百到达目标点,不会出现偏差。code

  • iTween.MoveFrom():它和上面的同样,iTween.MoveTo()是将模型移动到目标位置,而iTween.MoveFrom()是将模型从目标位置移动到原始位置。orm

  • iTween.MoveAdd() 和iTween.MoveBy()底层实现同样,你们能够去看源码。处理移动时采用的是transform.Translate也就是API的平移,这样在处理移动的时候可能会出现一些偏差,可是效果好点。blog

  • iTween.MoveUpdate():和iTween.MoveTo()差很少,只是它须要放在循环或者Update()中。
  • iTween.Pause(); 暂停
  • iTween.Resume();恢复get

相关文章
相关标签/搜索