Behaviourをカスタムする - Katsuya100/SceneLayer-Trial GitHub Wiki

概要

シーンレイヤーは3種類のデータを組み合わせることによって構成されています。

  • Layer
    一画面の単位を表すデータ
  • Transition
    Layer間の遷移を表すデータ
  • Loader
    Layer内の構成要素を表すデータ

これらのデータはMonoBehaviourと同じように、
カスタマイズ可能なBehaviourとなっており、継承して自由に実装できます。
プリセットでいくつかのカスタムBehaviourも用意されており、
それを使えばコードレスに実装することも可能ですが、
より柔軟なゲーム開発においては、プロジェクトに応じたカスタムが必要になると思われます。

このページでは、カスタムBehaviourの作成方法を解説します。

Layerのカスタム

Layerをカスタムするには LayerBehaviour を継承します。
Layerは一画面の単位を表すデータですので、
従来、シーンのルートに配置されがちだった不格好なコンポーネントが不要になります。
また、画面遷移の際に、データを転送する場合、
従来は「Unload前にDontDestroyOnloadにデータを逃がす」といった一手間が必要でしたが、
すべてのLayerは常時オンメモリなので「Layerに保持したデータをそのまま次のLayerに引き継ぐ」
といったことが可能になります。

Scriptの作成

image

  1. Projectビュー上で[右クリック > Create > SceneLayer > Layer Behaviour]を選択。
  2. LayerBehaviourの名前を入力( Title 等)
  3. SceneLayerEditor上を右クリック
  4. Layerを作成し、Inspectorから BehaviourType を選択
  5. 先程作ったScriptを設定する。
    image

イベント関数

OnInitialize

初期化処理。
一回だけ呼び出される。

OnEntry

Layer入場時処理
シーンを開くたびに行いたい初期化処理はここに書く。

OnExit

Layer退出時処理
シーンから出るたびに行いたい破棄処理はここに書く。

OnUpdate

Layerの更新処理。
OnEntry~OnExitの間、毎フレーム呼ばれる。

OnTransit系

遷移処理を記載するコールバック郡。
コルーチンになっており、このコールバックが完了するまで遷移は完了しない。
そのため、手動でロードしたいものがある場合や、
遷移中演出を用意したい場合はここに記載できる。

各イベント関数ごとの呼び出しタイミング、Layerの規則は下記の通り

イベント関数 タイミング 呼び出しLayer
OnPreTransitFrom 遷移開始前 遷移先
OnPreTransitTo 遷移開始前 遷移元
OnTransitFrom 遷移中 遷移先
OnTransitTo 遷移中 遷移元
OnPostTransitFrom 遷移終了後 遷移先
OnPostTransitTo 遷移終了後 遷移元
OnPreParentTransitFrom 親Layerの遷移開始前 遷移先の子Layer
OnPreParentTransitTo 親Layerの遷移開始前 遷移元の子Layer
OnParentTransitFrom 親Layerの遷移中 遷移先の子Layer
OnParentTransitTo 親Layerの遷移中 遷移元の子Layer
OnPostParentTransitFrom 親Layerの遷移終了後 遷移先の子Layer
OnPostParentTransitTo 親Layerの遷移終了後 遷移元の子Layer
OnPreChildTransit 子Layerの遷移開始前 遷移先と遷移元の親Layer
OnChildTransit 子Layerの遷移中 遷移先と遷移元の親Layer
OnPostChildTransit 子Layerの遷移終了後 遷移先と遷移元の親Layer

遷移中 … OnExitからOnEntryの間
遷移開始前 … OnExit以前
遷移終了後 … OnEntry以降
より詳しくはシーケンスイベントを参照してください。

OnCheckError

エラーチェック処理。
入力されたパラメーターにエラーがある場合、
渡された引数にエラー情報を追加すると、
エディタ上で確認できる他、起動時に実行時エラーとして検出できる。

// 第一引数:エラーメッセージ(必須)
// 可変長引数:原因となったSerializeFieldがある場合、そのField名
result.Add(new ErrorObject("Error Message.", nameof(_reasonMember)));

OnDuplicatedAsset(エディタ用)

アセット複製時処理。
複製元が引数で渡されるため
複製時に引き継ぎたい値があればコピーできる。

OnChangeBehaviourTo(エディタ用)

Behaviour変更時処理。
変更後のLayerBehavoiurに引き継ぎたい値があればここでコピーできる。

Transitionのカスタム

Transitionをカスタムするには TransitionBehaviour を継承します。
Transitionをカスタムすると、遷移条件をプログラマブルに記載することが可能になります。
また、遷移時のイベントを記載できるので「遷移中にキャッシュクリアを行う」などの、共通処理をまとめて書くことも可能です。

