Unity3d 游戏暂停(timeScale=0)引起的deltaTime关联的系列问题解决

问题描述

游戏暂停的功能是通过设置timeScale=0实现的,不过在暂停游戏的时候,需要对角色进行预览和设置,为了实现这个功能,是通过鼠标控制相机的操作,为了使相机的操作丝滑,获取鼠标操作系数乘以Time.deltaTime 了,同时对数值进行了平滑操作(Mathf.SmoothDamp和Mathf.SmoothDampAngle),采用了具体代码可以参考https://blog.csdn.net/qq_33789001/article/details/120551521。
代码片段如下:

//根据鼠标系数获取距离目标值
tdis -= Input.GetAxis("Mouse ScrollWheel") * disMoveSpd * Time.deltaTime;
//平滑处理距离值
dis = Mathf.SmoothDamp(dis, tdis, ref zVel, 0.5f);

//根据鼠标系数获取旋转目标值
troty = troty + Input.GetAxis("Mouse X") * XSens * Time.deltaTime;
trotx = trotx + Input.GetAxis("Mouse Y") * YSens * Time.deltaTime;
//平滑处理旋转值
rotx = Mathf.SmoothDampAngle(rotx, trotx, ref RxVel, 0.3f);  
roty = Mathf.SmoothDampAngle(roty, troty, ref RyVel, 0.3f);

当游戏暂停后(timeScale=0),Time.deltaTime的数值都变成0了。

解决办法

解决的思路就是在暂停时不用Time.deltaTime,而是通过固定帧率计算出这个值。比如假设游戏是60帧,那么数值就是1/60 = 0.0167f,这个数值是根据帧率越大,而值越小的,120帧就是0.008333。那么我就按60帧手动赋值0.0167f。代码修改如下:

//根据鼠标系数获取距离目标值
tdis -= Input.GetAxis("Mouse ScrollWheel") * disMoveSpd *  0.0167f;
//根据鼠标系数获取旋转目标值
troty = troty + Input.GetAxis("Mouse X") * XSens *  0.0167f;
trotx = trotx + Input.GetAxis("Mouse Y") * YSens *  0.0167f;

这样能解决Time.deltaTime为0,鼠标的操作都失效的问题。
然而,运行后发现部分操作还是会失效,而且操作过程中会出现这样的报错:

is not valid. Input position is { NaN, NaN, NaN }.

经过研究发现 Mathf.SmoothDampAngle和Mathf.SmoothDamp两个函数与Time.deltaTime仍有关联,他们的说明如下
在这里插入图片描述
在这里插入图片描述

它们都有deltaTime参数,这个时间是上次调用这个函数的到这次调用的间隔时间,默认为Time.deltaTime。因为之前调用这两个函数都没有进行这个传参默认是Time.deltaTime这种情况下为0。所以在这种情况下还需要传入maxSpeed和deltaTime参数。经过修改如下:

//平滑处理距离值
dis = Mathf.SmoothDamp(dis, tdis, ref zVel, 0.5f, 2, 0.0167f);

//平滑处理旋转值
rotx = Mathf.SmoothDampAngle(rotx, trotx, ref RxVel, 0.3f, 2, 0.0167f);  
roty = Mathf.SmoothDampAngle(roty, troty, ref RyVel, 0.3f, 2, 0.0167f);

做了上述修改可以正常操作:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/728160.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何在React中使用CSS模块,并解释为什么使用它们比传统CSS更有益?

在React中使用CSS模块是一种将CSS类名局部化到单个组件的方法,从而避免了全局作用域中的类名冲突。CSS模块允许你为组件编写样式,并确保这些样式只应用于该组件,而不会影响到其他组件。 以下是在React中使用CSS模块的步骤: 安装C…

Excel 识别数据层次后转换成表格

某列数据可分为 3 层,第 1 层是字符串,第 2 层是日期,第 3 层是时间: A1NAME122024-06-03304:06:12404:09:23508:09:23612:09:23717:02:2382024-06-02904:06:121004:09:231108:09:2312NAME2132024-06-031404:06:121504:09:231620…

FreeBSD在zfs挂接第二块ssd 硬盘

为FreeBSD机器新增加了一块ssd硬盘:骑尘 256G 先格式化分区硬盘 进入bsdconfig 选Disk Management 选择ada1 ,也就是新增加的硬盘 选择auto 然后选择Entire Disk 提示信息 The existing partition scheme on this disk (MBR) │ …

如何解决windows自动更新,释放C盘更新内存

第一步:首先关闭windows自动更新组件 没有更新windows需求,为了防止windows自动更新,挤占C盘空间,所以我们要采取停止Windows Update服务。按下WinR打开运行对话框,输入services.msc, 然后按Enter。在服务…

传输大文件之镭速自动清理过期文件

电子文档的普及无疑极大地便利了我们的工作与生活,但随之而来的是如何有效管理这些日益增多的文件。企业面临着存储空间紧张、文件传输复杂、敏感信息泄露等挑战。自动化文件清理的需求日益凸显,这不仅关乎个人对高效工作环境的追求,更是企业…

绘唐3工具—让创作触手可及

