This is my second time posting about this code as I keep running into errors as I use it. I originally make this from a tutorial but idk what is wrong with it. I have not really been able to try anything as I am a newbie dev and just don't know what to do
public class Draggable : MonoBehaviour
{
Vector2 difference = Vector2.zero;
private void onm ouseDown()
{
difference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
}
private void onm ouseDrag()
{
transform.position = (Vector2) Camera.main.ScreenToWorldPoint(Input.mousePosition) - difference;
}
}
Here is a picture of the error:
CodePudding user response:
You need to change the Vector2 cast to
transform.position = ((Vector2) Camera.main.ScreenToWorldPoint(Input.mousePosition)) - difference;
Note the extra pair of wrapping parenthesis.
What is happening is that originally you were doing
transform.position = (Vector2) (Camera.main.ScreenToWorldPoint(Input.mousePosition) - difference);
This didn't work because ScreenToWorldPoint returns a Vector3 while difference is a Vector2. Now you will be casting the result of ScreenToWorldPoint to a Vector2 before the subtraction operation.
CodePudding user response:
Unity has implicit operator conversion between Vector2 and Vector3.
Camera.main.ScreenToWorldPoint(Input.mousePosition)
returns a Vector3.
difference
is a Vector2.
- is only implemented with either Vector2 - Vector2 or Vector3 - Vector3.
=> The compiler doesn't know whether
- it should rather convert the
differenceto aVector3and use theVector3 - Vector3operator - or it should convert the result of
Camera.main.ScreenToWorldPoint(Input.mousePosition)to aVector2and rather use theVector2 - Vector2operator
Long story short it seems you would want the second option so you need to explicit type cast not the result of the - but rather
(Vector2) Camera.main.ScreenToWorldPoint(Input.mousePosition)
so
transform.position = ((Vector2) Camera.main.ScreenToWorldPoint(Input.mousePosition)) - difference;

