Operator '-' is ambiguous on operands of type 'Vector2' and 'Vector3'

Viewed 124
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);
1 Answers

The error message is quite clear.

There are implicit (automatic) conversions Vector3 -> Vector2 and wise versa Vector2 -> Vector3 - meaning you can basically use both types exchangeable.

The operator - however is only defined for either Vector3 - Vector3 or Vector2 - Vector2.

So the compiler simply doesn't understand which one you want to use.

Knowing that Transform.position is a Vector3 I can guess that target is a Vector2.

And since you want to have your result as a Vector2 anyway simply convert explicitly

 Vector2 difference = target - (Vector2) player.transform.position;

Sidenote: Just fyi since vectors in Unity are structs you don't need to use new everytime.

Instead of e.g.

crosshairs.transform.position = new Vector2(target.x, target.y);

you can simply do

crosshairs.transform.position = target;
Related