Unityで、あるシーンでプログラムを開始すると、最初に関数を起動する方法があるのだろうかと思っていました。どのシーンにいても、この1つの関数を機能させたいと付け加えなければなりません。つまり、単純なStart関数です。それをカットしません。 Unityでこれが可能かどうかわかりませんか?
public void ProgramBegins()
{
//FIRES FIRST ON ANY SCENE
//DO STUFF
}
RuntimeInitializeOnLoadMethodAttribute あなたを助けることができます:)
using UnityEngine;
class MyClass
{
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
static void OnBeforeSceneLoadRuntimeMethod()
{
Debug.Log("Before scene loaded");
}
}
プレハブを使用します_ AppStartupこれはスクリプトを持つ空のゲームオブジェクトですAppStartup。これをすべてのシーンにドラッグし、@ maZZZuが述べたように最初に実行されるようにAppStartupを構成します。
AppStartupは次のジョブを実行します。
シーン固有の初期化タスク
public class AppStartup : MonoBehaviour
{
const int bootSceneNo = 0;
public static bool veryFirstCallInApp = true;
void Awake ()
{
if (veryFirstCallInApp) {
ProgramBegins ();
if (Application.loadedLevel != bootSceneNo) {
// not the right scene, load boot scene and CU later
Application.LoadLevel (bootSceneNo);
// return as this scene will be destroyed now
return;
} else {
// boot scene stuff goes here
}
} else {
// stuff that must not be done in very first initialisation but afterwards
}
InitialiseScene ();
veryFirstCallInApp = false;
DestroyObject (gameObject);
}
void ProgramBegins()
{
// code executed only once when the app is started
}
void InitialiseScene ()
{
// code to initialise scene
}
}
したがって、必要なのは、このプレハブをすべてのシーンに手動でドラッグして、-1またはスクリプトの実行順序で指定することだけです。特にプロジェクトが成長し、事前定義されたシーンフローに依存している場合は、時間と手間を大幅に節約できます。
ここでは、すべての関数の実行順序を1つにまとめることができます: http://docs.unity3d.com/Manual/ExecutionOrder.html
Awake
は、スタンドアロンアプリケーションで実行される最初の関数です。実行するには、GameObject
関数を含むスクリプトが添付されたAwake
が必要です。シーンに関係なく実行したい場合は、これをすべてのシーンに追加する必要があります。
あなたはまだあなたのゲームのスタートアップシーンが何であるかを決定する必要があります。したがって、プログラムの開始時に実際に実行したい場合は、そこにGameObject
を追加するだけで十分です。
はい...
メソッドを[RuntimeInitializeOnLoadMethod]
で飾ります。
シーンの読み込みが完了するとすぐに呼び出されます(Awakeイベントの後)。
[RuntimeInitializeOnLoadMethod]
static void OnRuntimeMethodLoad() {
Debug.Log("After Scene is loaded and game is running");
}
ドキュメント: https://docs.unity3d.com/ScriptReference/RuntimeInitializeOnLoadMethodAttribute.html