書き物

技術とか作った物の話とか愚痴文句感想など

『投函のお手伝い』を公開しました。

あほげーという企画で、24時間でゲームを作りました。 作ったゲームは以下です。

投函のお手伝い

はがきをポストに投げ込むゲームにしようとして作っていましたが、終盤にはがきの内容をどうしようかと思ってた時点で、提出に遅刻することがほぼ確定していたことから、謝罪のはがきになってしまいました。

以下は技術的なメモです。

ソース ここに置いてあります。→ソース

環境 今回は以下の環境で作りました。

モデルの作成 いつものように Blenderモデリングしました。 出力形式は今回初、COLLADA 形式です。 モデリングの際の blend ファイルやテクスチャは以下に置いてあります。 app\subprojects\Model

モデルデータのロード 外部データは以下のサブプロジェクトで Embed で埋め込み、swc に固めてます。 app/subprojects/Assets COLLADA データの読込は以下のクラスでパースしています。 libs/AMAway3D/src/org/ahiufomasao/away3d/net/DaeLoader.as COLLADA データは MD5 と違って、パースするだけで特に material など調整しなくても、Blender で作ったまんま表示されて楽でした。

ここで 1 つハマったのは、Loader3D::loadData()を呼び出すにあたって第三引数(ns)を null にしていたのですが、この方法で 2 種類の COLLADA データをパースすると、なぜか 1 件目にパースしたモデルが表示されなくなるという問題がありました。 ns に一意な値を指定したら解決しました。 おそらく、AssetLoaderContext でテクスチャを指定していたのですが、2 件目のパースで 1 件目のパース時に指定していた AssetLoaderContext を上書いてしまってて、1 件目のテクスチャが無効になってた?と想像しています。 特に static な領域を介さず、Loader3D でそれぞれパースしてた認識だったんですが、裏で static な領域に AssetLoaderContext が管理されてて、管理する際の識別子に引数 ns が使われてるのかもしれません。

モデルデータの複製 COLLADA データをパースして取得した ObjectContainer3D を clone() するだけで簡単に複製出来るみたいです。 その辺をやってるソースは以下です。 app/src/objects/performance/systems/AssetLoaderCollection.as

総括 24 時間という短い期間でしたが、そこそこの見た目でモデリングから表示まで出来て満足です。 これぐらいのスピードで作れるなら、今後のあほげーでも使っていけそうな気がします。