10. 将摄像机对准物体,并显示整个对准过程,摄像机Zoom
1. 如果把代码放到按钮事件中调用,达不到想要的效果
2. 可以不用委托,但是要在Update函数中写调用CameraZoonIn的代码
3. 有很多需要改进的地方,可以参考使用 iTween 插件达到更好的效果
using UnityEngine;
using System.Collections; public class test : MonoBehaviour
{ public delegate void dgCameraCompleted(Vector3 pos, Vector3 rot);
public dgCameraCompleted CameraCompleted; public Camera currentCamera; //摄像机 public static float originFov; //源视野 private Vector3 posStart;
private Vector3 rotStart;
private static Vector3 posEnd;
private static Vector3 rotEnd;
private static Vector3 dPos;
private static Vector3 dRot; public static bool cameraIsMoving = false;
// 摄像机当前的状态 zoom in or out
public static bool cameraIsZoomIn = false; public static float minFov = 5f;
public static float maxFov = 90f;
public static float sensitivity = 10f;
private int i = 0; // 通过帧数控制摄像机移动的速度
private static int closeFrames = 70; Vector3 posBe, rotBe;
private static Vector3 localPositionOrigin;
private static Vector3 localRotationOrigin; public GameObject target;
void Start()
{
localPositionOrigin = currentCamera.transform.localPosition;
localRotationOrigin = currentCamera.transform.localEulerAngles; originFov = currentCamera.fieldOfView; //目标位置
posBe = target.transform.position + new Vector3(-0.06f, 0.38f, -0.06f);
rotBe = new Vector3(94f, 270f, 0f);
} private void Update()
{
if (CameraCompleted != null)
{
CameraCompleted(posBe, rotBe); }
// 照相机从源到目标
if (cameraIsZoomIn)
{
if (cameraIsMoving)
{
i++;
// 摄像机每帧移动固定的位置和角度,closeFrames帧后到达目标位置
currentCamera.transform.position += dPos;
currentCamera.transform.eulerAngles += dRot; if (i == closeFrames)
{
cameraIsMoving = false;
i = 0;
}
}
} // 通过滑轮控制视野大小
else
{
float fov = currentCamera.fieldOfView; fov -= Input.GetAxis("Mouse ScrollWheel") * sensitivity;
fov = Mathf.Clamp(fov, minFov, maxFov); currentCamera.fieldOfView = fov;
} }
public void CameraZoomIn(Vector3 posTar, Vector3 rotTar)
{
currentCamera.fieldOfView = originFov; posEnd = posTar;
rotEnd = rotTar;
Debug.Log("posTar=" + posTar);
Debug.Log("rotTar=" + rotTar); posStart = currentCamera.transform.position; dPos = new Vector3((posEnd.x - posStart.x) / closeFrames, (posEnd.y - posStart.y) / closeFrames, (posEnd.z - posStart.z) / closeFrames); rotStart = currentCamera.transform.eulerAngles;
dRot = (rotEnd - rotStart) / closeFrames; cameraIsMoving = true;
cameraIsZoomIn = true; FixCameraView(true);
} private static void FixCameraView(bool bFixed)
{
// 如果有地方用到了摄像机,需要进行修正
if (cameraIsZoomIn == bFixed)
{
//mainCamera.transform.parent.GetComponent<CharacterMotor>().enabled = !bFixed;
//mainCamera.GetComponent<MouseLook>().enabled = !bFixed;
//mainCamera.transform.parent.GetComponent<MouseLook>().enabled = !bFixed;
}
} void OnGUI()
{
if (GUI.Button(new Rect(10, 10, 40, 40), "开始"))
{
CameraCompleted += CameraZoomIn;
Debug.Log(CameraCompleted);
}
if (GUI.Button(new Rect(10, 55, 40, 40), "结束"))
{
CameraZoomOut();
CameraCompleted = null;
}
} public void CameraZoomOut()
{
if (currentCamera == null)
Debug.Log("camera");
if (localPositionOrigin == null)
Debug.Log("localposition");
currentCamera.transform.localPosition = localPositionOrigin;
currentCamera.transform.localEulerAngles = localRotationOrigin;
cameraIsMoving = false;
cameraIsZoomIn = false;
FixCameraView(false);
} }
10. 将摄像机对准物体,并显示整个对准过程,摄像机Zoom的更多相关文章
- Unity 3D 简易制作摄像机围绕物体随鼠标旋转效果
Unity 3D 简易制作摄像机围绕物体随鼠标旋转效果 梗概: 一. 摄像机围绕目标物体旋转, 即摄像机离目标物体有一定的距离且旋转轴心为该物体的位置. 二. 当目标物体被障碍物挡住后, 需要将摄像机 ...
- [Unity3D]Unity3D游戏开发之在3D场景中选择物体并显示轮廓效果
大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei. 在<仙剑奇侠传>.<古剑奇谭>等游戏中,常常须要玩家在一个3D场景中 ...
- Java基础-多线程编程-1.随便选择两个城市作为预选旅游目标。实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市。分别用Runnable接口和Thread类实现。
1.随便选择两个城市作为预选旅游目标.实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市.分别用Runnable接口和Thread ...
- MiniProfiler.3.0.10 用于MVC4.0中不能显示SQL语句
MiniProfiler.3.0.10 用于MVC4.0中可以显示执行时间,但是不能显示SQL语句,怎么解决?
- 【opengl】OpenGL中三维物体显示在二维屏幕上显示的变换过程
转自:http://blog.sina.com.cn/s/blog_957b9fdb0100zesv.html 为了说明在三维物体到二维图象之间,需要经过什么样的变换,我们引入了相机(Camera)模 ...
- Android进阶笔记10:ListView篇之ListView显示多种类型的条目(item)
ListView可以显示多种类型的条目布局,这里写显示两种布局的情况,其他类似. 1. 这是MainActivity,MainActivity的布局就是一个ListView,太简单了这里就不写了,直接 ...
- AJ学IOS 之微博项目实战(10)微博cell中图片的显示以及各种填充模式简介
AJ分享,必须精品 :一效果 如果直接设置会有拉伸等等的状况,这里主要介绍图片显示的一些细节 二:代码 代码实现其实很简单,微博当中用了一个photos来存放九宫格这些图片,然后用了一个photo类来 ...
- 10.1 ifconfig:配置或显示网络接口信息
ifconfig命令 用于配置网卡IP地址等网络参数或显示当前网络的接口状态,其类似于Windows下的ipconfig命令,这两个命令很容易混淆,读者需要区分一下.此外,ifconfig命令在配置网 ...
- KindEditor 4.1.10 (2013-11-23)首行空格不能显示在编辑器内
KindEditor版本: KindEditor 4.1.10 (2013-11-23) 一.BUG再现步骤: 1.文章前面插入二个全角空格作为缩进,因为并非所有段落都有缩进故不采用 CSS 的 te ...
随机推荐
- Win8.1中打不开IE的解决方法
IE11 打不开了,重新安装了IE也解决不了问题,咋整,找了好久终于找到原因,原来是权限的问题,特此和大家共享 解决办法: WIN+R,regedit,找到HKEY_CURRENT_USER\Soft ...
- Webbrowers控件的小技巧
我最近接触webbrowers 这个控件比较多,感觉用起来比较顺手吧.可以做很多操作. 貌似很多网络模拟有时候都内置这个控件或者类似的控件,但这样子速度就不能跟那些单纯用API 构建数据包比了. 我一 ...
- c/c++中const使用总结(金典)
原文地址:http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777416.html 个人总结: (1)const只对它左 ...
- zxing.dll生成条码
引入zxing.dll using System; using System.Drawing; using ZXing.QrCode; using ZXing; using ZXing.Common; ...
- JavaScript高级程序设计(八):基本概念--操作符
操作符包括:算术操作符.位操作符.关系操作符和相等操作符. 一元操作符 1.只能操作一个值得操作符,即递增和递减操作符: 2.递增(++)和递减(--)操作符包括:前置型和后置型.前置型位于要操作的变 ...
- iOS RunTime的简单使用
1.根据指定规则根据runtime进行页面选择跳转 背景:要根据后台返回的数据 进行选择要跳转到哪一个ViewController // 这个规则肯定事先跟服务端沟通好,跳转对应的界面需要对应的参数 ...
- android 登陆案例_最终版本 sharedpreference
xml 与之前的登陆案例相同 java代码: package com.itheima.login; import java.util.Map; import com.itheima.login.ut ...
- java nio使用方法(转)
最近由于工作关系要做一些Java方面的开发,其中最重要的一块就是Java NIO(New I/O),尽管很早以前了解过一些,但并没有认真去看过它的实现原理,也没有机会在工作中使用,这次也好重新研究一下 ...
- Json操作
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- async:false同步请求,浏览器假死
// 异步请求导致数据错乱 // function get_num(){ // $("input[name='monitor']").eq(1).attr('checked',tr ...