我使用此代码来获取投掷的方向:
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;
这不会给我错误但是如果我尝试在另一个语句中使用此变量,则会发生错误。
答案 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)
Input.GetTouch(0).position
是Vector2。
Camera.main.WorldToScreenPoint
是Vector3。
所以你的Vector3 - Vector2是不可能的。您可以将Vector3减去另一个Vector3,或将Vector2减去另一个Vector2,但不要将它们混合。
您可以使用Camera.main.WorldToScreenPoint x和y分配新的Vector2,然后减去矢量。