渐进式隆隆声与setmotorspeed



我正在制作游戏元素,并希望执行一个开锁系统。用户将保持左摇杆的位置,然后旋转右摇杆到一个特定的角度。重复三次,进行三个阶段的锁定。没有什么特别的突破,我们都玩过这样的游戏,但我这么做是为了学习。

到目前为止,我让它工作,但我想添加振动。振动开始时应该很弱,当你接近目标"X"one_answers"Y"位置时,会变得更强。可能会有一个小小的"点击"。振动一旦阶段完成。你认为实现这一目标的最佳方式是什么?

这里有一小段代码来展示正在发生的事情的基础,我使用,Vector2 stickR = Gamepad.current.rightStick.ReadValue();允许我检查goalXmin,goalYmingoalYmax的位置。我使用最大值和最小值给用户一点回旋的余地,因为它几乎不可能得到确切的浮动位置,例如:

if ((stickR.x > goalXmin) && (stickR.y > goalYmin && stickR.y < goalYmax)) 
{
Lock is solved. 
I assume stop rumble will then be used, or the 'click' rumble will be played
Gamepad.current.SetMotorSpeeds(0f, 0f); 
}

所以,话虽如此,我假设我需要使用goalYmingoalYmax值,并以某种方式将它们输入Gamepad.current.SetMotorSpeeds()经过某种形式的调整?

任何帮助都是了不起的。

提前感谢,

您可以通过获取用户输入的点与定义目标的两个点之间的距离来实现。取最短的一个,相应地缩放它,并把它交给SetMotorSpeeds()函数。

我们需要缩放它,因为函数setmotorspeed()需要0到1之间的值,而控制器的输入在两个轴上都在-1,1的范围内。

假设目标x和y的位置在-1和1之间,stickkr是一个Vector2,目标是Vector2,你可以这样做:

float distance = Mathf.Min(Vector2.Distance(stickR, goal1), Vector2.Distance(stickR, goal2);
float convertedDistance = distance / 2;
Gamepad.current.SetMotorSpeeds(1 - convertedDistance, 1 - convertedDistance);

第一行代表球杆位置与目标之间的最小距离。

然后我们使用公式z = (x - min) / (max - min)转换距离,其中x是我们想要转换的值,z是[0,1]范围内的值,min是x所在区间的最小值,max是最大值,在我们的例子中[0,2],因为点的最大距离可以是2,最小值是0。简化表达式得到x/2。

最后一行我们使用转换后的值来震动控制器

注意:我们使用1 - convertedDistance是因为我们希望隆隆声随着距离的增加而减弱,如果你想要相反的效果,只需删除1 -

如果有什么不清楚的地方请告诉我:)

最新更新