纳金网
标题:
如何使用Unity制作虚拟导览(十)
[打印本页]
作者:
艾西格亚
时间:
2014-3-22 22:44
标题:
如何使用Unity制作虚拟导览(十)
如何使用Unity制作虚拟导览(一)
http://www.narkii.com/club/thread-316986-1.html
如何使用Unity制作虚拟导览(二)
http://www.narkii.com/club/thread-316987-1.html
如何使用Unity制作虚拟导览(三)
http://www.narkii.com/club/thread-317011-1.html
如何使用Unity制作虚拟导览(四)
http://www.narkii.com/club/thread-317013-1.html
如何使用Unity制作虚拟导览(五)
http://www.narkii.com/club/thread-317451-1.html
如何使用Unity制作虚拟导览(六)
http://www.narkii.com/club/thread-317503-1.html
如何使用Unity制作虚拟导览(七)
http://www.narkii.com/club/thread-317769-1.html
如何使用Unity制作虚拟导览(八)
http://www.narkii.com/club/thread-317865-1.html
如何使用Unity制作虚拟导览(九)
http://www.narkii.com/club/thread-318064-1.html
在前面的案例中我们介绍了KGFCameraSystem的多相机操作,有的朋友询问如何用代码做到类似的效果,也就是在场景内放置不同的相机位置,按下按钮后相机能平滑的移到另一个位置,或是从第三人称的视角换成不同的相机进行导览。
首先下载所需的案例文件:
Modern Interior Pack - 室内空间资源包
http://www.narkii.com/club/thread-301751-1.html
如图所示,将资源导入后,我们发现场景的烘培与贴图似乎是出了问题,导致呈现的效果与资源的图片差距甚大,原因是该作者是用了3.x烘培,导致输出后在Unity4.x发生了不匹配的情况。
2014-3-22 22:18 上传
下载附件
(289.25 KB)
解决的方法是使用Lightmapping重新烘培,将Final Gather Rays设置为200,,以避免浪费太多的渲染时间,Resolution设置为40或是50即可,按下Bake Scene进行场景的烘培。
2014-3-22 22:18 上传
下载附件
(121.3 KB)
烘培后的场景就完全正常了,将场景先保存起来,准备开始进行后续的设置工作。
2014-3-22 22:18 上传
下载附件
(281.68 KB)
在场景内设置几个相机,然后将其命名为camera1与camera2之类,相机的Depth可以不用设置顺序,这个部分完全交由脚本来控制即可。
2014-3-22 22:18 上传
下载附件
(234.91 KB)
2014-3-22 22:18 上传
下载附件
(277.08 KB)
新增一个C#脚本,将其名称设置为switchCamera,然后写入以下的代码:
using UnityEngine;
using System.Collections;
public class switchCamera : MonoBehaviour {
public Camera[] cameraList;
private int index = 0;
void Start(){
foreach (Camera cam in cameraList){
cam.enabled = false;
}
cameraList[index].enabled = true;
}
void OnGUI(){ // 设置GUI按钮来切换相机位置
if(GUI.Button (new Rect(Screen.width - 105,5,100,20),"Next Camera")){
cameraList[index].enabled = false;
index = (index +1) % cameraList.Length;
cameraList[index].enabled = true;
}
}
}
复制代码
保存代码后,增加一个空的Game Object后,将switchCamera脚本添加进来,如图所示,在Size的地方输入所有的相机数量,再将相机指定到每一个栏位。
2014-3-22 22:18 上传
下载附件
(10.2 KB)
进行测试,按下右上方的Next Camera即可切换相机的视角。
2014-3-22 22:19 上传
下载附件
(282.37 KB)
在上面的操作中,我们设置了很简单的方法来实现相机视角的切换,每点击一次即可更换一次,但是这样的视角切换显得太过于突然,我们希望通过另外一种方式来实现相机在切换时的平滑过渡。
新增一个switchCameraEasing的C#脚本,写入以下的代码:
using UnityEngine;
using System.Collections;
public class switchCameraEasing : MonoBehaviour {
public Camera[] cameraList;
public Camera cameraMaster;
private float easeSpeed = 0.125f;
private int index = 0;
void Start () {
foreach (Camera cam in cameraList){
cam.enabled = false;
}
cameraMaster.enabled = true;
}
void Update () { //每帧执行一次
cameraMaster.transform.position = Vector3.Lerp
(cameraMaster.transform.position,cameraList
[index].transform.position,easeSpeed); //相机位置的平滑过度
cameraMaster.transform.rotation = Quaternion.Lerp
(cameraMaster.transform.localRotation,cameraList
[index].transform.localRotation,easeSpeed); //相机旋转角度的平滑过度
}
void OnGUI(){
if (GUI.Button(new Rect (Screen.width - 105, 5,100, 20)
, "Next Camera")){
index = (index + 1) % cameraList.Length;
}
}
}
复制代码
将脚本添加到GameObject,然后在Size的地方设置相机的数量,Camera Master为主要移动的相机。
2014-3-22 22:19 上传
下载附件
(12.13 KB)
进行测试,在按下Next Camera进行相机切换时,相机将以平滑的过度方式移动到下一个位置,这种效果明显比switchCamera的单一切换功能来的更为生动。
2014-3-22 22:19 上传
下载附件
(282.35 KB)
2014-3-22 22:19 上传
下载附件
(234.85 KB)
2014-3-22 22:19 上传
下载附件
(261.7 KB)
更多的技术分享与讨论请加入:
纳金网
3dsmax
技术交流群 - 284146304
纳金网Unity技术交流群 - 218689657
作者:
ku
时间:
2014-3-22 22:57
不错的系列教程
作者:
hfyangyi
时间:
2014-11-22 23:03
不错的系列教程
作者:
jeyff520
时间:
2014-11-26 15:20
hfyangyi 发表于 2014-11-22 23:03
不错的系列教程
不错,谢谢分享、、。如果能显示每个场景对应的相机名称就好
作者:
oelongeo
时间:
2014-11-26 17:40
谢谢指导!
长知识了 !
欢迎光临 纳金网 (http://go.narkii.com/club/)
Powered by Discuz! X2.5