Unity でリジッドボディ マグネットを作成するための C# スクリプト
以下は、Unity のリジッドボディに対して magnet のような動作を生成するスクリプトです。
ステップ
- という新しいスクリプトを作成し、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 スクリプトを使用してオブジェクトをリジッドボディ上に移動します。リジッドボディがどのように引き込まれているかに注目してください。