sswwqqaa
sswwqqaa

Reputation: 1616

Slowly moving gameobject to mouse position

I want to change the position of the object to the position of the mouse, moving slowly from first to second position.

My object is moving slowly to the random direction which appears to be connected with lower-left corner. When I go higher than the corner my object is moving upwards, same with left and right.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Rocket : MonoBehaviour
{
    public float speed = 10f;

    private Vector3 shippos;

    void Start()
    {
        shippos = transform.position;
    }

    void FixedUpdate()
    {
        if (Input.mousePosition.x > shippos.x)
            shippos.x=shippos.x+speed*Time.deltaTime;
        if (Input.mousePosition.x < shippos.x)
            shippos.x=shippos.x-speed*Time.deltaTime;
        if (Input.mousePosition.y > shippos.y)
            shippos.y=shippos.y+speed*Time.deltaTime;
        if (Input.mousePosition.y < shippos.y)
            shippos.y=shippos.y-speed*Time.deltaTime;
        transform.position = shippos;
    }
}

Upvotes: 1

Views: 1442

Answers (4)

ryeMoss
ryeMoss

Reputation: 4333

The mouse position is returned in screenspace coordinates. What you need to do is convert this to world coordinates so that they are compared in the same coordinate space as the transform (shippos).

void FixedUpdate()
{
    if (Camera.main.ScreenToWorldPoint(Input.mousePosition).x > shippos.x)
        shippos.x = shippos.x + speed * Time.deltaTime;
    if (Camera.main.ScreenToWorldPoint(Input.mousePosition).x < shippos.x)
        shippos.x = shippos.x - speed * Time.deltaTime;
    if (Camera.main.ScreenToWorldPoint(Input.mousePosition).y > shippos.y)
        shippos.y = shippos.y + speed * Time.deltaTime;
    if (Camera.main.ScreenToWorldPoint(Input.mousePosition).y < shippos.y)
        shippos.y = shippos.y - speed * Time.deltaTime;
    transform.position = shippos;
}

Upvotes: 3

amdev
amdev

Reputation: 7432

i guess you are doing wrong , because wile you have Mathf.Lerp you Dont need to go as that clumsy way
Here is a video tutorial from youtube for mathf.lerp


and here is the base code:

someValue = Mathf.Lerp(initialValue , finalValue , Time.deltaTime * smoothness);

just take a look to the youtube link you will definitely get the idea!

AS A SIDE NOTE
you dont need to do alot of stuff to decrease your game performance! be careful about this kinda coding!

Upvotes: 0

user6401627
user6401627

Reputation:

Taken from here: http://answers.unity3d.com/questions/633873/how-to-make-an-object-move-towards-the-mouse-point.html

public float moveSpeed = 2.0;  // Units per second

 void Update () {
         var targetPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
         targetPos.z = transform.position.z;
         transform.position = Vector3.MoveTowards(transform.position, targetPos, moveSpeed * Time.deltaTime);
     }

May not be accurate C#, but you get the idea.

Upvotes: 0

omer dogan
omer dogan

Reputation: 11

If I did not misunderstand, you want to change your player's position straight to the point of mouse's position and looking towards mouse.

void Update() {
    Transform target = mousePosition; //get your mouse position per frame
    Vector3 relativePos = target.position - transform.position; //create a vector3 between them
    Quaternion rotation = Quaternion.LookRotation(relativePos); //then give a rotation your player towards this vector.
    transform.rotation = rotation; //and apply it.
}

Upvotes: 0

Related Questions