概要

提供されたランタイムを介して、アニメーションデータを様々なゲームエンジンによって読み込めるファイルにエクスポートすることができます。 Unity、Cocos2dX、libGDX、MonoGame、ThreeJS、BabylonJS、PixiJSなど、多くのゲームエンジンがサポートされています。それに加えて、基本言語(C++、C#、Java、Javascript)で記述されたランタイムコードの一部を使用し、独自のカスタムエンジンに適合させることもできます。

概要チュートリアル動画

以下の紹介ビデオを見て、あなたの作成したキャラクターをゲームエンジンに持っていくための様々なランタイムオプションとファイルフォーマットについて学ぶことができます:

Non

ランタイムのダウンロード

様々なゲームエンジンのランタイムをダウンロードすることができます。ダウンロードはこちらから

データのエクスポート

Meshing

Game Enginesボタンをクリックして、エクスポートを開始します。エクスポートされたファイルの拡張子は .jsonで、JSON形式です。任意のJSONビューアを使用して、デバッグ目的でそのファイルをインスペクトできます。

ファイルを書き出した後、あなたが使用しているゲームエンジンと互換性のあるランタイムを取得する必要があります。

Webビューアでエクスポートされたデータをテストする

WebGLランタイムを使用して、書き出したJSONとテクスチャアトラスPNGファイルを表示するオンラインのCreature Webビューアがあります。これは、書き出したアニメーションがゲームエンジン内でどのように見えるかを迅速にプレビューするための便利な方法です。

Webビューアへのアクセスはこちらから

ランタイムモジュール/構造

ゲームランタイムはさまざまな言語で利用できますが、個々のモジュールの一般的なデザインは同じです。ランタイムがどのように整理されているかをより深く理解するために、モジュールを詳しく見ていきましょう。

Meshing

コアモジュール

コアモジュールは、ランタイムのバックエンドを形成します。一般的に、これらのモジュールを直接呼び出したり変更したりする必要はありません。次のもので構成されています:

  • MeshBone: このモジュールは、ボーン階層内の各ボーンを表します。このクラスのすべてのインスタンス化では、利用可能な子MeshBoneオブジェクトへの参照があります。各ボーンの開始点と終了点の位置を格納する属性があります。

  • MeshRenderRegion: このモジュールはあなたのキャラクターのメッシュ領域を表します。インスタンス化されたMeshRenderRegionオブジェクトの数は、キャラクターのメッシュ領域の数と同じになります。このモジュールは、MeshBoneオブジェクトへの参照を含み、 PoseFinalPts() 関数を使用してメッシュの最終点をポーズします。

  • MeshRenderBoneComposition: このモジュールは、MeshRenderRegionsお​​よびMeshBoneオブジェクトへの参照を持つコンテナクラスです。

フロントエンドモジュール

これらのモジュールはコアモジュール上で動作し、ゲームエンジン固有のアニメーション再生を提供します。以下のセクションの関数/メソッドを呼び出す可能性が最も高いでしょう:

  • Creature: このクラスは、Creatureのボーンとメッシュ領域を含むMeshRenderBoneCompositionオブジェクトへの参照を持ちます。また、画面上でレンダリングされるデータのポイントとトポロジーも含んでいます。キャラクターメッシュに適用された最終的な変形はすべてこのオブジェクトに書き込まれます。

  • CreatureAnimation: このクラスは、単一のアニメーションクリップを表します。各アニメーションクリップは、対応するCreatureAnimationオブジェクトがインスタンス化されている必要があります。

  • CreatureManager: このクラスは、CreatureオブジェクトとCreatureAnimationオブジェクトのリストを管理します。CreatureAnimationsに追加/作成、再生するアニメーションの設定、再生プロパティの設定(ループ、カスタム時間範囲など)などの機能を持っています。 Update() 関数でアニメーションの実際のポーズと更新を処理します。ゲームエンジンのタイムステップコールバックごとにこの関数を呼び出すことができます。

一般的なハイレベルの使用法

一般的に、ランタイムを使用すると、次のパターンが実行されます:

初期化

1)目的のキャラクター .json ファイルを読み込むために提供されたユーティリティ関数を呼び出します。

2)Creatureオブジェクトを作成し、読み込んだファイルデータに渡します。

