Addforceを使って疑似引力
タイトルの通り、RigidbodyのAddforceメソッドを使って疑似引力を表現。こんな感じ。 赤マル(目標地点)に対して青マル(Ball)が近づくと引き付けられる様子。
※unity version 2017.2.1
仕組み
近づいているかどうか判断するために,赤マルにColliderをアタッチ。同様に青マルにもColliderとRigidbodyをアタッチ(今回は2Dなので2D用のものを)。
赤マルには以下のスクリプトもアタッチ。
using UnityEngine; public class Goal : MonoBehaviour { [SerializeField] float gravitation = 1f; Vector2 center; // Use this for initialization void Start () { center = transform.position; } void OnTriggerStay2D(Collider2D coll) { if (coll.tag != "Player") return; var ballPos = (Vector2)coll.transform.position; var diff = center - ballPos; var force = diff.normalized * gravitation; if (force == Vector2.zero) return; Debug.Log("force:"+force); coll.GetComponent<BallProvider>().Push(force); } }
やってることは、青マルの中心から赤マルの中心までのベクトルを算出して,その方向に力を加えるだけ。変数forceがそのベクトル。
青マル側はforceを受け取って、AddForceに適応させるだけ。
public void Push(Vector2 force) { rigidbody2D.AddForce(force); }
以上!
冒頭の画像は、パターゴルフで、ボールがカップインする様子(を表現したつもり)。ゴルフ以外にも、重力もののゲームに応用できそうかな...?