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