AにぶつかるとBが落ちてくる

提供: socialakiba wiki
移動: 案内検索

ぶつかると落ちてくるボールはもう理解しましたか? これは、 眠っているAにぶつかるとA自身が目を覚ますという例です。

では、Aにぶつかると眠っているBが目を覚ますようにするにはどうすれば良いでしょうか?(A≠B)

まず、スクリプトを一つ追加します。 真ん中下の Assets の空いたところを右クリックして create → C# script。 適当な名前で保存します。 名前は勝手に NewBehaviourScript.cs というような名前になると思います。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour {

    public Rigidbody2D ochimono;

	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
		
	}

    void OnCollisionEnter2D()
    {
        ochimono.WakeUp();
    }
}
   public Rididbody2D ochimono;

というのは、ochimono というパブリックな変数を用意したということです。 この変数は unity の inspector で値を仕込むことができます。

   void OnCollisionEnter2D()
   {
       ochimono.WakeUp();
   }

というのは、このスクリプトが仕込まれたオブジェクトの collider 2d で衝突が検出されたときに、 ochimono の目を覚まさせる、ということです。

Unity2d022.png

今、わかりやすいように、左側の「?」の箱の名前を hatena、 右側のボールの名前を boulder にしてあります(オブジェクトの名前を変えるには、Hierarchy で選択して右クリックで rename)。

あらかじめ boudler の inspector の rigidbody2D で sleeping mode を start asleep にしておきます。

左側の hatena の inspector にスクリプト NewBehaviourScript1.cs をドラッグアンドドロップしてコンポーネントに追加します。 その inspector の New Behaviour Script1 の中の、Ochimono という項目が None (Rigidbody 2D) となっていますが、これを boulder に変えます(右端のまるちょんをクリックしてメニューを出し、Assets と Scene タブがあるが、Scene から boulder を選択)。

これで、プレイヤーが hatena に触れると boulder が目を覚ますようになりました。


補足

OnCollisionEnter2D() は Collider2D で衝突が発生したときに呼ばれるコールバック関数です(コールバック関数とは、つまり、イベントが発生したときに呼ばれるメソッドのこと)。

gameObject とは、スクリプトを仕込んだ(add component した)オブジェクトそのもののことです。

GetComponent<Rididbody2D>() とは、そのオブジェクトのコンポーネントの Rigidbody2D のことです。

wakeup() は rigidbody2d の sleeping mode を awake にするメソッドです。

※注意

OnCollisionEnter2D() を OnCollisionEnter() と書いたり、 Rigidbody2D を Rigidbody と書くと、エラーは何もでませんがはまります(3Dと間違われる)。