Unity Comment faire glisser un corps rigide à l'aide du curseur de la souris

Pour faire glisser Rigidbodies ​​avec le curseur de la souris, nous devons créer un script qui sera attaché à une caméra et détecter si un Rigidbody a été cliqué, si c'est le cas, il initialisera le mouvement de glisser.

Sharp Coder Lecteur vidéo

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;
    }
}

Installation

  • Attachez le script SC_DragRigidbody à n'importe quelle caméra
  • Placez les objets que vous souhaitez faire glisser devant la caméra (assurez-vous que les objets que vous avez l'intention de faire glisser ont un composant Rigidbody attaché).

Vous pouvez désormais faire glisser des corps rigides avec le curseur de la souris !

Articles suggérés
Travailler avec le composant Rigidbody de Unity
Comment détecter les collisions à l'aide du code dans Unity
Script C# pour créer un aimant à corps rigide dans Unity
Ajout de la physique des balles rebondissantes dans Unity
Implémentation d'un grappin 2D dans Unity
Création d'une simulation de drapeau dans Unity
Création d'un jeu de course basé sur la physique dans Unity