Unity でリジッドボディ マグネットを作成するための C# スクリプト

以下は、Unity のリジッドボディに対して magnet のような動作を生成するスクリプトです。

Sharp Coder ビデオプレーヤー

ステップ

  • という新しいスクリプトを作成し、SC_RigidbodyMagnet という名前を付けて、その中に以下のコードを貼り付けます。

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

  • 新しいゲームオブジェクトを作成し、それに SC_RigidbodyMagnet スクリプトを 割り当て します。
  • 新しく作成したオブジェクトに Sphere Collider を 追加し、それをトリガーとしてマークしてから、その半径を増やします
  • いくつかの Cube を作成し、Rigidbody コンポーネントをそれらに追加します

Play を押してから、SC_RigidbodyMagnet スクリプトを使用してオブジェクトをリジッドボディ上に移動します。リジッドボディがどのように引き込まれているかに注目してください。

おすすめの記事
Unity の Rigidbody コンポーネントの操作
Unity にバウンスボールの物理演算を追加する
Unity での物理ベースのレーシング ゲームの作成
Unity での 2D グラップリング フックの実装
Unity でフラグ シミュレーションを作成する
Unity ゲームでのマイニング メカニクスの実装
Rigidbody プレーヤーが Unity に固定されているかどうかを確認する方法