規模の大きなプロジェクトでUnity により生成された Flash コンテンツを埋め込みたい場合, embeddingapi.swc により出来ます。このSWCはUnityによりパブリッシュされた Flash コンテンツをロードし通信する機能を提供します。embeddingapi.swc ファイルの中で二つのクラスと二つおnインタフェースがあります。これらについて,各々の利用可能な機能を含めて以下で説明します。
Unity Flash プロジェクトがビルドされたとき,embeddingapi.swc ファイルはビルドされた SWF ファイルと同じ場所に配置されます。これを他の SWC と同様に自身の Flash プロジェクト で使用できます。詳細について SWC が何であるか および どのように使用するかについては Adobe ドキュメント を参照して下さい。
Unity Flash コンテンツを別のFlashプロジェクトの中に埋め込むとき,Flashの表示モデルを理解すると便利です。全てのStage3DコンテンツはFlash Stageの背後に表示されます。これはつまり全てのStageに追加された Flash表示リスト コンテンツは自身の3Dコンテンツの前につねにレンダリングされるということです。詳細については Adobe’s “How Stage3D Works” のページ を参照下さい。
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 コンテンツをアンロードします。 |
Unity コンテンツをホストするいずれかのクラスによって実装する必要があります。
unityInitComplete() : void; | Unityエンジンが初期化を完了して最初のレベルがロードされた時にコールされます。 |
unityInitStart() : void; | コンテンツがロードされて Unity エンジンの初期化が始まったときにコールされます。 |
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 インスタンスを作成します。
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). |
追加のローダー設定を提供するように作成された場合は,UnityContentLoader に引数を供給することが出来ます。
function UnityLoaderParams(scaleToStage : Boolean = false, width : int = 640, height : int = 480, usePreloader : Boolean = false, autoInit : Boolean = true, catchGlobalErrors : Boolean = true) : void;
次のサンプルにより Unity でパブリッシュした Flash コンテンツを ホスト SWF にロードする方法を示します。カスタムのUnityLoaderParams を供給して,ファイルロードの進捗をトラッキングする方法を示します。Unity コンテンツがホストに追加された後は,Unity コンテンツの関数は sendMessage 関数を使用してコールできます。
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});
}
...
}
}