Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查找模拟斗杆中心和当前位置之间的距离_C#_Unity3d - Fatal编程技术网

C# 查找模拟斗杆中心和当前位置之间的距离

C# 查找模拟斗杆中心和当前位置之间的距离,c#,unity3d,C#,Unity3d,我想知道玩家将Xbox控制器的模拟功能推到了什么程度 棍子。我不需要知道它被推的角度,只需要知道有多远。我希望它返回0到1的值。这里有一些例子 如果玩家将球杆完全向下推,它将返回1 如果斗杆位于中心,它将返回0 如果他们将斗杆推到底,但以45度角,斗杆仍会返回1 如果他们只将斗杆推到一半,并且以135度角,斗杆将返回0.5度 代码我已经试过了 new Vector2(Input.GetAxisRaw("Horizontal"),Input.GetAxisRaw("Vertical")).ma

我想知道玩家将Xbox控制器的模拟功能推到了什么程度 棍子。我不需要知道它被推的角度,只需要知道有多远。我希望它返回0到1的值。这里有一些例子

  • 如果玩家将球杆完全向下推,它将返回1
  • 如果斗杆位于中心,它将返回0
  • 如果他们将斗杆推到底,但以45度角,斗杆仍会返回1
  • 如果他们只将斗杆推到一半,并且以135度角,斗杆将返回0.5度
代码我已经试过了

new Vector2(Input.GetAxisRaw("Horizontal"),Input.GetAxisRaw("Vertical")).magnitude
我尝试了这段代码,尽管我并不真正理解它:-/

    float xAxis = (Input.GetAxis ("Player" + padNumber + "Horizontal"));
    float yAxis = (Input.GetAxis ("Player" + padNumber + "Vertical"));

    thumbStickDistance = Mathf.Sqrt(Mathf.Abs((xAxis*xAxis)+(yAxis*yAxis)));

但是,这两种方法都会根据推杆的角度返回不同的值。

您知道答案,但您可能认为没有,因为您希望看到不同的值。大小就是你想要的

首先,thumbStickDistance的公式正是Vector2的震级属性所做的。其次,GetAxis和GetAxisRaw之间的区别在于GetAxis应用了一些平滑。如果使用箭头键,这一点最为明显。GetAxis将上升和下降,而GetAxisRaw将立即跳到-1、0或1。你在xbox控制器上使用哪个并不重要

现在,水平轴和垂直轴都在-1范围内;1.如果xbox控制器操纵杆有一个方形移动区域,则两个轴都可以为1,并且可以测量的最大距离为sqrt(2)或大约1.414。如果控制器有一个完美的圆周运动区域,那么无论你往哪个方向推它,你能测量的最大距离都是1。事实证明,虽然xbox控制器更接近圆形而非方形,但两者都不是。我能测量到的最大距离约为1.16,这意味着我到达了中心圆外的一个点


所以我的建议是使用震级,如果需要的话,用它来限制值不超过1。另一种方法是校准控制器,这可能很复杂,每次切换控制器时都需要进行校准,因为即使在两个完全相同的xbox控制器之间也必然存在差异。

这只是毕达哥拉斯距离公式。您也不需要Abs()调用。您只需除以max axis值即可转换为0到1的范围。我查看了文档,很明显GetAxisRaw和GetAxis是不同的函数。我想这解释了不同的价值观,但我真的对统一一无所知。谢谢你的回答!我的数学不是很好,编程也是个初学者。我该怎么做你的建议呢?我想这两个版本可能会匹配,因为你在每个版本中使用了相同的轴函数。我觉得第二个是你想要的。看起来值的范围已经是-1到1了,所以根本不需要任何除法。使用这两个版本会给我一个不同的范围,这取决于斗杆的角度。两者都不能给我一个介于0和1之间的范围。我测试了他们两个,无论如何谢谢你的帮助。