シーンを再生すると、どこからともなくVuforiaBehaviourが呼ばれて鬱陶しいなと思っていたのですが、リフレクションで封殺できるみたいですね。
https://forum.unity.com/threads/do-not-run-vufory-when-the-application-starts.498351/page-2
使い方はシーン内の適当なオブジェクトにアタッチするだけです。
using UnityEngine; using UnityEngine.SceneManagement; using Vuforia; using System.Reflection; using System; public class VuforiaCameraIssueFix : MonoBehaviour { void Awake() { try { EventInfo evSceneLoaded = typeof(SceneManager).GetEvent("sceneLoaded"); Type tDelegate = evSceneLoaded.EventHandlerType; MethodInfo attachHandler = typeof(VuforiaRuntime).GetMethod("AttachVuforiaToMainCamera", BindingFlags.NonPublic | BindingFlags.Static); Delegate d = Delegate.CreateDelegate(tDelegate, attachHandler); SceneManager.sceneLoaded -= d as UnityEngine.Events.UnityAction<Scene, LoadSceneMode>; } catch (Exception e) { Debug.LogWarning("Cant remove the AttachVuforiaToMainCamera action: " + e.ToString()); } } }
ただ、封殺はできるんですが、スクリプトを外した時にどうやらリソース解放がうまくいっておらずUnityごと立ち上げなおさないとVuforiaが起動できなくなります。
VuforiaUtility.Deinitを使うとリソースを強制解放できるみたいなので、Editor拡張でEditor内実行できるようにしておくと楽になるかも。というのをちょっと作ってみているのでおいおい書けたらなと思っています。
もう一歩突っ込んで、AttachVuforiaToMainCameraがそもそもどこから呼ばれているのかは調べたいですね。
では、このAttachVuforiaToMainCameraはどこから呼ばれているのか??
PlatformRuntimeInitializationというクラスがあり、その中でRuntimeInitializeOnLoadMethod(詳細) 属性が指定されたメソッドInitPlatform内で、
SceneManager.sceneLoaded += new UnityAction<Scene, LoadSceneMode>(VuforiaRuntime.AttachVuforiaToMainCamera);
とシーン読み込み時に毎度AttachVuforiaToMainCameraが呼ばれています。はい、つまり不可避ですね。