Flash:在较大的 Flash 工程中嵌入 Unity 生成的 Flash 内容

embeddingapi.swc

如需在较大的 Flash 工程中嵌入 Unity 生成的 Flash 内容,请使用 embeddingapi.swc 执行此操作。此 SWC 可提供 加载功能并与 Unity 发布的 Flash 内容进行交换。在 embeddingapi.swc 文件中,您将看见两个类和两个界面。以下介绍了上述各项及其可用的功能。

构建了 Unity Flash 工程后,您构建 SWF 的同一位置将显示 embeddingapi.swc 文件副本。可像使用其他 SWC 一样在 Flash 工程中使用此 SWC。有关 SWC 简介及其用法的更多详细信息,请参阅 Adobe 文档


Stage3D 的局限性

在其他 Flash 工程中嵌入 Unity Flash 内容时,了解 Flash 显示模式会有所帮助。所有 Stage3D 内容在 Flash Stage 之后显示。这表示,添加至 Stage 的任何 Flash 显示列表内容将始终在 3D 内容之前进行渲染。有关更多信息,请参阅 Adobe 的 “Stage3D 工作原理”页面


IUnityContent

IUnityContent 由 Unity 构建的 Flash 内容实现。此界面介绍与 Untiy 内容交换信息的方式或修改 Untiy 内容的方式。

类函数:

getTextureFromNativeId(id :int) :TextureBase;启用纹理检索。有关使用此函数的完整工程示例,请参阅论坛
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 flash 内容。


IUnityContentHost

这必须由托管 Unity 内容的类来实现。

类函数:

unityInitComplete() :void;初始化 Unity 引擎并加载第一个级别后调用此函数。
unityInitStart() :void;内容已加载且 Unity 引擎初始化开始后调用此函数。


UnityContentLoader

UnityContentLoader 类可用于加载 Unity 发布的 Flash 内容并扩展 AS3 Loader 类。和标准 AS3 Loader 实例一样,您可以将事件监听程序添加至其 contentLoaderInfo,以了解加载进程和完成时间。

构造函数:

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

创建 UnityContentLoader 实例可让您添加事件监听程序,并使用该程序加载 Unity 内容。

可用属性:

unityContent :IUnityContent;内容加载完成后,可访问 Unity 内容,以运行 sendMessage() 等函数。

类函数:

loadUnity() :void;指示 UnityContentLoader 从构造函数的 URL 中加载 Unity 内容。
forceUnload() :void;卸载宿主中的 unity 内容。
unload() :void;重写 AS3 Loader 类的默认 unload() 类函数,并调用 forceUnload。
unloadAndStop(gc:Boolean = true):void卸载 unity 内容,然后调用 unloadAndStop(gc) 的默认加载程序实现。


UnityLoaderParams

构造函数:

创建 UnityContentLoader 以提供 额外加载程序配置时,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 内容添加至宿主后,宿主将使用 sendMessage 函数调用 Unity 内容中的函数。

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});
	  }

	  ...

	}
}

Page last updated: 2013-06-25