Script C# pour créer un aimant à corps rigide dans Unity

Vous trouverez ci-dessous le script qui génère un comportement de type aimant envers les corps rigides dans Unity:

Sharp Coder Lecteur vidéo

Pas

  • Créez un nouveau script, appelez-le SC_RigidbodyMagnet puis collez-y le code ci-dessous:

SC_RigidbodyMagnet.cs

using System.Collections.Generic;
using UnityEngine;

public class SC_RigidbodyMagnet : MonoBehaviour
{
    public float magnetForce = 100;

    List<Rigidbody> caughtRigidbodies = new List<Rigidbody>();

    void FixedUpdate()
    {
        for (int i = 0; i < caughtRigidbodies.Count; i++)
        {
            caughtRigidbodies[i].velocity = (transform.position - (caughtRigidbodies[i].transform.position + caughtRigidbodies[i].centerOfMass)) * magnetForce * Time.deltaTime;
        }
    }

    void OnTriggerEnter(Collider other)
    {
        if (other.GetComponent<Rigidbody>())
        {
            Rigidbody r = other.GetComponent<Rigidbody>();

            if(!caughtRigidbodies.Contains(r))
            {
                //Add Rigidbody
                caughtRigidbodies.Add(r);
            }
        }
    }

    void OnTriggerExit(Collider other)
    {
        if (other.GetComponent<Rigidbody>())
        {
            Rigidbody r = other.GetComponent<Rigidbody>();

            if (caughtRigidbodies.Contains(r))
            {
                //Remove Rigidbody
                caughtRigidbodies.Remove(r);
            }
        }
    }
}

  • Créez un nouveau GameObject et attribuez-lui le script SC_RigidbodyMagnet
  • Ajoutez un Sphere Collider à un objet nouvellement créé, marquez-le comme Trigger puis augmentez son rayon
  • Créez quelques cubes et ajoutez-leur un composant Rigidbody

Appuyez sur Play puis déplacez l'objet avec le script SC_RigidbodyMagnet sur les corps rigides, remarquez comment les corps rigides sont attirés.

Articles suggérés
Travailler avec le composant Rigidbody de Unity
Créer un lance-roquettes dans Unity
Ajout de la physique des balles rebondissantes dans Unity
Création d'un jeu de course basé sur la physique dans Unity
Implémentation d'un grappin 2D dans Unity
Implémentation de la mécanique minière dans le jeu Unity
Comment détecter les collisions à l'aide du code dans Unity