返回介绍

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

发布于 2021-06-19 18:03:21 字数 6110 浏览 920 评论 0 收藏 0

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 内容。

  • contentURL:加载 Unity 发布的 SWF 的URL。
  • contentHost:内容的宿主。这应该是您实现 IUnityContentHost 的自有. ActionScript 类。
  • params:如需重写默认的加载细节,则可提供 一个 UnityLoaderParams 实例。
  • autoLoad:如果设为 true,则将在创建 UnityContentLoader 后立即开始加载(无需单独调用 loadUnity())。如需使用事件跟踪加载进程,则应将其设为 false。添加了相应的事件监听程序后,可手动调用 loadUnity()。

可用属性:

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;
  • scaleToStage:Unity 内容是否仍保持为固定大小,还是在调整父 Flash 窗口大小时也进行缩放。
  • width:Unity 内容的宽度。
  • height:Unity 内容的高度。
  • usePreloader:是否显示 Unity 预加载程序。.
  • autoInit:目前不适用。
  • catchGlobalErrors:是否捕获错误,并在 swf 左上角的红色方框内显示错误。


示例

以下示例介绍如何将 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});
	  }

	  ...

	}
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文