绘唐AIGC(Artificial Intelligence Generated Creativity)是一种新兴的技术,通过人工智能生成创意,让创作更加触手可及。 绘唐3下载地址https://qvfbz6lhqnd.feishu.cn/wiki/KnRawcWQxiFrj5kC8lVcCEypnZc 绘唐AIGC结合了人工智能…

element-plus的form表单组件之checkbox组件

单个checkbox 绑定的响应式的值类型为bool类型,同一个组的checkbox多选其值对应值的数组,类型根据checkbox的value值而来。 label只用来显示具体的值,根据value属性来设置。 element-plus的checkbox提供多种特性。 如单选,多选…

B站广告开户投流是什么政策?要哪些资质?

B站(哔哩哔哩)作为年轻人喜爱的视频分享社区,其广告价值也日益凸显。为了更好地服务广告主,B站近日对广告开户投流政策进行了更新,云衔科技作为专业的数字营销服务商,也积极响应,为广告主提供一…

【java分布式计算】控制反转和依赖注入(DI IOC AOP)

考试要求:了解控制反转的基本模式,用依赖注入编写程序 目录 控制反转(Inversion of Control, IOC): 依赖注入(Dependency Injection, DI): 依赖注入的三种实现方式 具体的例子 …

C#——装箱与拆箱详情

装箱与拆箱 装箱: 将值类型转换成引用类型的过程; 拆箱: 把引用类型转为值类型的过程,就是拆箱 装箱 拆箱

韩顺平0基础学Java——第27天

p548-568 明天开始坦克大战 Entry 昨天没搞明白的Map、Entry、EntrySet://GPT教的 Map 和 Entry 的关系 1.Map 接口:它定义了一些方法来操作键值对集合。常用的实现类有 HashMap、TreeMap 等。 2. Entry接口:Entry 是 Map 接口的一个嵌…

LDO的原理及测试方法

一、基本结构 这是LM317芯片的核心,这个电路单元称为Bandgap Reference带隙基准源。属于模拟集成电路中的经典电路结构。 LDO拓扑结构图 常见的基本结构 利用VBE的负温度系数,而VT是正温度系数,正负温度系数抵消就的得到稳定的基准参考电压了(三极管的方程VBE=VT*In(lC/IS…

鄂州职业大学2024年成人高等继续教育招生简章

鄂州职业大学,作为一所享有盛誉的高等学府,一直以来都致力于为社会培养具备专业技能和良好素养的优秀人才。在成人高等继续教育领域,该校同样表现出色,为广大渴望继续深造、提升自身能力的成年人提供了宝贵的学习机会。 随着社会…

通过Socket通信实现局域网下Amov无人机连接与数据传输

1.局域网下的通信 1.1 局域网 厂家提供的方式是通过Homer图数传工具(硬件)构建的amov局域网实现通信连接. 好处是通信距离足够长,支持150m;坏处是"局部",无法访问互联网. [IMAGE:…

生信算法8 - HGVS转换与氨基酸字母表

HGVS 概念 HGVS 人类基因组变异协会(Human Genome Variation Society)提出的转录本编号,cDNA 参考序列(以前缀“c.”表示)、氨基酸参考序列(以前缀“p.”表示)。cDNA 中一种碱基被另一种碱基取代,以“>”进行表示,如:c.2186A&…

14-Kafka-Day03

第 5 章 Kafka 消费者 5.1 Kafka 消费方式 5.2 Kafka 消费者工作流程 5.2.1 消费者总体工作流程 一个消费者组中的多个消费者,可以看作一个整体,一个组内的多个消费者是不可能去消费同一个分区的数据的,要不然就消费重复了。 5.2.2 消费者…

达梦8 兼容MySQL语法支持非分组项作为查询列

MySQL 数据库迁移到达梦后,部分GROUP BY语句执行失败,报错如下: 问题原因: 对于Oracle数据库,使用GROUP BY时,SELECT中的非聚合列必须出现在GROUP BY后面,否则就会报上面的错误,达梦…

C++项目——负载均衡在线OJ

前言 学习了这么久的C/C与Linux,终于到了做项目的时候,想想还是有点小激动,哈哈哈哈哈。我们的目标是做一个跟leetcode、牛客类似的在线OJ系统,功能阉割了一些,比如说登录、论坛、求职等等。主要实现了提交题目与判定…

[问题记录]Qt使用QPainter在QImage、QBitmap、QPixmap上面绘图时出现杂色

目录 1. 问题现象 2. 问题原因 3. 解决方案 1. 问题现象 使用QPainter,在QImage上绘图,能明显看到顶部有杂色,在QBitmap上则更明显,唯一在QPicture上绘图没出现该问题。 代码 void Widget::paintImage() {QPainter painter;Q…

拉普拉斯矩阵对称归一化理解,通过一个简单的例子进行说明

拉普拉斯矩阵(Laplacian Matrix)是一个与图相关的矩阵,通常用于图分析、机器学习和信号处理等领域。它是由图的邻接矩阵或关联矩阵计算得出的。 对于一个无向图 G ( V , E ) G(V,E) G(V,E),它的拉普拉斯矩阵 L L L 可以表示为…