Unity3d场景漫游---iTween实现
2017-03-06 18:59
351 查看
接触U3D以来,我做过的场景漫游实现方式一般有以下几种:
Unity3d中的Animation组件,通过设置摄像机的关键点实现场景漫游第一人称或第三人称控制器
编写摄像机控制脚本
iTween
iTween实现相对来说比较简单,而且动画效果非常好,因此是我做场景漫游的首选,下面我来总结一下iTween做场景漫游的具体实现
简单做了个小demo如图:
我在场景中建了4个空物体作为路径点,摄像机从一个路径点到下一个路径点循环往复,当按下空格键后,漫游会暂停,松开后继续,代码符合我一贯的风格,注释很详细,我就不多解释了.
涉及到的代码绑在摄像机上面,如下:
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那句直接赋值也可以
关于iTween的其他知识点
iTween.MoveTo(): 让模型移动到一个位置,它的底层函数是通过动态的修改模型每一帧的transform.position完成的,所以它会百分之百到达目标点,不会出现误差。iTween.MoveFrom():它和上面的一样,iTween.MoveTo()是将模型移动到目标位置,而iTween.MoveFrom()是将模型从目标位置移动到原始位置。
iTween.MoveAdd() 和iTween.MoveBy()底层实现一样,大家可以去看源码。处理移动时采用的是transform.Translate也就是API的平移,这样在处理移动的时候可能会出现一些误差,但是效果好点。
iTween.MoveUpdate():和iTween.MoveTo()差不多,只是它需要放在循环或者Update()中。
iTween.Pause(); 暂停
iTween.Resume();恢复
相关文章推荐
- Unity3D插件之iTween&iTweenPath:实现自动漫游
- OSG实现场景漫游
- Unity3D自然景貌的创建与场景漫游
- unity3d实现场景小地图制作
- Unity3D中通过NGUI实现的场景跳转
- 利用Opengl实现类似于角色漫游的场景
- [Unity3D]Unity3D游戏开发之异步记载场景并实现进度条读取效果
- unity3d实现场景截图
- Unity3D之NGUI的5种点击事件的实现方式及在3D场景中点透的情况
- 基于SketchUp和Unity3D的虚拟场景漫游和场景互动
- [Unity3D]使用触发器实现简单的场景跳转
- [Unity3D]Unity3D游戏开发之异步记载场景并实现进度条读取效果
- [Unity3D]Unity3D游戏开发之基于ITween实现寻路功能
- unity3d实现Loading进度条异步加载场景
- unity3d实现相机对场景物体的旋转、缩放、平移查看功能、近似于scene下查看场景的效果
- OpenGL实现场景漫游(Qt版)
- 如何实现unity3d建筑场景中灯光效果
- Unity3D 4.61 实现淡入淡出的场景过渡方法。
- 使用Unity3D 自主实战开发的赛车游戏实例,关键点记录 (二)之地形场景漫游导览制作
- Unity3D:按钮实现场景的跳转