【基本】衝突を作る

アルパカを重力で落下させ、床に乗せます。
衝突には、Rigidbody 2D
とCollider 2D
のコンポーネントが必要です。
1.Rigidbody 2D
をアタッチする

※衝突に重要なプロパティ
・Body Type : Dynamic
・物理演算で動くオブジェクトにはDynamic
を設定します。
・スクリプトで動くオブジェクトにはKinematic
を設定します。
・不動のオブジェクトにはStatic
を設定します。
・Simulated : ON
・OFFにした場合、物理演算がなくなり、衝突がなくなります。
・Gravity Scale
・オブジェクトに掛かる重力を設定します。
※床にもRigidbody 2D
をアタッチする場合は、デフォルトの設定では床が重力を受けて落下する挙動になります。また、Gravity Scale
を0に設定しても、アルパカの着地の力を受けて落下する挙動になる為、Body Type
をKinematic
またはStatic
に設定する必要があります。
2.Collider 2D
をアタッチする


3.実行する

使い分け
Is Trigger
がOFF = 衝突:OnCollision2D系のメソッド
Is Trigger
がON = 侵入:OnTrigger2D系のメソッド
※Collider 2D
をアタッチしたオブジェクト「いもむし」を追加して検証します。
1.Is Trigger
がOFF:OnCollision2D系のメソッド
・OnCollisionEnter2D
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.tag == "imomushi")
{
Debug.Log("アルパカ「こんにちは」");
}
}
※imomushi
タグを「いもむし」に設定し、「いもむし」との接触を検知してます
・OnCollisionStay2D
private void OnCollisionStay2D(Collision2D collision)
{
if (collision.gameObject.tag == "imomushi")
{
Debug.Log("いもむし「こんにちは」");
}
}
・OnCollisionExit2D
オブジェクトが接触(衝突)状態から離れたタイミングで呼び出されます。
private void OnCollisionExit2D(Collision2D collision)
{
if (collision.gameObject.tag == "imomushi")
{
Debug.Log("アルパカ「さようなら」");
}
}
2.Is Trigger
がON:OnTrigger2D系のメソッド
・OnTriggerEnter2D
private void OnTriggerEnter2D(Collider2D other)
{
if (other.gameObject.tag == "imomushi")
{
Debug.Log("アルパカ「こんにちは」");
}
}
・OnTriggerStay2D
private void OnTriggerStay2D(Collider2D other)
{
if (other.gameObject.tag == "imomushi")
{
Debug.Log("いもむし「君には僕が見えるのかい?」");
}
}
・OnTriggerExit2D
オブジェクトが接触(侵入)状態から離れたタイミングで呼び出されます。
private void OnTriggerExit2D(Collider2D other)
{
if (other.gameObject.tag == "imomushi")
{
Debug.Log("アルパカ「…(ぞわぞわ)」");
}
}