运算符“-”对于“Vector2”和“Vector3”类型的操作数不明确

1 c# 2d topdown unity-game-engine

target = transform.GetComponent<Camera>().ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, transform.position.z));
crosshairs.transform.position = new Vector2(target.x, target.y);

Vector2 difference = target - player.transform.position;
float rotationZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
player.transform.rotation = Quaternion.Euler(0.0f, 0.0f, rotationZ);
Run Code Online (Sandbox Code Playgroud)

der*_*ugo 6

错误信息非常清楚。

隐式(自动)转换Vector3-> ,Vector2反之亦然Vector2->Vector3 - 这意味着您基本上可以使用两种可交换的类型。

然而,该运算符-仅针对 或Vector3 - Vector3定义Vector2 - Vector2

所以编译器根本不明白你想使用哪一个。

知道那Transform.position是 aVector3我可以猜测那target是 a Vector2

因为你想让你的结果无论如何Vector2简单地显式转换

 Vector2 difference = target - (Vector2) player.transform.position;
Run Code Online (Sandbox Code Playgroud)

旁注:仅供参考,因为 Unity 中的向量是不需要new每次都使用的结构。

而不是例如

crosshairs.transform.position = new Vector2(target.x, target.y);
Run Code Online (Sandbox Code Playgroud)

你可以简单地做

crosshairs.transform.position = target;
Run Code Online (Sandbox Code Playgroud)

  • @JohnathanBarclay 很好,谢谢!我有点草率;) (2认同)