接触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. jq动态添加的元素触发绑定事件无效

    <div class='a'> <div class='b'> </div> 其中$('.a')是html页面的元素,$('.b')是jq动态添加的元素.$(&qu ...

  2. C# Winform窗口之间传值的多种方法浅析(转)

    摘要http://www.jb51.net/article/63837.htm 这篇文章主要介绍了C# Winform窗口之间传值的多种方法浅析,本文起讲解了通过构造器传值.通过属性传递.通过事件携带 ...

  3. Android开发:View的几种布局及实践

    引言 View的布局显示方式有下面几种:线性布局(Linear Layout).相对布局(Relative Layout).表格布局(Table Layout).网格视图(Grid View).标签布 ...

  4. 在delphi中,DLL加载时做初始化的Demo

    library DLLEntry;//dll源码 uses SysUtils, Classes, Dialogs, Windows; {$R *.res} procedure DLLEntryPoin ...

  5. C# 启动停止SQLServer数据库服务器

    C#启动停止SQL数据库服务方法之一: 在命令行里填写命令:net start/stop mssqlserver C#启动停止SQL数据库服务方法之二: 通过C#代码实现: class Program ...

  6. ubuntu下mysql二进制包安装

    1.下载对应二进制包 cd /usr/local/srcsudo wget http://dev.mysql.com/downloads/file/?id=465030 2.解压并放在/usr/loc ...

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

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

  8. spring-mvc.xml配置

    1.自动扫描 <!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 --> <context:component-scan base-pac ...

  9. Linux(Ubuntu)下载安装破解Matlab2016

    跳过废话, 直接看教程 前言 笔者平常不是很喜欢用Matlab, 因为所需要的功能都能被Python替代, 而Matlab的肥和慢实在令人难以忍受. 在Linux系统下安装Matlab也比Window ...

  10. 理解Node.js的事件轮询

    前言 总括 : 原文地址:理解Node.js的事件轮询 Node小应用:Node-sample 智者阅读群书,亦阅历人生 正文 Node.js的两个基本概念 Node.js的第一个基本概念就是I/O操 ...