简体   繁体   中英

Unity move object in orbit of another object based on mouse(drag) position

I am working on a simulation that takes place in the universe.

What I want to achieve is to move (by mouse or touch) an object around the planet at a fixed distance.

I've tried to use the RotateAround function that Unity provides, however I don't know how to take the mouse position into consideration when using that function.

So what I did is the following. First I check if the mouse is pressed. If so I will get the mouse position and convert it to a position in the world space. I want to ignore the z because I don't want to move it in the z axis. But you could leave the z there if you want to move it in the z axis also.

Afterwards I check the direction from the planet to the mouse position. To keep it in orbit I will use the the fixed distance that is stored in maxDistance.

And finally if I want the object to look at the planet I will use LookAt.

public void Start()
{
    maxDistance = Vector3.Distance(planet.position, transform.position);
}

public void Update()
{
    if (Input.GetMouseButton(0))
    {
        var planetPos = planet.position;
        var t = transform;
        var mousePos = mainCamera.ScreenToWorldPoint(Input.mousePosition);
        mousePos = new Vector3(mousePos.x, mousePos.y, planetPos.z);
        var dir = (mousePos - planetPos).normalized;
        t.position = dir * maxDistance;
        t.LookAt(planetPos, Vector3.right);
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM