控制一个游戏对象的旋转和相机的缩放
介绍
这段代码是一个Unity游戏开发脚本,它用于控制一个游戏对象的旋转和相机的缩放。以下是代码的主要功能:
-
控制游戏对象的旋转:
- 通过按下Q键和W键,用户可以选择以逆时针或顺时针方向绕游戏对象的Y轴进行旋转。
- 旋转角度和速度可以通过公共变量进行调整,可以控制每次旋转的角度和旋转的速度。
- 旋转是平滑的,使用Slerp插值方法,确保旋转过程是平滑的。
-
控制相机的缩放:
- 通过鼠标滚轮的输入,用户可以缩放场景中的主摄像机。
- 可以通过设置最小和最大视野(FOV)值来限制缩放范围。
总之,这个脚本允许用户通过按键控制游戏对象的旋转,同时还可以通过滚轮控制主摄像机的缩放。这对于游戏中的交互和用户体验可以是有趣的元素。
方法
using UnityEngine;public class RotateObject : MonoBehaviour
{public float rotationAngle = 60f; // 旋转角度,指定每次旋转的角度public float rotationSpeed = 5.0f; // 旋转速度,控制旋转的速度public float zoomSpeed = 5.0f; // 缩放速度,控制相机缩放的速度public float minFOV = 10.0f; // 最小视野,指定相机最小的视野值public float maxFOV = 60.0f; // 最大视野,指定相机最大的视野值private bool isRotating = false; // 标记是否正在进行旋转private Quaternion targetRotation; // 目标旋转,用于存储目标旋转的四元数private Camera mainCamera; // 主摄像机void Start(){mainCamera = Camera.main; // 获取场景中的主摄像机}void Update(){if (Input.GetKeyDown(KeyCode.Q) && !isRotating){// 开始逆时针绕自身Y轴旋转StartRotation(false); // 调用StartRotation函数开始逆时针旋转}else if (Input.GetKeyDown(KeyCode.W) && !isRotating){// 开始顺时针绕自身Y轴旋转StartRotation(true); // 调用StartRotation函数开始顺时针旋转}if (isRotating){// 在每帧使用 Slerp 进行旋转float t = Time.deltaTime * rotationSpeed; // 根据旋转速度计算插值的参数transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, t); // 使用Slerp函数实现平滑旋转// 判断是否接近目标旋转if (Quaternion.Angle(transform.rotation, targetRotation) < 1.0f){isRotating = false; // 标记旋转结束}}// 处理相机缩放float scrollWheel = Input.GetAxis("Mouse ScrollWheel"); // 获取鼠标滚轮滚动的输入值if (scrollWheel != 0){float newFOV = mainCamera.fieldOfView - scrollWheel * zoomSpeed; // 根据输入值计算新的视野值newFOV = Mathf.Clamp(newFOV, minFOV, maxFOV); // 使用Mathf.Clamp函数确保视野值在指定范围内mainCamera.fieldOfView = newFOV; // 更新相机的视野值}}void StartRotation(bool clockwise){isRotating = true; // 标记正在进行旋转// 计算目标旋转float angle = clockwise ? rotationAngle : -rotationAngle; // 根据顺时针或逆时针选择旋转角度targetRotation = Quaternion.Euler(0, angle, 0) * transform.rotation; // 计算目标旋转的四元数}
}
举例子
当然,以下是代码中每个主要部分的作用的分条分点说明:
-
using UnityEngine;: 引入Unity的命名空间,使得可以使用Unity的类和功能。 -
public class RotateObject : MonoBehaviour: 定义了一个名为RotateObject的公共类,该类继承自Unity的MonoBehaviour类,这是Unity中所有脚本的基类。 -
public float rotationAngle = 60f;: 定义了一个公共浮点型变量rotationAngle,用于指定每次旋转的角度,默认值为60度。 -
public float rotationSpeed = 5.0f;: 定义了一个公共浮点型变量rotationSpeed,用于控制旋转的速度,默认值为5.0。 -
public float zoomSpeed = 5.0f;: 定义了一个公共浮点型变量zoomSpeed,用于控制相机缩放的速度,默认值为5.0。 -
public float minFOV = 10.0f;: 定义了一个公共浮点型变量minFOV,用于指定相机的最小视野值,默认值为10.0。 -
public float maxFOV = 60.0f;: 定义了一个公共浮点型变量maxFOV,用于指定相机的最大视野值,默认值为60.0。 -
private bool isRotating = false;: 定义了一个私有布尔型变量isRotating,用于标记是否正在进行旋转,默认为假(false)。 -
private Quaternion targetRotation;: 定义了一个私有四元数变量targetRotation,用于存储目标旋转的信息。 -
private Camera mainCamera;: 定义了一个私有相机对象mainCamera,用于引用场景中的主摄像机。 -
void Start(): 这是一个生命周期方法,当脚本被加载时调用。在此方法中,脚本获取场景中的主摄像机的引用。 -
void Update(): 这是一个生命周期方法,每一帧都会被调用。在此方法中,脚本处理输入和控制对象的旋转以及相机的缩放。 -
输入检测部分:
- 通过
Input.GetKeyDown(KeyCode.Q)和Input.GetKeyDown(KeyCode.W)检测用户按下了Q键或W键,并且isRotating为假时,触发旋转操作。
- 旋转操作部分:
- 当
isRotating为真时,使用Slerp插值实现平滑旋转,以使对象以指定的速度旋转到目标旋转。 - 通过比较当前旋转状态与目标旋转状态的夹角来判断旋转是否接近目标,当夹角小于1.0度时,标记旋转结束。
- 相机缩放操作部分:
- 检测鼠标滚轮输入并获取滚轮的值。
- 根据输入值调整相机的视野值,并使用
Mathf.Clamp函数确保视野值在指定的最小和最大范围内。
void StartRotation(bool clockwise): 自定义方法,用于开始旋转操作。
- 通过
clockwise参数决定顺时针还是逆时针旋转。 - 计算目标旋转角度并将其存储在
targetRotation中,以备用于平滑旋转操作。
这些分条分点说明了代码中各个部分的作用和功能。
相关文章:
控制一个游戏对象的旋转和相机的缩放
介绍 这段代码是一个Unity游戏开发脚本,它用于控制一个游戏对象的旋转和相机的缩放。以下是代码的主要功能: 控制游戏对象的旋转: 通过按下Q键和W键,用户可以选择以逆时针或顺时针方向绕游戏对象的Y轴进行旋转。旋转角度和速度可…...
【数据结构】线性表(二)单链表及其基本操作(创建、插入、删除、修改、遍历打印)
目录 前文、线性表的定义及其基本操作(顺序表插入、删除、查找、修改) 四、线性表的链接存储结构 1. 单链表(C语言) a. 链表节点结构 b. 创建新节点 c. 在链表末尾插入新节点 d. 删除指定节点 e. 修改指定节点的数据 f. …...
label的作用是什么?是怎么用的?(1)
Label(标签)在不同的上下文中有不同的作用和用途。以下是几种常见的用途和用法: 1. 数据标注:在机器学习和数据科学中,标签用于标识数据样本的类别或属性。标注数据是监督学习中的一项重要任务,它为算法提…...
C- 使用原子变量实现自旋锁
自旋锁 自旋锁(Spinlock)是一种常用于多线程编程中的低开销锁,其特点是当线程尝试获取锁而锁已被其他线程占用时,该线程会处于一个持续的忙等待(busy-wait)状态,直到它可以获取到锁为止。这种方…...
汇编的指令
减法类指令: 不带借位的减法: sub dest,src;dest(dest)-(src) 注意: 1、源操作数和目的操作数不能同时为段寄存器或存储单元 2、对标志位有影响,主要影响CF、ZF、OF、SF。 带借位的减法: sbb dest,src;dest(dest)-(…...
《数据结构、算法与应用C++语言描述》使用C++语言实现数组队列
《数据结构、算法与应用C语言描述》使用C语言实现数组队列 定义 队列的定义 队列(queue)是一个线性表,其插入和删除操作分别在表的不同端进行。插入元素的那一端称为队尾(back或rear),删除元素的那一端称…...
零基础如何学习自动化测试
现在很多测试人员有些急于求成,没有任何基础想当然的,要在一周内上手自动化测试。 在自动化的过程中时候总有人会犯很低级的问题,有语法问题,有定位问题,而且有人居然连__init__.py 文件名都弄错误,还有将…...
系统架构师备考倒计时16天(每日知识点)
1.信息化战略与实施 2.UML图(12个) 3.结构化设计(耦合) 4.SMP与AMP的区别(多核处理器的工作方式) 多核处理器一般有SMP和AMP两种不同的工作方式: SMP(对称多处理技术):将2颗完全一样的处理器封…...
【MySQL系列】- Select查询SQL执行过程详解
【MySQL系列】- Select查询SQL执行过程详解 文章目录 【MySQL系列】- Select查询SQL执行过程详解一、SQL查询语句的执行过程二、SQL执行过程详解2.1. 连接器2.2. 查询缓存2.3. 分析器2.4. 优化器2.5. 执行器 三、undo log 和 redo log作⽤3.1. redo log (重做日志&a…...
软考高级信息系统项目管理师系列之:信息系统项目管理师论文评分参考标准
软考高级信息系统项目管理师系列之:信息系统项目管理师论文评分参考标准 论文满分是 75 分,论文评分可分为优良、及格与不及格 3 个档次。评分的分数可分为: 60 分至 75 分优良(相当于百分制 80 分至 100 分)。45 分至 59 分及格(相当于百分制 60 分至 79 分)。0 分至 44 分…...
MyBatis--多案例让你熟练使用CRUD操作
目录 一、前期准备 二、两种实现CRUD方式 三、增加数据(INSERT) 四、删除数据(DELETE) 五、查询数据(SELECT) 六、更新数据(UPDATE) 一、前期准备 1.创建maven项目并在pom文件…...
用Python造轮子
目录 背景安装setuptools库准备要打包的代码创建setup.py文件打包生成whl文件把库装到电脑上使用这个库 背景 如何把自己写的代码,打包成库方便其他人使用 安装setuptools库 正所谓想要富先修路,先把造轮子要用的库装上 pip install wheel pip insta…...
ARM 堆栈寻址类型区分
文章目录 堆栈指向分类堆栈指向数据分类满递增与满递减空递增与空递减 堆栈指向分类 根据堆栈指针的指向的方向不同,可以划分为向上生成型和向下生成型。 向上生成型: 随着数据的入栈,堆栈的指针逐渐增大,称为:递增…...
每日一练 | 网络工程师软考真题Day43
1、在生成树协议〔STP〕IEEE 802.1d中,根据 来选择根交换机。 A.最小的MAC地址 B.最大的MAC地址 C.最小的交换机ID D.最大的交换机ID 2、在快速以太网物理层标准中,使用两对5类无屏蔽双绞线的是 。 A&…...
jsonXML格式化核心代码
json格式化: 依赖: <dependency><groupId>com.jayway.jsonpath</groupId><artifactId>json-path</artifactId><version>2.6.0</version><scope>compile</scope> </dependency> string t…...
PTQ量化和QAT量化
目录 1--PTQ量化 2--QAT量化 1--PTQ量化 PTQ量化表示训练后量化(Post Training Quantization)。使用一批校准数据对训练好的模型进行校准,将训练好的FP32网络直接转换为定点计算的网络,过程中无需对原始模型进行任何训练&#x…...
【Django 02】数据表构建、数据迁移与管理
1. Django 构建数据表创建与数据迁移 1.1 数据表创建 1.1.1 模块功能 如前所述,models.py文件主要用一个 Python 类来描述数据表。运用这个类,可以通过简单的 Python 代码来创建、检索、更新、删除 数据库中的记录而无需写一条又一条的SQL语句。今天的例子就是在…...
一天吃透Java集合面试八股文
内容摘自我的学习网站:topjavaer.cn 常见的集合有哪些? Java集合类主要由两个接口Collection和Map派生出来的,Collection有三个子接口:List、Set、Queue。 Java集合框架图如下: List代表了有序可重复集合,…...
高级深入--day36
Settings Scrapy设置(settings)提供了定制Scrapy组件的方法。可以控制包括核心(core),插件(extension),pipeline及spider组件。比如 设置Json Pipeliine、LOG_LEVEL等。 参考文档:Settings — Scrapy 1.0.5 文档 内置设置参考手册 BOT_NAME 默认: scrapybot 当您使用 sta…...
Jmeter接口测试工具的一些使用小技巧
如何使用英文界面的JMeter Jmeter启动时会自动判断操作系统的locale 并选择合适的语言启动,所以,我们启动jmeter后,其会出现一个倍感亲切的中文界面。但由于jmeter本身的汉化工作做得不好,你会看到有未被汉化的选项及元件的参数。…...
ObsPy完整指南:如何用Python快速处理地震数据
ObsPy完整指南:如何用Python快速处理地震数据 【免费下载链接】obspy ObsPy: A Python Toolbox for seismology/seismological observatories. 项目地址: https://gitcode.com/gh_mirrors/ob/obspy ObsPy是一个专为地震学和地震观测站设计的Python工具库&…...
Python数据可视化入门:从零开始掌握三大核心库
在数据科学领域,数据可视化是连接数据与洞见的关键桥梁。通过图表和图形,我们能够直观地理解数据模式、发现异常值、并向他人清晰传达分析结果。Python作为数据分析的主流语言,提供了丰富强大的可视化工具库。本文将带你从零开始,…...
**发散创新:基于Go语言的事件驱动式应急响应架构设计与实践**在现代云原生和微服务架构中,**快速、精准的事件
发散创新:基于Go语言的事件驱动式应急响应架构设计与实践 在现代云原生和微服务架构中,快速、精准的事件响应能力已成为系统稳定性的核心保障。传统的轮询式监控和静态规则告警已难以应对复杂多变的生产环境。本文将带你深入探索一种以 Go语言为核心 的轻…...
GHelper终极指南:如何用开源工具彻底掌控华硕笔记本性能
GHelper终极指南:如何用开源工具彻底掌控华硕笔记本性能 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, …...
2025届学术党必备的六大降重复率平台实际效果
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 人工智能生成内容也就是AIGC普及之后,文本检测系统变得越来越精密了。为了避免机…...
【DIY小记】解决MacOS上Edge浏览器bilibili全屏卡顿的问题
近日笔者发现自己Macbook-Pro播放B站视频,全屏的时候必然卡顿,退出全屏就没事。笔者电脑的参数是: 芯片:M3系统:Tahoe 26.4浏览器:Edge 到网上一查发现《Edge浏览器在MacOS 26(Tahoe)系统上看B站卡顿》一…...
终极指南:如何用3分钟为Windows换上《蔚蓝档案》风格光标主题
终极指南:如何用3分钟为Windows换上《蔚蓝档案》风格光标主题 【免费下载链接】BlueArchive-Cursors Custom mouse cursor theme based on the school RPG Blue Archive. 项目地址: https://gitcode.com/gh_mirrors/bl/BlueArchive-Cursors 每天面对电脑工作…...
7B、14B、80B大模型参数量解析:性能、成本与选择全攻略!
本文解析了7B、14B、80B大模型参数量代表的含义及其对模型能力、资源消耗、训练与推理成本的影响。参数量越大,模型表达能力越强,但资源需求与成本也越高。7B适合轻量级任务与低预算场景,14B兼顾性能与成本,80B适用于追求顶尖性能…...
百度网盘资源加速工具:突破下载限制的开源解决方案
百度网盘资源加速工具:突破下载限制的开源解决方案 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 如何在不升级会员的情况下实现百度网盘高速下载?这款…...
Notepad-- 终极中文编辑器:从零开始打造你的专属高效文本工作流
Notepad-- 终极中文编辑器:从零开始打造你的专属高效文本工作流 【免费下载链接】notepad-- 一个支持windows/linux/mac的文本编辑器,目标是做中国人自己的编辑器,来自中国。 项目地址: https://gitcode.com/GitHub_Trending/no/notepad-- …...