3)対応するCreatureAnimationオブジェクトを作成します。読み込んで再生したいアニメーションクリップごとに1つずつ作成します。これらのアニメーションオブジェクトを、Creatureオブジェクトに追加する必要があります。これは手動で行う、またはCreatureオブジェクトが提供する CreateAnimation() メソッドを呼び出すことで実行できます。これにより、 Creature オブジェクトにアニメーションを自動的に作成・追加できます。

4)CreatureManagerオブジェクトを作成し、あなたのCreatureオブジェクトに割り当てます。以上で、初期化の手順は完了です。

レンダリング

1)これはランタイム固有の領域です。各ランタイムには、この目的のために提供される独自のCreatureRendererタイプクラスがあります。

2)通常、あなたのキャラクターテクスチャーアトラスファイルを .png 形式で読み込み、それを CreatureRenderer に割り当てます。先ほど作成した CreatureManager オブジェクトもこの CreatureRenderer に割り当てます。

再生

1)利用可能なCreatureAnimationごとに、異なる再生プロパティを設定することができます。再生のために現在アクティブなアニメーションを設定することもできます。

2)あなたのエンジンのアップデートコールバック時に、CreatureManagerUpdate() メソッドを呼び出してアニメーションを更新します。

3)特定のランタイムでは、CreatureRendererタイプのオブジェクトのドローまたはアップデートメソッドを明示的に呼び出す必要があります。詳細については、ランタイムを確認してください。

JSONファイル形式

書き出されたCreatureファイルはJSON形式です。このファイルの様々なカテゴリ説明は次のとおりです。

メッシュ

メッシュには、キャラクターの全体的なポイント、uvs、インデックス、メッシュ領域が含まれます。

  • points: キャラクターのポイントを記述する浮動小数点ペア(x、y)のフラットな配列。総ポイント数= Sizeof(points)/ 2

  • uvs: キャラクターのuvを記述する浮動小数点ペア(u、v)のフラットな配列。 uvsの合計数= Sizeof(uvs)/ 2

  • indices: キャラクターの三角形のインデックスを記述する整数トリプル(idx1、idx2、idx3)のフラットな配列。三角形の総数= Sizeof(indices)/ 3

  • regions: キャラクターの異なるメッシュ領域を表す子を含むオブジェクトです。

各領域には以下があります:

  • start_pt_index: ポイントとuvs配列へのインデックスの開始インデックス

  • end_pt_index: ポイントとuvs配列両方へのインデックスの終了インデックス

  • start_index: インデックスの開始インデックスをインデックス配列に追加する

  • end_index: インデックス配列へのインデックスの終了インデックス

スケルトン

これは、キャラクターの全体的な骨格構造を含みます。これは、ボーンオブジェクトのツリーを含んでいます。

各ボーンは次のものを持ってます:

  • name: ボーンの名前

  • children: 子ボーンオブジェクトのツリー

アニメーション

これはキャラクターの利用可能なアニメーションを保存します。各子オブジェクトには、アニメーション名と同じ名前が付けられます。

各子オブジェクトは以下のものを持っています:

  • bones: 名前の付いた子オブジェクト(開始フレーム、終了フレーム)。各オブジェクトはボーンアニメーションデータを含みます。

  • meshes: 名前の付いた子オブジェクト(開始フレーム、終了フレーム)。各オブジェクトはメッシュアニメーションデータを含みます。

  • uv_swaps: 名前の付いた子オブジェクト(開始フレーム、終了フレーム)。各オブジェクトは、uvアニメーションデータを含みます。

大きなJSONファイルを扱う(Zip圧縮)

メッシュモーターを使用すると、書き出されたCreatureアニメーションがかなり大きくなることがあります。一般的に、メッシュモーターを使用するアニメーションは、ボーンモーターだけを使用するアニメーションよりもはるかに大きなファイルサイズを持ちます。

一般的に、Creatureから書き出されたJSONファイルは、Zip圧縮に非常に適しています。実際に、8x〜10xの圧縮係数は一般的です。従って、ファイルサイズの大きさが問題になっている場合は、書き出したCreatureのJSONファイルを圧縮することをお勧めします。

あなたのゲームでは、Creatureのランタイム関数を使用して解凍する前に、サードパーティのライブラリ関数を使用して、Zip形式のJSONファイルを解凍します。Cocos2d-xやCocos2dランタイムのような特定のランタイムには、すでにzipファイルの読み込みサポートが組み込まれています。