スラtmp

色々置き場

ActionScript Unity 3.5 Flash 出力関係


Unity 3.5 の Flash 出力関係見てました。

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

SWF 出力時に使われるツールやライブラリはデフォルトインストールで

C:\Program Files\Unity\Editor\Data\PlaybackEngines\flashsupport\

に入ってます。

中の構成は、

--------------------------------------------------------------------

/BuildTools
/AS3API
/UnityEngine
大量の .as // UnityEngine パッケージのソースコード
// UnityPlayerNative.swc に入ってます。
/UnityEngineInternal
TypeInferenceRules.as // UnityEngineInternal パッケージのソースコード
// UnityPlayerNative.swc に入ってます。

UnityEngineClassIndex.as // UnityEngineClassIndex クラスのソースコード
// UnityPlayerNative.swc に入ってます。

/cil2as
cil2as.exe
ICSharpCode.Decompiler.dll
ICSharpCode.NRefactory.dll
Mono.Cecil.dll
Mono.Cecil.Mdb.dll

/flex // Flex 4.5.1.21328 のフォルダ

/UserBuild_AS3
UnityApp.as // ユーザが作ったプロジェクトデータを保持するクラス
// プロジェクトデータとはシリアライズされたコンテンツデータ

index.html // Flash 再生用 html のテンプレート
swfobject.js // Flash 再生用 js
UnityShared.swc // Flash 出力時に一緒に出力される。
// 生成された .swf を自分で .as で読み込むときに使用。
// ( ただ、他のクラスも全部入ってる UnityPlayerNative.swc があるので使わないかも)

SwfPostProcessor.exe

/Managed
UnityEngine.dll

/Resources
unity default resources // デフォルトのリソース
// シェーダーコード( ちょっと変わった AGAL )といくらかのバイナリデータ

UnityPlayerNative.swc // Unity の ActionScript 向けライブラリ
// UnityShared.swc のクラス以外も全部含んでいます。
// 一部のソースコードは \BuildTools\AS3API\ の中で見れます。

--------------------------------------------------------------------


このうち実際の作業で関係あるのは UnityPlayerNative.swc で、
後は UnityEngine パッケージのソースを見ることがあるかもしれないぐらいです。

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

フォーラムから

UnityShared.swc; Communicating between Unity Flash Content and AS3.
http://forum.unity3d.com/threads/116650-UnityShared.swc-Communicating-between-Unity-Flash-Content-and-AS3.
AS3Communication_unity_project.zip
AS3Communication_as3_src.zip

Unity のデータと ActionScript のソースです。

このサンプルには

・ActionScript で Unity の出力した .swf を読み込む。
・ローディング画面
・ActionScript と Unity 間のメッセージの投げ方

が書いてあります。

実行してボタンを押すとデバッグウィンドウにメッセージが出ます。

メッセージのやり取りは AKABANE さんのサイトでも書かれています。
AKABANEさん Unity と Flashの連携
http://akabana.info/2011/12/24/unity-flash-messaging/

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

最近全然コード載せてないので、AIR じゃない通常の ActionScript での読込コードを。
とは言え、上のサンプルからローディング画面周りやメッセージのやりとり省いて
ほぼ .swf 読込だけに絞ってあるソースです。

---------------------------------------------------------------------------------
プロジェクト設定
Unity3_5Flash 01
Unity3_5Flash 02

Unity の出力した .swf と UnityPlayerNative.swc コピー
UnityPlayerNative.swc 右クリックで "ライブラリに追加"

Unity3_5Flash 00

---------------------------------------------------------------------------------

package
{
import Boo.Lang.Builtins;
import com.unity.IUnityContentHost;
import com.unity.UnityContentLoader;
import com.unity.UnityLoaderParams;
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.ProgressEvent;

[SWF(width='720', height='400', backgroundColor='#FFFFFF', frameRate='60')]
public class Main extends Sprite implements IUnityContentHost
{
// Unity content
private const UNITYAPP_SWF:String = "test000.swf";
private var unityContentLoader:UnityContentLoader;

////////////////////////////////////////////////////////////////
// constructor
public function Main():void {
if (stage) init();
else addEventListener( Event.ADDED_TO_STAGE, init );
}

////////////////////////////////////////////////////////////////
// init
private function init(e:Event = null):void {

removeEventListener(Event.ADDED_TO_STAGE, init);

stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;

///////////////////////////////////////////////////////////////
// load unity content
var params:UnityLoaderParams = new UnityLoaderParams( false, stage.stageWidth, stage.stageHeight, false );
unityContentLoader = new UnityContentLoader( UNITYAPP_SWF, this, params, false );
unityContentLoader.contentLoaderInfo.addEventListener( ProgressEvent.PROGRESS, onUnityContentLoaderProgress );
unityContentLoader.contentLoaderInfo.addEventListener( Event.COMPLETE, onUnityContentLoaderComplete );
unityContentLoader.loadUnity();

}

////////////////////////////////////////////////////////////////
// Loading UnityContent
private function onUnityContentLoaderProgress( event:ProgressEvent ):void {

// create original progress bar
var p:Number = event.bytesLoaded / event.bytesTotal;
trace( p * 100 );
}

////////////////////////////////////////////////////////////////
// Load complete UnityContent
private function onUnityContentLoaderComplete(event:Event):void {

addChild( unityContentLoader );
unityContentLoader.unityContent.setContentHost( this );
}

////////////////////////////////////////////////////////////////
// init Unity start.
public function unityInitStart () : void {
// This is called when the content is loaded and the initialization of the unity engine is started.
// Unity 初期化始まり
}

////////////////////////////////////////////////////////////////
// init Unity complete.
public function unityInitComplete () : void {
// This is called when the unity engine is done initializing and the first level is loaded.
// Unity 初期化終わり
}

}

}

