ぱふの自由帳

ぱふの技術ブログ。メインはUnity。最近はUnity1Weekの放送してます。良ければフォローお願いします、、

Scriptを非アクティブにしても生き残る関数たち

はじめに

まず下のスクリプトを見て下さい。

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

public class Test : MonoBehaviour {

    void Awake(){
        Debug.Log ("Awake");
    }

    void Start(){
        Debug.Log ("Start");
    }

    void Update(){
        Debug.Log ("Update");
    }

    void OnTriggerEnter2D(Collider2D other){
        Debug.Log ("OnTriggerEnter2D");
    }

}

このスクリプトを下のようなオブジェクトにアタッチします。(画像はアタッチ済み)
もちろん、スクリプトは非アクティブにしていますー。

f:id:PafuOfDuck:20171018131450p:plain

前提が長くなりましたが、今回は「再生ボタンを押して、下の画像のBallをぶつけるとどのようなログが残る...?」と言うお話です。

f:id:PafuOfDuck:20171018131712p:plain

本題

いきなり結果

結果からどうぞ。と言うことでGIF画像をどーん。

f:id:PafuOfDuck:20171018135403g:plain

スクリプトが非アクティブでもAwake()OnTriggerEnter2D()は呼ばれていますね。

解明...?

オーバーライドしている関数が非アクティブでも(オーバーライドが)有効になっているのですかね...。OnTriggerEnter2D()は良いとして、Awake()は特殊なのでしょうか...うーむ...。

ちなみに

スクリプトAwake()OnTriggerEnter2D()だけにすると以下の画像のようにアクティブ状態を切り替えるボタンが無くなります!

f:id:PafuOfDuck:20171018143615p:plain

おわり

結局、「この関数が生き残るんだ!」という法則らしいものはお見せ出来ませんでした...(´・ω・`。)スイマセン
...が!何か変な挙動をしていたら「スクリプトが生きているのかも?」と気にかけるきっかけになると嬉しいです^^。