Unity通过鼠标操作来控制场景视角(包括旋转、平移以及缩放)
首先,本博客转自该博客 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通过鼠标操作来控制场景视角(包括旋转、平移以及缩放)相关推荐
- Unity 3D鼠标操作实现旋转、缩放观察物体
1.实现思路:操作摄像头围绕物体中心点(远点),做球面旋转移动来实现旋转观察物体,控制球的半径大小来实现物体的缩放效果. 2.C#摄像头源码脚本 //放在摄像头上,实现旋转.缩放观察物体 using ...
- Unity3d C# 实现纯鼠标平滑控制场景摄像头(相机)实现自由旋转、移动和围绕节点移动旋转等功能(含源码工程)
相机控制 前言 效果 漫游效果 围绕节点效果 实现过程 功能范围 搭建场景 编码实现 变量设置 自由漫游 观察节点 功能使用 项目工程 瑕疵 前言 在很多情况下我们都会用到如题的功能,在一般情况下我们 ...
- Unity UGUI通过摇杆joystick 控制角色移动 标准的第三人称视角手游-左侧控制移动,右侧控制视角和方向
Unity UGUI通过摇杆joystick 控制角色移动 标准的第三人称视角手游-左侧控制移动,右侧控制视角和方向 效果图显示 附上demo下载地址 备注:资源是URP的,普通平台修改资源材质即可 ...
- Unity3D中,鼠标控制相机视角并且跟随玩家的几种方法(第三人称)的学习整理
第一种, 按住鼠标的右键进行移动视角,同时滚轮调正视角大小. public Transform target; //相机追随目标public float xSpeed = 200; //X轴方向拖动 ...
- C语言在控制台上实现鼠标操作的方法
文章目录 了解windows库函数 了解句柄 实现思路与代码 在制作面向用户系统时,我们往往需要设置除输入参数外更为灵活的操作方式,例如鼠标点击.按键按下(无阻塞输入)等:同时,我们需要制作更为精美的 ...
- Unity 模拟鼠标点击操作
有个奇奇怪怪的BUG,需要定时模拟鼠标点击 就想到了这个骚操作. C#本身带的类库中没有关于鼠标操作的函数库,需要引用微软的dll. 重点需要引入user32.dll,可以在C:\Windows\Sy ...
- python 控制桌面程序,Python自动化 gui 桌面应用测试,鼠标操作
基于坐标和图像的设计哲学 pyautogui 并不需要去解析各平台的控件结构,他的元素定位都是基于坐标的.所以不论你是通过手工截图测量,还是通过自动化工具获取,只要你能拿到坐标,你就能进行元素操作. ...
- 用Mouse_event()来控制鼠标操作
用Mouse_event()来控制鼠标操作 在自动化测试的开发中,有一些控件的ID是很难找到的,所以有些时候,我们直接设置鼠标的位置,然后是用click事件,会收到很好的效果.在Windows API ...
- Unity鼠标控制摄像机 围绕物体旋转
Unity鼠标控制摄像机 围绕物体旋转 角度范围判定 // An highlighted block using UnityEngine;public class CameraCtrl : MonoB ...
最新文章
- [Week17] 个人阅读作业
- js的concat方法的使用
- COM Surrogate 遇到问题需要关闭。我们对此引起的不便表示抱歉
- Golang之错误处理
- C#中的平台调用(P/Invoke)
- 学会Java可以从事哪些方面的工作?
- onvif 客户端的发现
- log4j配置文件及nutch中的日志配置
- 中国剩余定理 互质与非互质版本
- maven怎么和ecli_Maven的配置和Eclipse中导入SpringBoot项目一些注意点
- apache http server 停止工作_宝塔apache启动失败:报错 AH00526: Syntax error on line 解决方案...
- 计算机学院辩论队,计算机学院新生辩论赛圆满落幕
- 一步一步打造基于TICK的工业级系统监控平台
- postgresql与mysql语法区别
- pkg_resources.ContextualVersionConflict: (pyasn1 0.1.9 (c:\users\dell\anaconda3\lib\site-packages)
- Visual Studio 2022下载安装及使用教程
- word中的交叉引用
- The Fifty-second Of Word-Day
- lds天线技术流程图_一种LDS天线结构及其制作方法与流程
- 2022年全国计算机等级考试(四级)测试题含答案