繁体   English   中英

Unity 基于鼠标(拖动)position 在另一个 object 的轨道上移动 object

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

我正在研究发生在宇宙中的模拟。

我想要实现的是(通过鼠标或触摸)以固定距离在地球周围移动 object。

我尝试使用 Unity 提供的RotateAround function,但是我不知道在使用 ZC1C425268E68385D1AB4ZZ4C17A94F 时如何考虑鼠标 position。

所以我做的是以下。 首先我检查鼠标是否被按下。 如果是这样,我将获得鼠标 position 并将其转换为世界空间中的 position。 我想忽略 z 因为我不想在 z 轴上移动它。 但是如果你也想在 z 轴上移动它,你可以把 z 留在那里。

然后我检查了从行星到鼠标 position 的方向。 为了让它保持在轨道上,我将使用存储在 maxDistance 中的固定距离。

最后,如果我想让 object 观察地球,我将使用 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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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