簡體   English   中英

當僅在x和z軸上拖放3d對象時,如何使其完全跟隨鼠標?

[英]When drag and dropping a 3d object on only the x and z axis, how do you let it follow the mouse exactly?

我只想在x和z軸上拖放對象。 到目前為止,代碼確實做到了這一點,只有對象的移動速度比鼠標慢。 如何使其完全跟隨鼠標?

由於我還不熟悉編碼,因此我嘗試將不同的代碼實現到我的代碼中,並嘗試根據所學知識對其進行編輯,但我無法弄清楚。

    Vector3 dist;
    Vector3 startPos;
    float posX;
    float posZ;
    float posY;
    void OnMouseDown()
    {
        startPos = transform.position;
        dist = Camera.main.WorldToScreenPoint(transform.position);
        posX = Input.mousePosition.x - dist.x;
        posY = Input.mousePosition.y - dist.y;
        posZ = Input.mousePosition.z - dist.z;
    }

    void OnMouseDrag()
    {
        float disX = Input.mousePosition.x - posX;
        float disY = Input.mousePosition.y - posY;
        float disZ = Input.mousePosition.z - posZ;
        Vector3 lastPos = Camera.main.ScreenToWorldPoint(new Vector3(disX, disY, disZ));
        transform.position = new Vector3(lastPos.x, 4.8f, lastPos.z);
    }

我希望該對象跟隨鼠標,但是它的移動方向與鼠標相同,只是速度較慢。

通過從指針到表面平面的光線投射,我將在世界空間中獲得一個起始位置。 然后拖動,進行相同的光線投射。 找到從第一個光線投射到當前光線投射的差異,並將其添加到對象的起始位置以獲取對象的新位置:

Vector3 dist;
Vector3 startPos;
Vector3 startIntersect;

bool clickedOnGround = false;

void OnMouseDown()
{
    clickedOnGround = false;
    startPos = transform.position;

    Ray cameraRay = Camera.main.ScreenPointToRay(Input.mousePosition);
    Plane groundPlane = new Plane(Vector3.down, new Vector3(0f, 4.8f, 0f)); 

    float planeHitDist;
    if (groundPlane.Raycast(cameraRay, out planeHitDist))  
    {
        clickedOnGround = true;

        startIntersect = cameraRay.GetPoint(planeHitDist);
    }
}

void OnMouseDrag()
{
    Ray cameraRay = Camera.main.ScreenPointToRay(Input.mousePosition);
    Plane groundPlane = new Plane(Vector3.down, new Vector3(0f, 4.8f, 0f)); 

    float planeHitDist;
    if (groundPlane.Raycast(cameraRay, out planeHitDist))  
    {
        Vector3 newIntersect = cameraRay.GetPoint(planeHitDist);
        transform.position = startPos + (newIntersect - startIntersect);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM