- 最后登录
- 2024-11-17
- 注册时间
- 2012-8-10
- 阅读权限
- 100
- 积分
- 74994
![Rank: 7](static/image/common//star_level3.gif) ![Rank: 7](static/image/common//star_level2.gif) ![Rank: 7](static/image/common//star_level1.gif)
- 纳金币
- 59338
- 精华
- 28
|
如何使用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发生了不匹配的情况。
解决的方法是使用Lightmapping重新烘培,将Final Gather Rays设置为200,,以避免浪费太多的渲染时间,Resolution设置为40或是50即可,按下Bake Scene进行场景的烘培。
烘培后的场景就完全正常了,将场景先保存起来,准备开始进行后续的设置工作。
在场景内设置几个相机,然后将其命名为camera1与camera2之类,相机的Depth可以不用设置顺序,这个部分完全交由脚本来控制即可。
新增一个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的地方输入所有的相机数量,再将相机指定到每一个栏位。
进行测试,按下右上方的Next Camera即可切换相机的视角。
在上面的操作中,我们设置了很简单的方法来实现相机视角的切换,每点击一次即可更换一次,但是这样的视角切换显得太过于突然,我们希望通过另外一种方式来实现相机在切换时的平滑过渡。
新增一个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为主要移动的相机。
进行测试,在按下Next Camera进行相机切换时,相机将以平滑的过度方式移动到下一个位置,这种效果明显比switchCamera的单一切换功能来的更为生动。
更多的技术分享与讨论请加入:
纳金网3dsmax技术交流群 - 284146304
纳金网Unity技术交流群 - 218689657
|
|