web-dev-qa-db-ja.com

UnityランタイムにFBXファイルをロードするにはどうすればよいですか?

私はhololensプロジェクトにいます。上司によれば、実行時にfbxファイルをロードします(私たちはUnityを使用しています)。 fbxファイルは実行時に変更されるため、再ロードする必要があります(fbxは3dMAxからの変更です)。

AssetBundleを試しましたが、UnityまたはUnityエディターモードがないとAssetbundleファイルを作成できません。私の知る限りでは、([プロジェクト]タブの)リソースのみがアセットをアセットバンドルに挿入できます。 UnityプロジェクトなしでfbxファイルでAssetbundleファイルをビルドできれば、すべてを実行できます。

まとめると、Unityリソースなしで実行時にfbxをロードする方法が必要です。ランタイムでfbxアセットをassetbundleにした場合(fbxはプロジェクトタブに属していません)、問題ありません。


編集)

Trilibアセットを使用するのが最善の方法です。私は自分のFBXローダーを作ってみます。それは難しすぎて、大きな仕事です。 trilibは完璧ではないと思いますが、それが一番です。

3
Redwings

あなたはフォローコンテンツを読むことができます:

is-there-an-easy-way-to-import-fbx-files-runtime

つまり、いいえ。

Unityは、実行時のモデルフォーマットのインポート/ロードをサポートしていません。唯一の例外はAssetBundlesです。あなたのオプションは基本的に:

  • AssetBundlesを使用する

  • Unityに必要なフォーマットのインポーターを見つける

  • そのようなインポーターを自分で書く

  • 機能のリクエストを探すか、自分で作成して、UT=ランタイムモデルのロードルーチンを追加するかどうかを尋ねます。

how-to-convert-3ds-fbx-model-into-asset-bundle-at-run-time

3Dモデルをアセットバンドルに変換するツールはありますか?または実行時にそれらを変換することは可能ですか?

Assetbundleを作成するためのすべてのUnity APIは、Editor for Editorプラグインでのみ使用できるため、ランタイム中に行うことはできません。

私はこの質問について多くのウェブサイトを検索します。最後に、このアセットを使用することをお勧めします。無料ではありませんが、価値はあります。時間を大幅に節約できます。

trilib-unity-model-loader

これがお役に立てば幸いです。

3
Ron Tang

FBXをglTFに変換することを検討できます。Unityは、実行時にUnityGLTFツールを使用して読み込むことができます。

https://github.com/KhronosGroup/UnityGLTF

2
perza

Unityはfbxファイルを直接ロードできませんが、実行時にobjファイルをロードできます。fbxファイルをobjファイルに変換できます。

  1. コマンドラインスクリプトを使用してfbxをobjファイルに変換します。
  2. Unityランタイムでobjをロードします。

Fbx/daeをobjに変換する1つの方法は、Blenderコマンドラインを使用することです。そのため、Blenderをインストールする必要があります(サポートプラットフォーム:Linux、Mac、Windows)。これを作成pythonファイル:

import bpy
import sys
for obj in bpy.data.objects:
    if (obj.name == "Lamp") | (obj.name == "Camera") | (obj.name == "Cube"):
        obj.select = False
    else:
        obj.select = True
argv = sys.argv
argv = argv[argv.index("--") + 1:]
inputpath = argv[0]
outputpath = argv[1]
bpy.ops.import_scene.fbx(filepath=inputpath, axis_forward='-Z', axis_up='Y', directory="", filter_glob="*.fbx", ui_tab='MAIN', use_manual_orientation=False, global_scale=1, bake_space_transform=False, use_custom_normals=True, use_image_search=True, use_alpha_decals=False, decal_offset=0, use_anim=True, anim_offset=1, use_custom_props=True, use_custom_props_enum_as_string=True, ignore_leaf_bones=False, force_connect_children=False, automatic_bone_orientation=False, primary_bone_axis='Y', secondary_bone_axis='X', use_prepost_rot=True)
bpy.ops.export_scene.obj(filepath=outputpath, check_existing=False, axis_forward='-Z', axis_up='Y', filter_glob="*.obj;*.mtl", use_selection=True, use_animation=False, use_mesh_modifiers=True, use_mesh_modifiers_render=False, use_edges=True, use_smooth_groups=False, use_smooth_groups_bitflags=False, use_normals=True, use_uvs=True, use_materials=True, use_triangles=False, use_nurbs=False, use_vertex_groups=False, use_blen_objects=True, group_by_object=False, group_by_material=False, keep_vertex_order=False, global_scale=1, path_mode='COPY')
print("finished!")

シェルでこのファイルを実行します。

/your blender path/blender --background --python /your python path/convert.py -- /your input path/xxx.fbx /your output path/xxx.obj

最後に、このプラグインを使用して、実行時にobjファイルをロードします。 https://assetstore.unity.com/packages/tools/modeling/runtime-obj-importer-49547

ファイルをインポートおよびエクスポートするためのブレンダーコマンドラインの詳細: https://blender.stackexchange.com/questions/16563/how-can-i-run-blender-from-the-command-line-to-export -and-import-models

0
Yone Chen