在 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;
Input.GetTouch(0).position
是一个 Vector2.
Camera.main.WorldToScreenPoint
是一个 Vector3.
所以你的 Vector3 - Vector2 是不可能的。您可以将一个 Vector3 减去另一个 Vector3,或者将一个 Vector2 减去另一个 Vector2,但不能将它们混合。
您可以使用 Camera.main.WorldToScreenPoint x 和 y 分配一个新的 Vector2,然后减去您的向量。
我正在使用这段代码来获取投掷的方向:
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;
Input.GetTouch(0).position
是一个 Vector2.Camera.main.WorldToScreenPoint
是一个 Vector3.
所以你的 Vector3 - Vector2 是不可能的。您可以将一个 Vector3 减去另一个 Vector3,或者将一个 Vector2 减去另一个 Vector2,但不能将它们混合。
您可以使用 Camera.main.WorldToScreenPoint x 和 y 分配一个新的 Vector2,然后减去您的向量。