【问题标题】:Unity3d get Mouse Input Axisunity3d 获取鼠标输入轴
【发布时间】:2015-06-09 07:19:58
【问题描述】:

我想通过鼠标在 -20° 和 +20° 之间移动来旋转游戏对象。

我知道有可能通过 Input.GetAxis("Horizontal");Input.GetAxis("Vertical"); 返回介于 -11 之间的浮点值

如果有类似的东西就好了 Input.GetMouseAxis("Horizontal");Input.GetMouseAxis("Horizontal");

但我的输出不应该受到键盘的影响。 很抱歉,我对 Unity 及其 API 没有太多经验。

【问题讨论】:

  • 你也可以试试 Input.MousePosition() docs.unity3d.com/ScriptReference/Input-mousePosition.html
  • 鼠标是统一“捕获”的屏幕分辨率还是我应该如何将鼠标位置缩放到 -1 和 1 之间的值?
  • 我相当肯定,正如你所说,它是在分辨率内捕获的,试试 Debug.Log(Input.MousePosition());看看会发生什么,与 getaxisraw 相同。 (对不起,如果您已经开始这样做了)。
  • >鼠标移动时鼠标位置不变>鼠标位置似乎有点奇怪-左上角是[0,480]而不像winforms中的[0,0]:/,但在非全屏模式下,这些值可能会变为负数

标签: c# unity3d mouse


【解决方案1】:

鼠标在屏幕分辨率中是否统一“捕获”或者我应该如何 将鼠标位置缩放到 -1 和 1 之间的值?

在这种情况下,“normalizedSpeed”将是您的目标

public float mouseDistance;
public Vector2 mouseDown = -Vector2.one;

public float normalizedSpeed;

public void Update()
{
   if(Input.GetMouseButtonDown(0))
      mouseDown = Input.MousePosition();

   if(Input.GetMouseButtonUp(0))
      mouseDown = -Vector2.one;

   if(Input.GetMouseButton(0))
      normalizedSpeed = mouseDown != -Vector2.one ?
      Mathf.Clamp((mouseDown - Input.MousePosition()).sqrMagnitude, 0, (mouseDistance * mouseDistance)) / (mouseDistance * mouseDistance)
      : 0;
}

我使用 sqrMagnitude 代替距离,因为 distance() 中的 sqr 根调用占用大量内存,因此比较平方距离与彼此之间的速度更快

还请记住,我将其编写为伪代码,因此总体思路就是我的目标,我让您在语法上负责实现;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    • 2015-08-14
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 2017-10-19
    • 2019-03-21
    相关资源
    最近更新 更多