freedom667
freedom667

Reputation: 29

2D top-down point and click movement and rotation in Unity3D

I'm working on point and click car movement but I could did movement only hold click to car. I want to move the car when i click any point. I wrote this code. Also is it possible smoothly rotation? because there is skidmark of car and when i turning the car, it suddenly turning can you help me?

void Update()
{
    mousePosition = Input.mousePosition;
    mousePosition = Camera.main.ScreenToWorldPoint(mousePosition);
    marker.position = mousePosition;
    if (Input.GetMouseButton(0))
    {
        moveToPosition = true;
    }
    else if (Input.GetMouseButtonUp(0))
    {
        moveToPosition = false;
        SoundManagerScript.stopCarAudioSource.Play();
        SoundManagerScript.loopEngineAudioSource.Stop();
    }

    if (moveToPosition)
    {
        direction = new Vector2(mousePosition.x - transform.position.x, mousePosition.y - transform.position.y);
        transform.position = Vector2.Lerp(transform.position, mousePosition, moveSpeed);
        if (Vector3.Distance(transform.position, mousePosition) < 100f)
        {
            moveToPosition = false;
        }
        transform.up = direction * moveSpeed;
    }
}

Upvotes: 0

Views: 798

Answers (1)

Ryanas
Ryanas

Reputation: 1827

Currently you've only got code going into the OnMouseDrag function and you're using Vector.Lerp incorrectly. Look here but long story short, lerp needs to be constantly updated either via Update or a IEnumerable.

To give a very simple example, I would suggest trying something like this;

//get your click to register to this function
void OnMouseClick()
{
    moveToPosition = true;
    mousePosition = Input.mousePosition;
    mousePosition = Camera.main.ScreenToWorldPoint(mousePosition);
}

void Update()
{
    if(moveToPosition)
    {
        increase += Time.deltaTime;
        direction = new Vector2(mousePosition.x - transform.position.x, mousePosition.y - transform.position.y);
        transform.position = Vector2.Lerp(transform.position, mousePosition, moveSpeed);
        Vector3 newDir = Vector3.RotateTowards(transform.forward, direction, step, 0.0F);
        transform.rotation = Quaternion.LookRotation(newDir);
        if(Vector3.Distance(transform.position, mousePosition) < 5f)
        {
            moveToPosition = false;
        }

    }
}

It is untested but is basic enough to get you going on seeing something move.

Upvotes: 2

Related Questions