在Unity中调用Input.GetTouch(0).position时出现模糊错误

时间:2015-06-25 06:02:08

标签: android vector input unity3d touch

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

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;

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

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

例如:

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

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

2 个答案:

答案 0 :(得分:0)

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;

答案 1 :(得分:0)

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

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