---------------------------------------------------------------------------------


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

その他メモ

---------------------------------------------------------------------------------

ActionScript 側で何の仕事するべきなのかがまだ分かりません。
ゲームオブジェクトの制御は Unity で組んどけば済むことですし。

Unity で出来なくて ActionScript で出来ることを勉強しなきゃです。

---------------------------------------------------------------------------------

Unity が使ってる Stage3D を取得して何かしてみたかったんですが。
unityContentLoader.unityContent の持ってる stage3D は private でした。
どこか他からでもいいので欲しいです。

---------------------------------------------------------------------------------

出力される .swf のサイズが結構大きかったので、箱とカメラ、ライトだけのシーンでテスト。
やっぱり 15 MBぐらいになっちゃいました。

しょうがないかなと思ってたんですが、
上のほうで書いたサンプルの .swf は 2.5 MB 程でした。
// 再掲
// UnityShared.swc; Communicating between Unity Flash Content and AS3.
// http://forum.unity3d.com/threads/116650-UnityShared.swc-Communicating-between-Unity-Flash-Content-and-AS3.
// AS3Communication_unity_project.zip
// AS3Communication_as3_src.zip

15 MB もあると FC2 や、借りてるサクラのスペースだと作ったサンプルとかが上げられないので
何か設定あるのか調べないと。

---------------------------------------------------------------------------------

.swf 読み込みじゃなくて、Unity の作った .as から自分でコンパイル出来るかなと思って試してみました。
// ただ、これが出来てもメリットはほぼ無いです。ほとんどのクラスは UnityPlayerNative.swc の中なのでデバッガも使えません。
// そして結果を先に書きますと出来ませんでした。

Unity のフォルダから
UnityPlayerNative.swc
UnityApp.as

ビルドして出来るフォルダ Temp から
ConvertedDotNetCodeClassIndex.as
ProjectSerializedFileContainer.as
( 小さいプロジェクトで global. は無し )

FlashDevelop でコンパイル
(ドキュメントクラスは UnityApp.as )

無事にビルドは通りましたが、起動すると Unity のロゴの後は真っ黒
コンソールにはコンテンツがロードされて無いっぽいエラーが。

UnityApp からデータをデシリアライズする方法や
UnityContentInternal.setStage3DSize() の実行時エラーが
直せなかったのであきらめました。

素直に UnityContentLoader で .swf ロードします。

---------------------------------------------------------------------------------

Temp フォルダの消えるタイミングは Unity 終了時

---------------------------------------------------------------------------------

自分で作ったプロジェクトは
C:\Documents and Settings\USER_NAME\My Documents\PROJECT_NAME

---------------------------------------------------------------------------------

SwfPostProcessor.exe をとりあえずコマンドラインから叩いて Usage だけ見ておきます。

Usage : -upp [inputfile] -o [outputfile] -c[zlib/lzma/none]

---------------------------------------------------------------------------------

cil2as.exe も

System.ArgumentException: Usage:
cil2as [assemblies] [--libid:LibId] [--types:type1,type2] [--with-class-index] [--filter-by-attribute:AttributeTypeName] [-
-auto] [--blacklist:/path/to/blacklist] [--cpp-output-dir:/path/where/to/generate/cpp/files] [--disable-transforms:,
] [--cherry-pick:Foo.Bar(System.Int32) --cherry-pick:Foo.Bar(Baz)
at cil2as.ConversionOptions.Parse(String[] args)
at cil2as.Program.Main(String[] args)


---------------------------------------------------------------------------------

Unity やるなら、プログラムよりリソース作りの速度が大事かなと思うので
正月休みは Blender2.6 を勉強したいです。
(またしても Blender やるやる詐欺)

---------------------------------------------------------------------------------

Unity はフォーラムが凄い活発

Unity Community
http://forum.unity3d.com/index.php

---------------------------------------------------------------------------------
関連記事
スポンサーサイト
風俗デリヘル情報R18navi - http://www.r18navi.com/
風俗嬢のマル秘プライベート写メ日記を1000人分大公開!
※EROすぎ注意※ - http://sfjn.info/?adv=LP29216
欲求不満のロリ奥さんと直メール★「私のフェラって上手い?」
まずは会ってから♪♪ - http://koy.jp/?adv=LP29215
【無料体験中】エッチしたい人妻が急増中!直メで連絡してあげて♪
  1. 2011/12/26(月) 01:52:30|
  2. ActionScript
  3. | トラックバック:0
  4. | コメント:0
<<ActionScript Stage3D 頂点バッファの BYTE_4 | ホーム | ActionScript Unity 3.5 Public Beta インストール>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://slatmp.blog102.fc2.com/tb.php/58-56fcad35
この記事にトラックバックする(FC2ブログユーザー)

検索フォーム

プロフィール

Author:藤丸
色々と描いたり、分かったことを覚書しておくサイトです

カテゴリ

絵 picture (14)
ActionScript (30)
POP-CAKE! (10)
3D (2)
麻雀 mahjhong (2)
マインスイーパー minesweeper (1)
未分類 (0)
日記 diary (1)
その他 other (0)

タグ

ActionScript Proscenium  POP-CAKE! livetube プログラミング Away3D 天鳳 マインスイーパー 3D sculptris 

最新記事

リンク

このブログをリンクに追加する

最新コメント

最新トラックバック

RSSリンクの表示

Powered By FC2ブログ

今すぐブログを作ろう!

Powered By FC2ブログ

ブロとも申請フォーム

この人とブロともになる

QRコード

QR