直接挂载在摄像机上面即可

1.摄像机自由平移

using UnityEngine;
using System.Collections; /// <summary>
/// 摄像机视角自由移动
/// </summary>
public class CameraFreeMove : MonoBehaviour
{
public float moveSpeed = ; // 设置相机移动速度
void Update()
{
// 当按住鼠标右键的时候
if (Input.GetMouseButton())
{
// 获取鼠标的x和y的值,乘以速度和Time.deltaTime是因为这个可以是运动起来更平滑
float h = Input.GetAxis("Mouse X") * moveSpeed * Time.deltaTime;
float v = Input.GetAxis("Mouse Y") * moveSpeed * Time.deltaTime;
// 设置当前摄像机移动,y轴并不改变
// 需要摄像机按照世界坐标移动,而不是按照它自身的坐标移动,所以加上Spance.World
this.transform.Translate(v, , -h, Space.World);
}
}
}

2.使用鼠标滚轮和双指触摸进行缩放

using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class CameraZoom : MonoBehaviour { public float maxDistance;//最大距离
public float minDistance;//最小距离
public float scaleSpeed;//缩放速度
public float mouseSpeed;//缩放速度
private Touch oldTouch1; //上次触摸点1(手指1)
private Touch oldTouch2; //上次触摸点2(手指2) // Use this for initialization
void Start () {
//FairyGUI.GObject a;
//a.visible = false;
} // Update is called once per frame
void Update () {
ZoomCamera();
MouseZoomCamera();
} /// <summary>
/// 手势屏幕缩放
/// </summary>
private void ZoomCamera()
{
//至少得要2个触摸点
if (Input.touchCount < )
{
return;
} //多点触摸, 放大缩小
Touch newTouch1 = Input.GetTouch();
Touch newTouch2 = Input.GetTouch(); //第2点刚开始接触屏幕, 只记录,不做处理
if (newTouch2.phase == TouchPhase.Began)
{
oldTouch2 = newTouch2;
oldTouch1 = newTouch1;
return;
} //计算老的两点距离和新的两点间距离,变大要放大模型,变小要缩放模型
float oldDistance = Vector2.Distance(oldTouch1.position, oldTouch2.position);
float newDistance = Vector2.Distance(newTouch1.position, newTouch2.position); //两个距离之差,为正表示放大手势, 为负表示缩小手势
float offset = newDistance - oldDistance; Vector3 originalPos = transform.position;
Quaternion originalRotation = transform.rotation;
transform.position += offset * transform.forward * scaleSpeed * Time.deltaTime; //临时判断值
float cameraY = transform.position.y;
if (cameraY < minDistance || cameraY > maxDistance)
{
transform.position = originalPos;
transform.rotation = originalRotation;
} //重新计算
cameraY = transform.position.y; //记住最新的触摸点,下次使用
oldTouch1 = newTouch1;
oldTouch2 = newTouch2;
} /// <summary>
/// 鼠标滚轮缩放
/// </summary>
private void MouseZoomCamera()
{
//获取滚轮的值
float mouseScroll = Input.GetAxis("Mouse ScrollWheel");
if (Mathf.Abs(mouseScroll) > )
{
//print("hua");
Vector3 originalPos = transform.position;
Quaternion originalRotation = transform.rotation; transform.position += mouseScroll * transform.forward * mouseSpeed * Time.deltaTime;
//临时判断值
float cameraY = transform.position.y;
if (cameraY < minDistance || cameraY > maxDistance)
{
transform.position = originalPos;
transform.rotation = originalRotation;
} //cameraY = transform.position.y;
//print(distance.magnitude);
}
}
}

