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"); } }
このスクリプトを下のようなオブジェクトにアタッチします。(画像はアタッチ済み)
もちろん、スクリプトは非アクティブにしていますー。
前提が長くなりましたが、今回は「再生ボタンを押して、下の画像のBallをぶつけるとどのようなログが残る...?」と言うお話です。
本題
いきなり結果
結果からどうぞ。と言うことでGIF画像をどーん。
スクリプトが非アクティブでもAwake()
とOnTriggerEnter2D()
は呼ばれていますね。
解明...?
オーバーライドしている関数が非アクティブでも(オーバーライドが)有効になっているのですかね...。OnTriggerEnter2D()
は良いとして、Awake()
は特殊なのでしょうか...うーむ...。
ちなみに
スクリプトをAwake()
とOnTriggerEnter2D()
だけにすると以下の画像のようにアクティブ状態を切り替えるボタンが無くなります!
おわり
結局、「この関数が生き残るんだ!」という法則らしいものはお見せ出来ませんでした...(´・ω・`。)スイマセン
...が!何か変な挙動をしていたら「スクリプトが生きているのかも?」と気にかけるきっかけになると嬉しいです^^。