見出し画像

Unfex for Unity C#


ざっくりと Unfex って?

Unity C# 用に開発した一部 Flash 界隈で知る人ぞ知る某 Prog なんとか的な画面遷移制御と非同期ライブラリを含むフレームワークです。

きっちりサポートする気は全然ないですが、いくつかの案件に投入済みなのでそこまでおかしい動きはしないはず……


ざっくりとした事例

iPhone・iPad 用テキストシネマ ADV
MONOTO-SITUATION : LUCID AND DAYDREAM
http://monoto-situation.com/

シナリオ課金なので、ざっくりと動作を見るだけなら無料です。
https://itunes.apple.com/jp/app/monoto-situation-lucid-and-daydream/id964208911?mt=8


ざっくりとどこにあるの?

以下からクローンしてください。
https://github.com/unfernojp/Unfex


ざっくりとした使い方:
インスタンス生成時に引数を設定する

// インスタンス生成時に引数を設定する
UXBehaviour.InstantiateTo( prefabRef, parentRef, new object[]{ "あと", 1, "杯だけね" } );

// 生成されるクラスで引数を受け取る
rotected virtual void Init( string arg1, int arg2, string arg3 ) {
    base.Init();
    Debug.Log( arg1 ); // あと
    Debug.Log( arg2 ); // 1
    Debug.Log( arg3 ); // 杯だけね
}

※ UXBehaviour.InstantiateTo() メソッドを使用せずに生成された場合は Init() イベントハンドラメソッドは実行されません
※ Init() メソッドが実行されるタイミングは Awake() と Start() の間です


ざっくりとした使い方:
GameObject から UXBehaviour を逆引き参照したい

// UXBehaviour インスタンスを取得する
UXBehaviour behaviourRef = UXBehaviour.GetInstance( gameObjectRef );


ざっくりとした使い方:
コマンドの使い方

// ログを出力する
new DebugLog( "あるぴんはいます!" ).Execute();


ざっくりとした使い方:
コマンドをまとめて処理したい

// 順々に実行する
new SerialList().Add(
  new DebugLog( "どんどんドーナツ" ),
  new Wait( 0.2f ),
  new DebugLog( "どーんといこう!" )
).Execute();

// 同時に実行して全部実行し終わるのを待つ
// 結果的に 3.0 秒待ちます
new ParallelList().Add(
  new Wait( 1.0f ),
  new Wait( 2.0f ),
  new Wait( 3.0f )
).Execute();

// 同時に実行してどれか一つが終わるのを待つ
// 結果的に 1.0 秒待ちます
new ParallelList( ParallelListCompletionType.Anyone ).Add(
  new Wait( 1.0f ),
  new Wait( 2.0f ),
  new Wait( 3.0f )
).Execute();


ざっくりとした使い方:
特定の関数を実行後、特定のイベントの発行を待ちたい

new SerialList().Add(
  new DebugLog( "どんどんドーナツ" ),
  new Func( methodRef ).AddEvent( buttonRef, "onClick" ),
  new DebugLog( "どーんといこう!" )
).Execute();


ざっくりとした使い方:
コルーチンと連携させたい

IEnumerator process() {
  yield return new WaitForSeconds( 1.0f );
  
  yield return new ParallelList().Add(
    new DOFadeTo( page, 1.0f, 1 ).Delay( 0.4f ),
    new DOFadeTo( button, 1.0f, 1 ).Delay( 0.6f ),
    new DOFadeTo( copyright, 1.0f, 1 ).Delay( 0.8f )
  ).Execute();
  
  yield return new WaitForSeconds( 1.0f );
}


ざっくりとした使い方:
シーンを移動したい

// 移動先を string で指定する
UXSceneManager.GetInstance().Go( "/Title/" );

// 移動先を SceneId で指定する
UXSceneManager.GetInstance().Go( new SceneId( "/Title/" ) );

// 移動先を SceneObject で指定する
UXSceneManager.GetInstance().Go( UXSceneManager.GetInstance().Find( "/Title/" ) );

// 相対パスで移動する
UXSceneManager.GetInstance().Go( "../" );

// 履歴を残さずに移動する
UXSceneManager.GetInstance().Go( "/Title/", false );


ざっくりとした使い方:
発生するイベントの種類を知りたい

OnEnter
自身のシーンに進入した際に実行されます。
※イベントハンドラメソッドの SceneStatus 引数の内容から判断して処理を実装してください。

OnEnterPartUp
自身のシーンに“自身の子シーン”から進入する際に“単独”で実行されます。

OnEnterPartDown
自身のシーンに“自身の親シーン”から進入する際に“単独”で実行されます。

OnEnterPartSlide
自身のシーンに“自身の兄弟シーン”から進入する際に“単独”で実行されます。

OnEnterOverlapUp
自身のシーンに“自身の子シーン”から進入する際に“退出シーンの OnExitOverlapDown イベントと同時”に実行されます。

OnEnterOverlapDown
自身のシーンに“自身の親シーン”から進入する際に“退出シーンの OnExitOverlapUp イベントと同時”に実行されます。

OnEnterOverlapSlide
自身のシーンに“自身の兄弟シーン”から進入する際に“退出シーンの OnExitOverlapSlide イベントと同時”に実行されます。

OnExit
自身のシーンから退出した際に実行されます。
※イベントハンドラメソッドの SceneStatus 引数の内容から判断して処理を実装してください。

OnExitPartUp
自身のシーンから“自身の親シーン”に退出する際に“単独”で実行されます。

OnExitPartDown
自身のシーンから“自身の子シーン”に退出する際に“単独”で実行されます。

OnExitPartSlide
自身のシーンから“自身の兄弟シーン”に退出する際に“単独”で実行されます。

OnExitOverlapUp
自身のシーンから“自身の親シーン”に退出する際に“退出シーンの OnEnterOverlapDown イベントと同時”に実行されます。

OnExitOverlapDown
自身のシーンから“自身の子シーン”に退出する際に“退出シーンの OnEnterOverlapUp イベントと同時”に実行されます。

OnExitOverlapSlide
自身のシーンから“自身の兄弟シーン”に退出する際に“退出シーンの OnEnterOverlapSlide イベントと同時”に実行されます。

OnArrive
自身のシーンが目的地だった場合、シーケンスの最後に実行されます。

OnLeave
自身のシーンが出発地だった場合、シーケンスの最初に実行されます。


ざっくりとした使い方:
ダイアログを表示したい

yield return UXViewManager.dialog.Confirm( "あと一杯だけね?" );

switch ( UXViewManager.dialog.result.name ) {
  case DataEventData.onOK :
    Debug.Log( "これで絶対最後ですよ" );
    break;
  case DataEventData.onCancel :
    Debug.Log( "タクシー着きましたから。注文は取り消しです" );
    break;
}

この記事が気に入ったらサポートをしてみませんか?