Flash: サポート内容
サンプル: データを Flash から Unity に提供

Flash: 規模の大きなプロジェクトでUnity により生成された Flash コンテンツを埋め込む

embeddingapi.swc

規模の大きなプロジェクトでUnity により生成された Flash コンテンツを埋め込みたい場合, embeddingapi.swc により出来ます。このSWCはUnityによりパブリッシュされた Flash コンテンツをロードし通信する機能を提供します。embeddingapi.swc ファイルの中で二つのクラスと二つおnインタフェースがあります。これらについて,各々の利用可能な機能を含めて以下で説明します。

Unity Flash プロジェクトがビルドされたとき,embeddingapi.swc ファイルはビルドされた SWF ファイルと同じ場所に配置されます。これを他の SWC と同様に自身の Flash プロジェクト で使用できます。詳細について SWC が何であるか および どのように使用するかについては Adobe ドキュメント を参照して下さい。

Stage3D 制約事項

Unity Flash コンテンツを別のFlashプロジェクトの中に埋め込むとき,Flashの表示モデルを理解すると便利です。全てのStage3DコンテンツはFlash Stageの背後に表示されます。これはつまり全てのStageに追加された Flash表示リスト コンテンツは自身の3Dコンテンツの前につねにレンダリングされるということです。詳細については Adobe’s “How Stage3D Works” のページ を参照下さい。

IUnityContent

IUnityContent はUnityでビルドされたFlashコンテンツにより実装されます。このインタフェースによりUntiyコンテンツと通信したり,Untiyコンテンツを修正したりします。

メソッド:

getTextureFromNativeId(id : int) : TextureBase; テクスチャの取得を有効化します。これを使用した完全なプロジェクト サンプルが forums で確認出来ます。
sendMessage(objectPath : String, methodName : String, value : Object = null) : Boolean; sendMessage 関数を使用してUnityコンテンツのオブジェクトのメソッドをコール出来ます。.
setContentHost(contentHost : IUnityContentHost) : void; Unityコンテンツのホスト (IUnityContentHost を実装する必要がある) をセットします。次にホストはUnityコンテンツがロード/開始したかリスニング出来ます。
setSize(width : int, height : int) : void; Unityコンテンツの大きさを修正します。
setPosition(x:int = 0, y:int = 0):void; Unity コンテンツをコンテンツ ホストの中で移動出来ます。
startFrameLoop() : void; Unity コンテンツを開始します。
stopFrameLoop() : void; Unity コンテンツを停止します。
forceUnload():void; Unity コンテンツをアンロードします。

IUnityContentHost

Unity コンテンツをホストするいずれかのクラスによって実装する必要があります。

メソッド:

unityInitComplete() : void; Unityエンジンが初期化を完了して最初のレベルがロードされた時にコールされます。
unityInitStart() : void; コンテンツがロードされて Unity エンジンの初期化が始まったときにコールされます。

UnityContentLoader

UnityContentLoader クラスはUnity Flashコンテンツをロードすために使用することが出来てAction Script 3 Loader クラスを拡張します。標準 Action Script 3 Loaderインスタンスと同様に, contentLoaderInfo にイベント リスナーを追加してロードの進行状況および,いつ完了したか分かります。

コンストラクタ:

UnityContentLoader(contentURL : String, contentHost : IUnityContentHost = null, params : UnityLoaderParams = null, autoLoad : Boolean = true) : void;


Creates aイベントリスナーをアタッチ出来て,Unity コンテンツをロード出来る UnityContentLoader インスタンスを作成します。

  • contentURL: Unity でパブリッシュした SWF をロードするURL。
  • contentHost: コンテンツのホスト。これは IUnityContentHost を実装する自身のActionScript クラスであるべきです。
  • params: デフォルトのロード詳細を オーバーライドしたい場合に UnityLoaderParams インスタンスを提供します。
  • autoLoad: もし true にセットすると,UnityContentLoader が作成されると同時にロードが開始されます (loadUnity() を別にコールするのではなく)。もしイベントを使用してロードの進捗をトラッキングしたい場合,これをfalse にセットすべきです。関連するイベントリスナーを追加した後は, loadUnity() を手動でコールできます。

アクセス可能なプロパティ:

unityContent : IUnityContent; コンテンツがロードを完了した後は,Unityコンテンツをアクセスして sendMessage() といった機能を実行できます。

メソッド:

loadUnity() : void; Instructs the UnityContentLoader to load the Unity content from the URL supplied in the constructor.
forceUnload() : void; Unloads the unity content from the host.
unload() : void; Overrides the default unload() method of the AS3 Loader class and calls forceUnload.
unloadAndStop(gc:Boolean = true):void Unloads the unity content then calls the default Loader implementation of unloadAndStop(gc).

UnityLoaderParams

コンストラクタ:

追加のローダー設定を提供するように作成された場合は,UnityContentLoader に引数を供給することが出来ます。

function UnityLoaderParams(scaleToStage : Boolean = false, width : int = 640, height : int = 480, usePreloader : Boolean = false, autoInit : Boolean = true, catchGlobalErrors : Boolean = true) : void;


  • scaleToStage: Unity コンテンツが固定サイズを維持するか,親 Flash ウィンドウがリサイズしたときにあわせて拡大縮小するか。
  • width: Unity コンテンツの幅。
  • height: Unity コンテンツの高さ。
  • usePreloader: Unity プリローダーを表示するかどうか。
  • autoInit: 現在未使用。
  • catchGlobalErrors: エラーを catch して SWF の左上の赤いボックスに表示するかどうか。

サンプル

次のサンプルにより Unity でパブリッシュした Flash コンテンツを ホスト SWF にロードする方法を示します。カスタムのUnityLoaderParams を供給して,ファイルロードの進捗をトラッキングする方法を示します。Unity コンテンツがホストに追加された後は,Unity コンテンツの関数は sendMessage 関数を使用してコールできます。

ActionScript 3

package
{
    public class MyLoader extends Sprite implements IUnityContentHost
    {
     private var unityContentLoader:UnityContentLoader;
    
     public function MyLoader()
     {
         var params:UnityLoaderParams = new UnityLoaderParams(false,720,400,false);
         unityContentLoader = new UnityContentLoader("UnityContent.swf", this, params, false);
         unityContentLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onUnityContentLoaderProgress);
         unityContentLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onUnityContentLoaderComplete);
         unityContentLoader.loadUnity();
     }
    
     private function onUnityContentLoaderProgress(event:ProgressEvent):void
     {
         //Respond to load progress
     }
            
     private function onUnityContentLoaderComplete(event:Event):void
     {
         addChild(unityContentLoader);
         unityContentLoader.unityContent.setContentHost(this);
     }
    
     //unityInitStart has to be implemented by whatever implements IUnityContenthost
     //This is called when the content is loaded and the initialization of the unity engine is started.
     public function unityInitStart():void
     {
        //Unity engine started  
     }
        
     //unityInitComplete has to be implemented by whatever implements IUnityContenthost
     //This is called when the unity engine is done initializing and the first level is loaded.
     public function unityInitComplete():void
     {
         unityContentLoader.unityContent.sendMessage("Main Camera","SetResponder",{responder:this});
     }
    
     ...
     
    }
}


Flash: サポート内容
サンプル: データを Flash から Unity に提供