質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS 9

iOS 9は、アップル社のモバイルOSであるiOSシリーズのバージョン。特徴として検索機能の強化、Siriの機能改良、iPad向けマルチタスクなどがあります。マルチウィンドウ機能をサポートし、iPad向けマルチタスクもサポートされています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Q&A

解決済

1回答

718閲覧

UnityのRuntime OBJ Importerを用いて、自作iPhone用アプリでiPhoneのフォルダから.objファイルをインポートする。

a06100256

総合スコア5

iOS 9

iOS 9は、アップル社のモバイルOSであるiOSシリーズのバージョン。特徴として検索機能の強化、Siriの機能改良、iPad向けマルチタスクなどがあります。マルチウィンドウ機能をサポートし、iPad向けマルチタスクもサポートされています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

0グッド

0クリップ

投稿2023/02/27 10:37

実現したいこと

ここに実現したいことを箇条書きで書いてください。

  • [ ]UnityのRuntime OBJ Importerを用いて、自作iPhone用アプリでiPhoneのフォルダから.objファイルをインポートする。

前提

UnityでiPhoneの中にある3Dモデルを表示して遊べるアプリを作っています。
実際にAsset StoreにあるRuntime OBJ Importerを使ってiPhone内のフォルダにある.objファイルを表示させましたが、色が反映されず、真っ白な状態で表示されてしまいます。

発生している問題・エラーメッセージ

iPhone内の自作アプリでiPhoneフォルダ内にある.objファイルを表示させたいが、色が反映されない。
イメージ説明

該当のソースコード

C#

1using System.Collections; 22using System.Collections.Generic; 33using UnityEngine; 44using System.IO; 55using Dummiesman; 66 77public class StartSetting : MonoBehaviour 88{ 99 1010 private string _savePath; 1111 1212 public string objPath; 1313 public string error; 1414 public GameObject loadedObject; 1515 1616 1717 void Start() 1818 { 1919 2020 UnityEngine.iOS.Device.SetNoBackupFlag(Application.persistentDataPath); 2121 //iOS : /var/mobile/Containers/Data/Application/<guid>/Documents/Product名/hoge/ 2222 //MacOS : /Users/user名/Library/Application Support/DefaultCompany/Product名/hoge/ 2323 _savePath = Application.persistentDataPath + "/hoge/"; 2424 Debug.Log(_savePath); 2525 Directory.CreateDirectory(_savePath); 2626 2727 2828 2929 3030 objPath = Application.persistentDataPath + "/hoge/" + "R1.obj"; 31  //objPath = "/Users/a06100256/Downloads/HDMI_Type_C_mini__Male_Plug_v2_L2.123ca8095744-b02f-460c-8797-b72ae40d4c58/11605_HDMI_Type_C_mini__Male_Plug_v2_l2.obj"; 3234 //Unity上で表示させるときのためのパス 33 34       //objPath = Application.persistentDataPath + "/hoge/R1/" + "R1.obj"; 35 //マテリアル"R1.mtl"と一緒に"R1"というファイルの中に入れ実験するためのパス 3631 3732 3833 3935 4036 if (!File.Exists(objPath)) 4137 { 4238 Debug.Log("Error"); 4339 } 4440 else 4541 { 4642 Debug.Log("Exist!!!"); 4743 4844 if (loadedObject != null) 4945 Destroy(loadedObject); 5046 loadedObject = new OBJLoader().Load(objPath); 5147 error = string.Empty; 5248 } 5349 5450 } 5551 5652 5753 void Update() 5854 { 5955 6056 } 6157}

試したこと

iPhone上のドキュメントフォルダにプロジェクトのフォルダを作り、その中にhogeというファイルを作り、あらかじめその中に.objファイルを保存しておき、アプリ上で表示させようとしましたが、色が反映されませんでした。

①Runtime OBJ Importerの使い方に問題があるのではと考え、Unity上で表示できるかどうかを試した。(この時に上記にあるUnity上で表示させるときのためのパスを使用しました。)
→その結果、下の写真のように色が反映されて表示されました。
イメージ説明

②.objファイル自体には色に関するデータが入っておらず、一緒に生成される.mtlファイルに入っていることを知ったので、hogeというファイルの中に"R1"という名前のフォルダを作り、その中にマテリアル"R1.mtl"と"R1.obj"を一緒に入れて上記のようにobjPathを変更して実行しましたが、色が反映されず真っ白な状態で表示されました。

Mac上では.objファイルと同じ場所に入っている.mtlファイルを自動的に読み込んでくれるが、
iPhone上にそういったシステムがないのでしょうか。それともiPhone上で表示させるために必要な作業の中でどこか間違ってしまっているのでしょうか。
また、仮にiPhone上にそういったシステムがない場合.fbxファイルなら色に関するデータも一緒に入ってくれるのでしょうか。

質問を答えていただくために必要な情報が抜けているかもしれません。コメントして教えていただければ、随時情報を加えたいと思います。
少しでも何か教えていただければ嬉しいです。よろしくお願いします。

補足情報(FW/ツールのバージョンなど)

Unity 2021.2.7f1
Runtime OBJ Importer
Xcode

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Bongo

2023/02/28 21:42

あいにく実機で試せる環境は持っていないのですが、シミュレーター上で試したところですとちゃんとmtlが読み込まれるようでした。どうやらOBJLoaderはmtlファイルを指定せずにロードした場合はobjファイルの記述を手がかりにmtlファイルを探すような作りになっているようですので、もしかするとobjファイルの内容と実際のファイルの配置に食い違いがあってロードに失敗する...といった可能性もあるかもしれません。 確認のため、objファイルとmtlファイルを適当なテキストエディタで開いて、その内容をご提示いただけませんでしょうか。ただしmtlファイルは大丈夫かと思いますが、objファイルは長すぎて投稿欄におさまらないかもしれませんので、objファイルについては「mtllib」で始まる行だけでもかまいません。
a06100256

2023/02/28 23:18

どうやら元々書き出したファイルの名前をiosのフォルダ上で変えてしまうと、コード上で変えた後の名前のファイル名を指定していたとしても.mtlファイルと.objファイルのつながり(Bongoさんが仰っている記述を手がかりに探す機能)が失われてしまうようです。 試しに元々の名前のままやってみたらうまくいきました。ありがとうございました。
guest

回答1

0

自己解決

どうやら書き出した時のファイル名と違う名前で指定してしまうと、.objファイルと.mtlファイルが対応しなくなってしまうようです。試しに書き出したときのそのままの名前で指定すればうまくいきました。

投稿2023/02/28 23:21

a06100256

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Bongo

2023/03/02 22:40

うまくいきましたようで安心しました。もしobjファイルを書き出した後でmtlファイルの名前や置き場所を変更したい場合は、併せてobjファイルの中の「mtllib」の行に記載されているファイルパスも修正してやればロードできるんじゃないかと思います。 ちなみにマテリアルにテクスチャを使用している場合、さらにmtlファイルの中にも画像ファイルへのパスが記述された箇所があるかと思いますので、こちらも正しい画像ファイルを指すよう適宜修正してやる必要があるかもしれませんのでご注意ください。
a06100256

2023/03/04 11:53

ご丁寧にありがとうございます。 試してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問