Unityで指定エリア内で物体に力を加えてみます。指定範囲に風を吹かせるイメージです。AreaEffector2Dを利用していきます。
はじめに
Unityのバージョンは2021.3.14f1です。AreaEffector2Dを利用して実装します。
実装開始
初めに、キー操作で動くプレイヤーを作成してから、AreaEffectorエリアを設置していきます。
プレイヤー作成
まずは下記のように左右のキー操作でボールが動くのを作成します。
下記を参考に作成しています。
プレイヤー追加(オブジェクト追加)
「2D Object」→「Sprites」→「Circle」を追加します。
名前を「Player」に変更してAdd Componentから「Rigidbody 2D」と「Circle Collider 2D」をアタッチします。
スクリプト追加
下記スクリプトを作成してPlayerにアタッチします。キー入力で左右に動きます。
using UnityEngine; public class Player : MonoBehaviour { private float _PlayerSpeed = 5.0f; private Rigidbody2D _rb; private float InputX; private void Awake() { _rb = GetComponent<Rigidbody2D>(); } void Update() { InputX = Input.GetAxisRaw("Horizontal"); if (InputX != 0) _rb.AddForce(Vector2.right * InputX * _PlayerSpeed); } }
地面を作成
「2D Object」→「Sprite」→「Square」を追加。名前をgroundに変更します。
位置とスケールを変更して「Box Collider 2D」をアタッチして地面にします。これでキー操作をすると地面の上をボールが転がります。
エリアを作成
次に力を加えるエリアを作成します。
「2D Object」→「Sprites」→「Square」を追加。位置、スケールを変更しておきます。
「Box Collider 2D」と「Area Effector 2D」をアタッチします。下記のように「Box Collider 2D」のisTriggerとUsedByEffectorにチェックを入れます。
「AreaEffector2D」の値を下記のように変更します。ForceAngleは力の方向、ForceMagnitudeは力の強さですね。
この状態で試しに動かしてみると、ボールが通る時に下から風が吹いているような力が加わります。
下記のように壁を設置すると、壁を超えることもできます。範囲や方向を変えると色々な場面で使えそうですね。