【问题标题】:Getting ambiguous error when calling Input.GetTouch(0).position in Unity在 Unity 中调用 Input.GetTouch(0).position 时出现模棱两可的错误
【发布时间】:2015-09-11 14:05:27
【问题描述】:

我正在使用此代码来获取投掷方向:

throwDirection = -(Camera.main.WorldToScreenPoint(hookedObject.transform.position) - 
Input.mousePosition)/(Camera.main.WorldToScreenPoint(hookedObject.transform.position) - 
Input.mousePosition).magnitude;

我的问题是当我尝试将其翻译为使用触摸时,它给了我这个错误:

错误 CS0121:以下方法或属性之间的调用不明确:UnityEngine.Vector2.operator -(UnityEngine.Vector2, UnityEngine.Vector2) 和 UnityEngine.Vector3.operator -(UnityEngine.Vector3, UnityEngine.Vector3)

这里是触摸版的代码,基本上只是把Input.mousePosition换成了Input.GetTouch(0).position

throwDirection = -(Camera.main.WorldToScreenPoint(hookedObject.transform.position) - 
Input.GetTouch(0).position)/(Camera.main.WorldToScreenPoint(hookedObject.transform.position)
- Input.GetTouch(0).position).magnitude;

我很困惑为什么会发生这个错误。我使用矢量 2 作为鼠标位置,使用矢量 2 作为触摸位置。然而这个错误只发生在代码的触摸版本上?每次我尝试使用Input.GetTouch(0).position 时,它都会出现两次。

当我尝试将 Input.GetTouch(0).position 保存到变量时,会发生相同的错误。但它只在我使用变量时发生,而不是在我存储变量时发生。

例如:

Vector2 touchPos = Input.GetTouch(0).position;

这不会给我错误但是如果我尝试在另一个语句中使用此变量,则会发生错误。

【问题讨论】:

    标签: android vector input unity3d touch


    【解决方案1】:

    hookedObject.transform.position 是 Vector3,而 Input.GetTouch(0).position 是 Vector2。

    mousePosition 实际上也是 Vector3,这就是该代码起作用的原因。

    可以将 Vector2 转换为 Vector3,反之亦然,这就是它模棱两可的原因。将触摸投射到 Vector3 应该可以解决您的问题。

        throwDirection = -
    (Camera.main.WorldToScreenPoint(hookedObject.transform.position) - (Vector3)
    Input.GetTouch(0).position)/(Camera.main.WorldToScreenPoint(hookedObject.transform.position)
    - (Vector3)Input.GetTouch(0).position).magnitude;
    

    【讨论】:

    • 将它转换为vector3肯定会消除我遇到的错误但我很困惑,如果Input.mousePosition是Vector3,Z包含什么信息? throwDirection 实际上是一个 Vector2,我认为我正在处理所有 vector2,因此我的光线投射已关闭。
    • 从 Vector2 到 Vector3 的转换将 z 设置为 0,从 Vector3 到 Vector2 它只是丢弃 z。因此,如果您只需要在屏幕上定位,您可以将 amera.main.WorldToScreenPoint 投射到 Vector2。
    【解决方案2】:

    所以你的 Vector3 - Vector2 是不可能的。您可以将 Vector3 减去另一个 Vector3,或将 Vector2 减去另一个 Vector2,但不能混合它们。

    您可以分配一个新的 Vector2,获取 Camera.main.WorldToScreenPoint x 和 y,然后减去您的向量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-18
      • 1970-01-01
      • 2014-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-21
      相关资源
      最近更新 更多