unity摄像机脚本的更多相关文章

  1. Unity基础-脚本生命周期

    理解Unity脚本的生命周期对游戏开发很重要,这篇文章对生命周期做一个记录和总结.Unity的脚本生命周期(消息),也就是在脚本运行时,自动并且按顺序执行的一系列函数.在unity官网中有对生命周期详 ...

  2. Unity Mono脚本 加密

    加密环境 引擎版本:Unity3D 5.3.4 及更高版本 (使用Mono而并非IL2CPP) 操作系统:CentOS 6.2(Final) 加密环境:Android.IOS(暂定) 加密对象:C#源 ...

  3. 游戏编程之Unity常用脚本类的继承关系

    前言学习Unity开发引擎的初学者会接触大量的脚本类,而这些类之间的关系往往容易被忽略.本文对Unity引擎开发中的一些常用类及其关系进行了简单的归纳总结. 博文首发地址:http://tieba.b ...

  4. Unity 摄像机组件

    今天看一下unity3d里面的摄像机是怎么调用和操作的. 打开unity3d新建一个工程.在我们打开工程的时候unity3d会主动添加一个Main Camera,在Hierartchy视图中.点击Ma ...

  5. 【转】Unity摄像机的使用二:摄像机的切换

    http://blog.csdn.net/liujunjie612/article/details/45847877 我们接着上一篇博文继续研究摄像机,这篇我们说下Unity中摄像机的切换,说到切换, ...

  6. Unity(2) 脚本简单操作

    生命周期(按顺序排列) Awake():脚本唤醒,系统执行的第一个方法,在脚本声明周期内只执行一次,初始化一般可以在这里 Start():Awake之后,Update之前,只执行一次,一般在awake ...

  7. Unity中脚本的执行顺序总结(@WhiteTaken)

    (Editor)以上是Unity官方文档中的截图,脚本在被挂载到物体上,会启用Editor的方法Reset. (Initialization)当执行脚本开始,初始化的过程中,依次执行的是Awake-& ...

  8. Unity 摄像机Clear Flags和Culling Mask属性用途详解

    原文地址:http://blog.csdn.net/tanmengwen/article/details/8798231 1.简述两个属性 1.1 Clear Flags 清除标记 每个相机在渲染时会 ...

  9. Unity摄像机的正交视图与透视图

    Unity Camera的两种模式 Projection:投射,投影 Unity的MainCamera的Projection可选择Perspective[透视],Orthographic[正交],是指 ...

随机推荐

  1. C++的惨痛教训(未完待续)

    题记:只有痛才能让人铭记!痛促进进步~ 1. strncpy,大家都知道要做安全检查,可是谁都有嫌麻烦的时候,尤其是自己很自信不会产生溢出的时候,可能不会坑了自己,却会坑了使用这段代码的人.所以,1. ...

  2. hbuilder h5 原生socket

    在网上搜索了很多资料都不行,要么就是不能发送数据,要么就不能接收数据,使用如下的方法可以接收数据,一个一个字节接收: 有部分限制是需要明确知道要接收多少个字节,否则容易出现接收异常.. var tes ...

  3. angular 中间人模式

    import { Component, OnInit, EventEmitter, Output } from '@angular/core'; @Component({ selector: 'app ...

  4. Centos7.5的定制化安装

    一.前言 关于定制化centos7.5的镜像真的是历经波折,前前后后.来来回回尝试了不少于20次,上网找了各种关于定制7系统的方法,都没有成功... 但最终功夫不负有心人终于解决了,O(∩_∩)O哈哈 ...

  5. JavaScript中的原型模式

    我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法.使用原型对象的好处是可以让所有对象实例共享它 ...

  6. Java以邮件附件的方式发送excel文件

    String to = "xxx@qq.com"; // 收件人的QQ邮箱 String from = "xxx@qq.com"; // 发件人的QQ邮箱 St ...

  7. dubbo 面试题

      dubbo是什么 dubbo是一个分布式框架,远程服务调用的分布式框架,其核心部分包含:集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等 ...

  8. 【bzoj4817】树点涂色 LCT+线段树+dfs序

    Description Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色. ...

  9. linux系统安全及应用——PAM安全认证

    一.PAM认证模块介绍 PAM认证模块,叫做可插拔式的认证模块.一项重要的功能就是为了加强su命令的使用控制,可以借助于PAM认证模块,只允许极个别用户使用su命令进行切换.PAM提供了对所有服务进行 ...

  10. 使用过多的递归出现错误,“System.StackOverflowException”类型的未经处理的异常在 mscorlib.dll 中发生

    class Program { static void Main(string[] args) { sub(0); }     private static void sub(int count) { ...