Re: [问题] FPS inner deadzone size设定问题

楼主: cjcat2266 (CJ Cat)   2018-07-13 03:39:55
※ 引述《ts00139161 (Freedom)》之铭言:
: 最近在玩一个FPS 调整设定的时候有两个设定一直看不懂
: 原文是inner deadzone size 跟 outer deadzone size
: 不知道有没有大大知道这个设定是在调整什么的
: 拿去GOOGLE也看不太懂他的意思QQ
这是用来把类比摇杆输入资讯的误差和噪声滤掉的选项
是个通用概念,不尽限于FPS
几乎每个游戏都会用dead zone,只差有没有开放让玩家调整的选项
假设理想类比摇杆 置中位置座标为(0, 0)
正左为(-1, 0) 正右为(1, 0) 正下为(0, -1) 正上为(0, 1)
硬件不可能是完美的
摇杆置中的时候,可能传给主机的座标是(0.043, -0.027),加上微小的类比噪声
要是不忽略这种小误差和噪声
有些游戏就会当作使用者有输入,出现角色或光标自己飘移的线项
把inner dead zone size调大,就是叫游戏忽略较大的(0, 0)周边噪声
摇杆要是维持在inner dead zone内,游戏收到的讯号就一直是(0, 0)
另外,摇杆推到最右边,基于硬件的不完美性,有可能得到的座标是(0.9, 0)
导致角色或光标有可能无法以最高速度移动
调整outer dead zone size,可以叫游戏把进入范围内的讯号重新定义为1
像是超过0.85之后相当于1
这样的话就算摇杆只能推到产生0.9的讯号,游戏也将其会视为1
理想上inner dead zone要调成比置中误差稍微大一点
outer dead zone要调成比摇杆转一圈能够达到的座标离原点的最小距离小一点
介于两个dead zone之间的值,会用某种内插方式正规化
让被修正过后的讯号仍然保持连续变动性
如果游戏采用线性内插,那算式和程式就大概长这样:
// 输入方向 (为精简,在此忽略零向量特例)
inputDirection = Normalize(inputVector);
// 输入量
inputMagnitude = Magnitude(inputVector);
// 线性内插算新输入量
newMagnitude =
(inputMagnitude - innerDeadZone) / (outerDeadZone - innerDeadZone);
// 把新输入量限制在[0, 1]之间
newMagnittude = Clamp(newMagnitude, 0, 1);
// 新输入向量为 新输入量 乘以 输入方向
newInputVector = newMagnitude * inputDirection;
作者: ShibaMiyuki (司波深雪)   2018-07-13 03:42:00
长知识了
作者: huichieh (the gooner)   2018-07-13 09:39:00
长知识了
作者: OROCHI97 (OROCHI97)   2018-07-13 17:07:00
专业推
作者: isorange (桔)   2018-07-14 02:25:00
长知识推
作者: itsdelovely (It's De-Lovely)   2018-07-14 09:31:00

Links booklink

Contact Us: admin [ a t ] ucptt.com