首先,本博客转自该博客 https://www.cnblogs.com/machine/p/unity.html ,在此记录只是为了防止博客删除或者书签找不到,所以重新在此记录一下。

1. 在摄像头“Main Camera”的底部“Add Component”中添加一个脚本,然后添加以下代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class sceneinsight : MonoBehaviour
{// 模型public Transform car_model;// 旋转速度public static float rotateSpeed = 10f;  //一定要使用static,不然可能变量值读不到public static float rotateLerp = 8;// 移动速度public static float moveSpeed = 0.5f;public static float moveLerp = 10f;// 镜头拉伸速度public static float zoomSpeed = 10f;   //速度比例因子public static float zoomLerp = 4f;     //阻尼系数,有个缓冲作用// 计算移动private Vector3 position, targetPosition;// 计算旋转private Quaternion rotation, targetRotation;// 计算距离private float distance, targetDistance;// 默认距离private const float default_distance = 5f;void Start(){// 旋转归零targetRotation = Quaternion.identity;// 初始位置是模型targetPosition = car_model.position;// 初始镜头拉伸targetDistance = default_distance;}void Update(){//Debug.Log("camera button ");float dx = Input.GetAxis("Mouse X");float dy = Input.GetAxis("Mouse Y");// 鼠标左键移动if (Input.GetMouseButton(0)){dx *= moveSpeed;dy *= moveSpeed;targetPosition -= transform.up * dy + transform.right * dx;}// 鼠标右键旋转if (Input.GetMouseButton(1)){dx *= rotateSpeed;dy *= rotateSpeed;if (Mathf.Abs(dx) > 0 || Mathf.Abs(dy) > 0){// 获取摄像机欧拉角Vector3 angles = transform.rotation.eulerAngles;// 欧拉角表示按照坐标顺序旋转,比如angles.x=30,表示按x轴旋转30°,dy改变引起x轴的变化angles.x = Mathf.Repeat(angles.x + 180f, 360f) - 180f;angles.y += dx;angles.x -= dy;// 计算摄像头旋转targetRotation.eulerAngles = new Vector3(angles.x, angles.y, 0);}}// 鼠标滚轮拉伸targetDistance -= Input.GetAxis("Mouse ScrollWheel") * zoomSpeed;}private void FixedUpdate(){rotation = Quaternion.Slerp(rotation, targetRotation, Time.deltaTime * rotateLerp);position = Vector3.Lerp(position, targetPosition, Time.deltaTime * moveLerp);distance = Mathf.Lerp(distance, targetDistance, Time.deltaTime * zoomLerp);// 设置摄像头旋转transform.rotation = rotation;// 设置摄像头位置transform.position = position - rotation * new Vector3(0, 0, distance);}
}

此时关闭脚本文件,返回Unity界面的“Main Camera”的Insepector窗口可以看到刚添加的脚本下方会让我们添加一个“Car_model”,此时可以选择一个物体,选择完,我们的视角则以该物体为基础,我这里是以车为视角,如下图,至于脚本和模型如何和摄像头绑定则可参照我的另一篇博客 https://blog.csdn.net/yldmkx/article/details/108735252。

  

2. 问题

问题:为了更改视角变化的幅度,需要加上一个比例因子,但是定义变量,然后使用变量去改变视角变化率,会发现没有变化,直接使用数字是可行的,后来发现需要使用静态变量,否则变量可能“读不到”,比较坑

