接触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实现的更多相关文章

  1. 基于SketchUp和Unity3D的虚拟场景漫游和场景互动

    这是上学期的一次课程作业,难度不高但是也一并记录下来,偷懒地拿课程报告改改发上来. 课程要求:使用sketchUp建模,在Unity3D中实现场景漫游和场景互动. 知识点:建模.官方第一人称控制器.网 ...

  2. Unity3d 简单的小球沿贝塞尔曲线运动(适合场景漫游使用)

        简单的小球沿贝塞尔曲线运动,适合场景漫游使用 贝塞尔曲线:(贝塞尔曲线的基本想法部分摘自http://blog.csdn.net/u010019717/article/details/4768 ...

  3. 【Unity入门】场景编辑与场景漫游快捷键

    版权声明:本文为博主原创文章,转载请注明出处. 打开Unity主窗口,选择顶部菜单栏的“GameObject”->“3D Object”->“Plane”在游戏场景里面添加一个面板对象.然 ...

  4. Unity3d场景合并

    Unity3d场景合并 一.Unity3d场景合并,有一次的情况是这样的,就是我们是每个人都在开发,每个人有不同的场景,那么合并的时候,有些会出问题,那么我有一个好的方案,就是首先弄一个公共的资源库, ...

  5. OSG实现场景漫游(转载)

    OSG实现场景漫游 下面的代码将可以实现场景模型的导入,然后在里面任意行走,于此同时还实现了碰撞检测. 源代码下载地址: /* * File : Travel.cpp * Description : ...

  6. 【转】Unity3D 场景切换与持久化简单数据储存(PlayerPrefs类)

    本篇文章主要介绍了"Unity3D 场景切换与持久化简单数据储存(PlayerPrefs类)",主要涉及到Unity3D 场景切换与持久化简单数据储存(PlayerPrefs类)方 ...

  7. 全景视频外包团队:技术分享Unity3D全景漫游

    作者:未知 1.建模中使用的图片.文件.文件夹等以及模型中物体.材质等的名称都不能使用中文或者特殊符号,可以使用英文字母.数字.下划线等 2.调整Max的单位为米 3.烘培光影的设置 4.模型的中的植 ...

  8. unity3d 场景间数据传递

    在游戏项目中,常常会使用到用户信息,获取信息当然可以从数据库中获取.但是对场景多的游戏这样做是不正确的,那么我我们就需要再第一次获取用户信息之后, 同时在其它的场景中共享用户数据,避免对服务器增加负担 ...

  9. Unity3D 场景切换加载进度条实现

    需要三个场景,场景A,场景B,场景C: 场景A:一个按钮,点击加载场景B: 场景B:从A切换到C过度场景,加载进度条: 场景C:目标场景: 创建OnProgress.cs脚本: using Syste ...

随机推荐

  1. 如何设置打开jsp页面速度加快?

    1.

  2. mysql 用户管理 权限控制

    添加用户 insert into mysql.user(Host,User,Password) values("%","shenen",password(&qu ...

  3. jmeter接口测试实践

    一.什么是接口测试? 接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点.测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻 ...

  4. sqlloader外部表

    一创建目录 先在系统下创建 $ cd /home/oracle $ mkdir dir $ cd dir $ pwd 再在sqlplus里创建,让oracle知道这个目录 SQL> create ...

  5. wx小程序初体验

    小程序最近太火,不过相比较刚发布时,已经有点热度散去的感觉,不过这不影响我们对小程序的热情,开发之前建议通读下官网文档,附链接:https://mp.weixin.qq.com/debug/wxado ...

  6. Unity3D中如何计算场景中的三角面和顶点数

    在做游戏开发时,场景中的三角面和顶点数影响着运行效率,尤其是在手机平台上,实时的知道场景中的各项指标,对性能优化来说至关重要,下面我们来实现一个小功能,来实时计算场景中的三角面和顶点数: 如果要知道场 ...

  7. tbl.js div实现的表格控件,完全免费,不依赖jquery

    html上现在有比较好用的表格控件是datatable,但是编辑.按钮等部分是收费的,只有基础功能免费.而且尺寸发生变化时需要手工刷新等繁琐操作较多.所以我开发一个免费的供大家使用. 本项目已用于&q ...

  8. JS如何实现点击页面其他地方隐藏菜单?

    方法一: $("#a").on("click", function(e){  $("#menu").show();    $(documen ...

  9. 第七届蓝桥杯javaB组真题解析-生日蜡烛(第二题)

    题目 /* 生日蜡烛 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛. 现在算起来,他一共吹熄了236根蜡烛. 请问,他从多少岁开始过生日party的? 请填写他开始 ...

  10. MyEclipse-Initializing Java Tooling问题

    问题描述: 今天早上打开Eclipse,打开Package Explorer 中项目时,总出现卡死现象. MyEclipse状态栏显示两个任务,(1) Checking for Updates (2) ...