Scriptの作成

image

  1. Projectビュー上で[右クリック > Create > SceneLayer > Transition Behaviour]を選択。
  2. Transitionの名前を入力
  3. SceneLayerEditor上で、Layerを右クリック
  4. Transitionを作成し、Inspectorから BehaviourType を選択
  5. 先程作ったScriptを設定する。
    image

イベント関数

IsTransitable(必須)

Transitionが有効な場合、この関数は毎フレームチェックされる。
遷移可能になったときにtrueをreturnすると、遷移が実行される。

OnInitialize

初期化処理。
一回だけ呼び出される。

OnTransit系

遷移処理を記載するコールバック郡。
コルーチンになっており、このコールバックが完了するまで遷移は完了しない。
そのため、遷移が完了するまでに行っておきたい処理があればここに記載する。

イベント関数 タイミング
OnPreTransit 遷移開始前
OnTransit 遷移中
OnPostTransit 遷移終了後

遷移中 … OnExitからOnEntryの間
遷移開始前 … OnExit以前
遷移終了後 … OnEntry以降
より詳しくはシーケンスイベントを参照してください。

OnCheckError

エラーチェック処理。
入力されたパラメーターにエラーがある場合、
渡された引数にエラー情報を追加すると、
エディタ上で確認できる他、起動時に実行時エラーとして検出できる。

// 第一引数:エラーメッセージ(必須)
// 可変長引数:原因となったSerializeFieldがある場合、そのField名
result.Add(new ErrorObject("Error Message.", nameof(_reasonMember)));

OnDuplicatedAsset(エディタ用)

アセット複製時処理。
複製元が引数で渡されるため
複製時に引き継ぎたい値があればコピーできる。

OnChangeBehaviourTo(エディタ用)

Behaviour変更時処理。
変更後のTransitionBehaviourに引き継ぎたい値があればコピーできる。

Loaderのカスタム

Loaderをカスタムするには LoaderBehaviour を継承します。
Loaderは登録されたLayerにおける画面要素をロード、生成、破棄、解放する役割を持っています。
しかし、実際のアセット管理はプロジェクトによって様々なため、
カスタムすることによって、プロジェクト固有のアセットマネージャーを経由する事になると考えられます。

Scriptの作成

image

  1. Projectビュー上で[右クリック > Create > SceneLayer > Loader Behaviour]を選択。
  2. Loaderの名前を入力( AssetLoader 等)
  3. Scriptを開き、好きな処理を記載する。
  4. LayerのInspectorを開く
  5. [+]ボタンからLoaderを作成し、BehaviourTypeを選択
  6. 先程作ったScriptを設定する。
    image

イベント関数

GetInstance(必須)

生成したインスタンスを返却する。

GetInstanceType(必須)

生成するインスタンスの型を返却する。
不明な場合はobjectで良いが、なるべく絞り込まれていることが望ましい。
絞り込まれている場合、「LoaderのインスタンスイベントをLayerで受け取る」で活用しやすくなる。

Load(必須)

ロード処理。
自前のロード処理やアセットマネージャーを使いたい場合はここに書く。
(LayerBehaviour.OnTransit系にロード処理を書いてもいいが、
ここに書けばプリロードに対応できるためオススメ)
また、対象の定まっていないアセットを複数まとめてロードするといったことも可能。

Unload(必須)

解放処理。

InstantiateObject(必須)

ロードしたオブジェクトを使用可能な状態にする。
GameObjectであれば、Instantiate。
Sceneであれば、LoadSceneAsync。
BGMであれば、ここで再生開始しても良い。

DestroyObject(必須)

InstantiateObjectで生成したインスタンスの破棄を行う。

OnInitialize

初期化処理。
一回だけ呼び出される。

OnCheckError

エラーチェック処理。
入力されたパラメーターにエラーがある場合、
渡された引数にエラー情報を追加すると、
エディタ上で確認できる他、起動時に実行時エラーとして検出できる。

// 第一引数:エラーメッセージ(必須)
// 可変長引数:原因となったSerializeFieldがある場合、そのField名
result.Add(new ErrorObject("Error Message.", nameof(_reasonMember)));

OnDuplicatedAsset(エディタ用)

アセット複製時処理。
複製元が引数で渡されるため
複製時に引き継ぎたい値があればコピーできる。

OnChangeBehaviourTo(エディタ用)

Behaviour変更時処理。
変更後のLoaderBehaviourに引き継ぎたい値があればコピーできる。