Unity通过鼠标操作来控制场景视角(包括旋转、平移以及缩放)相关推荐

  1. Unity 3D鼠标操作实现旋转、缩放观察物体

    1.实现思路:操作摄像头围绕物体中心点(远点),做球面旋转移动来实现旋转观察物体,控制球的半径大小来实现物体的缩放效果. 2.C#摄像头源码脚本 //放在摄像头上,实现旋转.缩放观察物体 using ...

  2. Unity3d C# 实现纯鼠标平滑控制场景摄像头(相机)实现自由旋转、移动和围绕节点移动旋转等功能(含源码工程)

    相机控制 前言 效果 漫游效果 围绕节点效果 实现过程 功能范围 搭建场景 编码实现 变量设置 自由漫游 观察节点 功能使用 项目工程 瑕疵 前言 在很多情况下我们都会用到如题的功能,在一般情况下我们 ...

  3. Unity UGUI通过摇杆joystick 控制角色移动 标准的第三人称视角手游-左侧控制移动,右侧控制视角和方向

    Unity UGUI通过摇杆joystick 控制角色移动 标准的第三人称视角手游-左侧控制移动,右侧控制视角和方向 效果图显示 附上demo下载地址 备注:资源是URP的,普通平台修改资源材质即可 ...

  4. Unity3D中,鼠标控制相机视角并且跟随玩家的几种方法(第三人称)的学习整理

    第一种,  按住鼠标的右键进行移动视角,同时滚轮调正视角大小. public Transform target; //相机追随目标public float xSpeed = 200; //X轴方向拖动 ...

  5. C语言在控制台上实现鼠标操作的方法

    文章目录 了解windows库函数 了解句柄 实现思路与代码 在制作面向用户系统时,我们往往需要设置除输入参数外更为灵活的操作方式,例如鼠标点击.按键按下(无阻塞输入)等:同时,我们需要制作更为精美的 ...

  6. Unity 模拟鼠标点击操作

    有个奇奇怪怪的BUG,需要定时模拟鼠标点击 就想到了这个骚操作. C#本身带的类库中没有关于鼠标操作的函数库,需要引用微软的dll. 重点需要引入user32.dll,可以在C:\Windows\Sy ...

  7. python 控制桌面程序,Python自动化 gui 桌面应用测试,鼠标操作

    基于坐标和图像的设计哲学 pyautogui 并不需要去解析各平台的控件结构,他的元素定位都是基于坐标的.所以不论你是通过手工截图测量,还是通过自动化工具获取,只要你能拿到坐标,你就能进行元素操作. ...

  8. 用Mouse_event()来控制鼠标操作

    用Mouse_event()来控制鼠标操作 在自动化测试的开发中,有一些控件的ID是很难找到的,所以有些时候,我们直接设置鼠标的位置,然后是用click事件,会收到很好的效果.在Windows API ...

  9. Unity鼠标控制摄像机 围绕物体旋转

    Unity鼠标控制摄像机 围绕物体旋转 角度范围判定 // An highlighted block using UnityEngine;public class CameraCtrl : MonoB ...

最新文章

  1. [Week17] 个人阅读作业
  2. js的concat方法的使用
  3. COM Surrogate 遇到问题需要关闭。我们对此引起的不便表示抱歉
  4. Golang之错误处理
  5. C#中的平台调用(P/Invoke)
  6. 学会Java可以从事哪些方面的工作?
  7. onvif 客户端的发现
  8. log4j配置文件及nutch中的日志配置
  9. 中国剩余定理 互质与非互质版本
  10. maven怎么和ecli_Maven的配置和Eclipse中导入SpringBoot项目一些注意点
  11. apache http server 停止工作_宝塔apache启动失败:报错 AH00526: Syntax error on line 解决方案...
  12. 计算机学院辩论队,计算机学院新生辩论赛圆满落幕
  13. 一步一步打造基于TICK的工业级系统监控平台
  14. postgresql与mysql语法区别
  15. pkg_resources.ContextualVersionConflict: (pyasn1 0.1.9 (c:\users\dell\anaconda3\lib\site-packages)
  16. Visual Studio 2022下载安装及使用教程
  17. word中的交叉引用
  18. The Fifty-second Of Word-Day
  19. lds天线技术流程图_一种LDS天线结构及其制作方法与流程
  20. 2022年全国计算机等级考试(四级)测试题含答案

热门文章

  1. 【温故知新】CSS学习笔记(字体样式属性)附加篇
  2. 释疑の采购订单的批量修改
  3. PM到底做什么(What Do Product Managers Do?)
  4. Hiveduino编程电子积木平台产品介绍宣传视频
  5. SAP内部订单使用实例
  6. SAP中会计凭证和物料凭证的对应关系
  7. 如何在SAP的的凭证流浏览器(DRB)中显示客户自定义的凭证
  8. 如何在SAP的Screen中编写List报表
  9. 报错后返回输入参数的界面
  10. 安卓版kindle电子书位置_安卓手机APP如何打开三种格式的电子书文件