在 Unity 中调用 Input.GetTouch(0).position 时出现不明确的错误

Getting ambiguous error when calling Input.GetTouch(0).position in Unity

我正在使用这段代码来获取投掷的方向:

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

我的问题是,当我尝试将其翻译为与触摸一起工作时,它给了我这个错误:

error CS0121: The call is ambiguous between the following methods or properties: UnityEngine.Vector2.operator -(UnityEngine.Vector2, UnityEngine.Vector2) and 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;

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

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

例如:

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

这并没有给我错误,但是如果我尝试在另一个语句中使用这个变量,就会发生错误。

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 - Vector2 是不可能的。您可以将一个 Vector3 减去另一个 Vector3,或者将一个 Vector2 减去另一个 Vector2,但不能将它们混合。

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