- Home /
Question by
Favonius · Dec 08, 2015 at 12:00 PM ·
movementbugclick to move
Objects move toward the center of the screen right after it is created
So I'm not sure why my objects ware doing this. So when I instantiate my player object, it will move towards (0,0) before I click anywhere. I have a player controller script that will have my plyaer objects move when I click at a location. Does anybody know why it's doing this?
Here's my code
public class PlayerController : MonoBehaviour {
//Movement variables for player
public float moveSpeed;
public float moveVelocity;
private Vector3 target;
private Vector3 mousePosition;
private float targetDistance;
private Rigidbody2D rBody;
SpriteRenderer color;
GroundColor collision;
//Stats
public float health;
// Use this for initialization
void Start () {
rBody = GetComponent<Rigidbody2D>();
color = GetComponent<SpriteRenderer>();
color.color = new Color(0f, 1f, 0f, 1f);
collision = GetComponent<GroundColor>();
}
// Update is called once per frame
void Update () {
//Debug.Log("moving");
Move();
}
public void Move()
{
moveVelocity = 0f;
if (Input.GetMouseButtonDown(0))
{
target = Camera.main.ScreenToWorldPoint(Input.mousePosition);
target.z = transform.position.z;
}
transform.position = Vector3.MoveTowards(transform.position, target, moveSpeed * Time.deltaTime);
Vector3 dir = mousePosition - transform.position;
float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.AngleAxis(angle + 90.0f, Vector3.forward);
}
Comment
Best Answer
Answer by Fanttum · Dec 08, 2015 at 09:45 PM
0,0,0 is the default vector 3. So both mousePosition, and target = 0,0,0 on frame one.
You can change the default value when you initialize the variable, or make sure it won't move until you clicked at least once.
For example.
private bool clickedOnce = false;
public void Move()
{
moveVelocity = 0f;
if (Input.GetMouseButtonDown(0))
{
target = Camera.main.ScreenToWorldPoint(Input.mousePosition);
target.z = transform.position.z;
if (!clickedOnce) {
clickedOnce = true;
}
}
if (clickedOnce) {
transform.position = Vector3.MoveTowards(transform.position, target, moveSpeed * Time.deltaTime);
Vector3 dir = mousePosition - transform.position;
float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.AngleAxis(angle + 90.0f, Vector3.forward);
}
}
Or something like that.
Oh man thanks a lot that works. Why didn't I think of doing a bool to check if I've clicked..