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

1.摄像机自由平移

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

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

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. public class CameraZoom : MonoBehaviour {
  6.  
  7. public float maxDistance;//最大距离
  8. public float minDistance;//最小距离
  9. public float scaleSpeed;//缩放速度
  10. public float mouseSpeed;//缩放速度
  11. private Touch oldTouch1; //上次触摸点1(手指1)
  12. private Touch oldTouch2; //上次触摸点2(手指2)
  13.  
  14. // Use this for initialization
  15. void Start () {
  16. //FairyGUI.GObject a;
  17. //a.visible = false;
  18. }
  19.  
  20. // Update is called once per frame
  21. void Update () {
  22. ZoomCamera();
  23. MouseZoomCamera();
  24. }
  25.  
  26. /// <summary>
  27. /// 手势屏幕缩放
  28. /// </summary>
  29. private void ZoomCamera()
  30. {
  31. //至少得要2个触摸点
  32. if (Input.touchCount < )
  33. {
  34. return;
  35. }
  36.  
  37. //多点触摸, 放大缩小
  38. Touch newTouch1 = Input.GetTouch();
  39. Touch newTouch2 = Input.GetTouch();
  40.  
  41. //第2点刚开始接触屏幕, 只记录,不做处理
  42. if (newTouch2.phase == TouchPhase.Began)
  43. {
  44. oldTouch2 = newTouch2;
  45. oldTouch1 = newTouch1;
  46. return;
  47. }
  48.  
  49. //计算老的两点距离和新的两点间距离,变大要放大模型,变小要缩放模型
  50. float oldDistance = Vector2.Distance(oldTouch1.position, oldTouch2.position);
  51. float newDistance = Vector2.Distance(newTouch1.position, newTouch2.position);
  52.  
  53. //两个距离之差,为正表示放大手势, 为负表示缩小手势
  54. float offset = newDistance - oldDistance;
  55.  
  56. Vector3 originalPos = transform.position;
  57. Quaternion originalRotation = transform.rotation;
  58. transform.position += offset * transform.forward * scaleSpeed * Time.deltaTime;
  59.  
  60. //临时判断值
  61. float cameraY = transform.position.y;
  62. if (cameraY < minDistance || cameraY > maxDistance)
  63. {
  64. transform.position = originalPos;
  65. transform.rotation = originalRotation;
  66. }
  67.  
  68. //重新计算
  69. cameraY = transform.position.y;
  70.  
  71. //记住最新的触摸点,下次使用
  72. oldTouch1 = newTouch1;
  73. oldTouch2 = newTouch2;
  74. }
  75.  
  76. /// <summary>
  77. /// 鼠标滚轮缩放
  78. /// </summary>
  79. private void MouseZoomCamera()
  80. {
  81. //获取滚轮的值
  82. float mouseScroll = Input.GetAxis("Mouse ScrollWheel");
  83. if (Mathf.Abs(mouseScroll) > )
  84. {
  85. //print("hua");
  86. Vector3 originalPos = transform.position;
  87. Quaternion originalRotation = transform.rotation;
  88.  
  89. transform.position += mouseScroll * transform.forward * mouseSpeed * Time.deltaTime;
  90. //临时判断值
  91. float cameraY = transform.position.y;
  92. if (cameraY < minDistance || cameraY > maxDistance)
  93. {
  94. transform.position = originalPos;
  95. transform.rotation = originalRotation;
  96. }
  97.  
  98. //cameraY = transform.position.y;
  99. //print(distance.magnitude);
  100. }
  101. }
  102. }

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. 用JS实现表格的高亮显示

    1.所用事件详解 2.<thead>,<tbody>标签介绍 <thead> 标签定义表格的表头.该标签用于组合 HTML 表格的表头内容. thead 元素应该与 ...

  2. spring深入了解心得

    spring 主要核心组件 :Core.上下文(Context) .实体(Bean): spring 主要由两大特色:控制反转(IOC).面向对象(AOP): spring中Core主要用于组建Bea ...

  3. 类型转换构造函数 及使用explicit避免类型自动转换------新标准c++程序设计

    类型转换构造函数:  除复制构造函数外,只有一个参数的构造函数一般可以称作类型转换构造函数,因为这样的构造函数能起到类型自动转换的作用.例如下面的程序: #include<iostream> ...

  4. LoadRunner--获取请求的返回结果函数

    注:内容来自网络 Action(){ web_set_max_html_param_len("262144"); // 默认最大长度为256 web_reg_save_param( ...

  5. 解决git一直输入用户名和密码的问题

    git config --system --unset credential.helper,在git中输入此命令后,每次拉去代码需要重新输入用户名和密码,可以使用git config --global ...

  6. pycharm设置连接

    https://blog.csdn.net/u013088062/article/details/50100121

  7. luoguP2982 [USACO10FEB]慢下来Slowing down

    https://www.luogu.org/problemnew/show/P2982 这题你写个树剖当然可以做,但是我们还有一种更简单的方法,使用 dfs 序 + 树状数组即可 考虑一只牛到了自己的 ...

  8. 181114socke编程

    一.Socket Families 地址簇 socket.AF_UNIX socket.AF_INET socket.AF_INET6 二.Socker Types socket.SOCK_STREA ...

  9. jquery.from帮助类

    /** * 将form里面的内容序列化成json * 相同的checkbox用分号拼接起来 * @param {obj} 需要拼接在后面的json对象 * @method serializeJson ...

  10. 构建docker镜像

    一.通过docker commit命令构建镜像 docker commit 构建镜像可以想象为是将运行的镜像进行重命名另存一份.我们先创建一个容器,并在容器里做出修改,就像修改代码一样,最后再将修改提 ...