Unity So ziehen Sie einen starren Körper mit dem Mauszeiger

Um Rigidbodies ​​mit dem Mauszeiger zu ziehen, müssen wir ein Skript erstellen, das an eine Kamera angehängt wird und erkennt, ob auf einen Rigidbody geklickt wurde. Wenn ja, wird die Ziehbewegung initialisiert.

Sharp Coder Videoplayer

SC_DragRigidbody.cs

using UnityEngine;

public class SC_DragRigidbody : MonoBehaviour
{
    public float forceAmount = 500;

    Rigidbody selectedRigidbody;
    Camera targetCamera;
    Vector3 originalScreenTargetPosition;
    Vector3 originalRigidbodyPos;
    float selectionDistance;

    // Start is called before the first frame update
    void Start()
    {
        targetCamera = GetComponent<Camera>();
    }

    void Update()
    {
        if (!targetCamera)
            return;

        if (Input.GetMouseButtonDown(0))
        {
            //Check if we are hovering over Rigidbody, if so, select it
            selectedRigidbody = GetRigidbodyFromMouseClick();
        }
        if (Input.GetMouseButtonUp(0) && selectedRigidbody)
        {
            //Release selected Rigidbody if there any
            selectedRigidbody = null;
        }
    }

    void FixedUpdate()
    {
        if (selectedRigidbody)
        {
            Vector3 mousePositionOffset = targetCamera.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, selectionDistance)) - originalScreenTargetPosition;
            selectedRigidbody.velocity = (originalRigidbodyPos + mousePositionOffset - selectedRigidbody.transform.position) * forceAmount * Time.deltaTime;
        }
    }

    Rigidbody GetRigidbodyFromMouseClick()
    {
        RaycastHit hitInfo = new RaycastHit();
        Ray ray = targetCamera.ScreenPointToRay(Input.mousePosition);
        bool hit = Physics.Raycast(ray, out hitInfo);
        if (hit)
        {
            if (hitInfo.collider.gameObject.GetComponent<Rigidbody>())
            {
                selectionDistance = Vector3.Distance(ray.origin, hitInfo.point);
                originalScreenTargetPosition = targetCamera.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, selectionDistance));
                originalRigidbodyPos = hitInfo.collider.transform.position;
                return hitInfo.collider.gameObject.GetComponent<Rigidbody>();
            }
        }

        return null;
    }
}

Aufstellen

  • Hängen Sie das SC_DragRigidbody-Skript an eine beliebige Kamera an
  • Platzieren Sie die Objekte, die Sie ziehen möchten, vor der Kamera (Stellen Sie sicher, dass die Objekte, die Sie ziehen möchten, über eine Rigidbody-Komponente verfügen).

Jetzt können Sie Starrkörper mit dem Mauszeiger ziehen!

Empfohlene Artikel
Arbeiten mit der Rigidbody-Komponente von Unity
So erkennen Sie Kollisionen mithilfe von Code in Unity
Hinzufügen der Hüpfballphysik in Unity
Erstellen einer Flaggensimulation in Unity
So überprüfen Sie, ob ein Rigidbody-Spieler in Unity geerdet ist
Erstellen eines Raketenwerfers in Unity
Die Physik hinter Raycasting in Unity