如何修复Unity3D中沿着平面移动对象的代码?

2g32fytz  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(128)

我尝试在Unity3D中沿着平面移动对象,以便对象的y位置固定在平面上,x和z根据鼠标的左右/上下移动而移动。
看起来代码 * 几乎 * 在那里,但是鼠标的上/下移动有一个缩放问题。
左右移动对象正常工作,如下所示:The mouse behavior is shown in red.使用鼠标前后或上下移动对象时,缩放不正确,如下所示:The mouse is at the x, but the capsule is not aligned with the mouse.理想情况下,鼠标应该更好地与对象的位置相对应,如下所示:The y of the mouse and the far-backness of the object should align.
我认为上下移动鼠标的代码中存在缩放错误。
代码如下所示。

private void FixedUpdate()
    {
        transform.localPosition = GetMouseAsWorldPoint() + mOffset; 
    }

    void OnMouseDown()
    {
        mZCoord = Camera.main.WorldToScreenPoint(gameObject.transform.position).z;
        mOffset = gameObject.transform.localPosition - GetMouseAsWorldPoint();
    }

   
    private Vector3 GetMouseAsWorldPoint()
    {
        Vector3 mousePoint = Input.mousePosition;
        mousePoint.z = mZCoord;
        mousePoint = Camera.main.ScreenToWorldPoint(mousePoint);
        mousePoint.y = plane.GetComponent<Transform>().position.y;
        return mousePoint;
    }
uoifb46i

uoifb46i1#

我想你有这些问题是因为相机的旋转。
此代码在0,0,0处创建一个平面,并从摄影机射出一条光线,并获得光线与平面相交的位置。

void Update()
{
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    Plane plane = new Plane(Vector3.up, Vector3.zero);
    float distance = 0;
    if (plane.Raycast(ray, out distance))
    {
        transform.position = ray.GetPoint(distance);
    }
}

https://answers.unity.com/questions/269760/ray-finding-out-x-and-z-coordinates-where-it-inter.html

相关问题