目次
はじめに
Unity ではモデルを静的に扱って開発を行えますが、よくある要件として外部からモデルファイルを与えて動的に使いたい事があります。
使ってみるとわかるのですが Unity は動的(ランタイム)ロードの仕組みが無いので基本的にはアセットを使う必要があります。
今回は以下の、Trilib と言うライブラリをご紹介させていただきます。
Trilibとは?
TriLib は、Unityエディタ内またはゲームの実行中にユーザーがさまざまな3Dモデル形式をロードできるように設計されたアセット(ライブラリ)です。
サポート形式
40種類以上を3D・2D形式をサポートしています。
【3D形式】
3D / 3DS / 3MF / AC / AC3D / ACC / AMJ / ASE / ASK / B3D / BLEND / BVH / CMS / COB / DAE/Collada / DXF / ENFF / FBX / glTF 1.0 + GLB / glTF 2.0 / HMB / IFC-STEP / IRR / IRRMESH / LWO / LWS / LXO / MD2 / MD3 / MD5 / MDC / MDL / MESH / MESH.XML / MOT / MS3D / NDO / NFF / OBJ / OFF / OGEX / PLY / PMX / PRJ / Q3O / Q3S / RAW / SCN / SIB / SMD / STP / STL / TER / UC / VTA / X / X3D / XGL / ZGL
【2D形式 】
JPG / PNG / TGA / BMP / PSD / GIF / HDR / PIC / PNM
https://ricardoreis.net/?p=81
対応プラットフォーム
Trilib のタイトルをみてもらえばわかりますが、ほぼすべてのプラットフォームに対応しています。作者の意気込みを感じますね!
- Windows Store
- Windows
- Linux
- OSX
- Android
- iOS
- WebGL
デモで使えるか確認
Trilib の動作確認として、デモサイトが使えるのでここで使いたいモデルファイルが確認できるので試してみてください。
Unity はアセットが試用できないのでデモサイトを準備してくれているなんて便利ですよね。
使い方
購入
まず、Ttrilib は有料ですのが以下サイトから購入してください。
インポート
Unityで新規プロジェクトを作成してください。
次に、メニューから「Asset Store」を開きましょう。
次に、検索バーから「trilib」を入力してページを表示してください。
下にスクロールすると、Impot(Donwload)が表示されますのでクリックしましょう。
インポート画面がでるので、すべてインポートしましょう。
警告が発生する事があるので、「~ restart」を選んで、再起動してください。
インポートが完了すると、Assetsの下に「Trilib」フォルダが増えているのが確認できます。
テスト用のモデルを配置
今回のテスト用としてこのモデルデータを使いました。
ダウンロードしたデータを、StreamingAssets に deer.fbx を格納してください。( StreamingAssets が無い場合は新規作成してください)
使い方(同期ロード)
以下が、ロード時のソースコードになります。
簡単ですね、assetLoader.LoadFromFile 部分が実際のモデルロードが行われる部分です。
using TriLib;
using UnityEngine;
public class SyncLoad : MonoBehaviour
{
void Start()
{
using (var assetLoader = new AssetLoader())
{
var assetLoaderOptions = AssetLoaderOptions.CreateInstance();
// 親オブジェクトを設定
var wrapperGameObject = gameObject;
// オブジェクトのロードを実行
var path = Application.streamingAssetsPath + "/deer.fbx";
var myGameObject = assetLoader.LoadFromFile(path, assetLoaderOptions, wrapperGameObject);
// スケールが大きかったので小さく
myGameObject.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f);
}
}
}
おめでとうございます、モデルが表示されました!!
使い方(非同期ロード)
以下が、ロード時のソースコードになります。
簡単ですね、assetLoaderAsync.LoadFromFile 部分が実際のモデルロードが行われる部分です。
using TriLib;
using UnityEngine;
public class AsyncLoad : MonoBehaviour
{
void Start()
{
using (var assetLoaderAsync = new AssetLoaderAsync())
{
var assetLoaderOptions = AssetLoaderOptions.CreateInstance();
// 親オブジェクトを設定
var wrapperGameObject = gameObject;
// オブジェクトのロードを実行
var path = Application.streamingAssetsPath + "/deer.fbx";
var thread = assetLoaderAsync.LoadFromFile(path, assetLoaderOptions, wrapperGameObject, (myGameObject) => {
// スケールが大きかったので小さく
myGameObject.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f);
});
}
}
}
こちらも問題なくモデルが表示されましたね、簡単でいいですね~
トラブルシューティング
“Please enable TriLib ZIP loading” のメッセージが表示される場合、
Zipファイルの内容を処理するには、TriLibメニューの「Zip読み込みを有効にする」メニュー項目をチェックする必要があります。