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

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

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

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

C#

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

Unity3D

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

Q&A

解決済

1回答

1932閲覧

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/26 17:54

実現したいこと

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

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

前提

UnityでiPhoneの中にある3Dモデルを表示して遊べるアプリを作っています。
実際にAsset StoreにあるRuntime OBJ Importerを使ってiPhone内のフォルダにある.objファイルを表示させようとしましたが、何回か試してみても表示させることができません。

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

Runtime OBJ Importerを用いても、iPhone内の.objファイルをアプリ上で表示させることができない。

エラーメッセージ ArgumentNullException: Value cannot be null. Parameter name: shader at Dummiesman.OBJLoaderHelper.CreateNullMaterial () [0x00000] in <00000000000000000000000000000000>:0 at Dummiesman.OBJObjectBuilder.Build () [0x00000] in <00000000000000000000000000000000>:0 at Dummiesman.OBJLoader.Load (System.IO.Stream input) [0x00000] in <00000000000000000000000000000000>:0 at Dummiesman.OBJLoader.Load (System.String path, System.String mtlPath) [0x00000] in <00000000000000000000000000000000>:0 at StartSetting.Start () [0x00000] in <00000000000000000000000000000000>:0

該当のソースコード

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using System.IO; 5using Dummiesman; 6 7public class StartSetting : MonoBehaviour 8{ 9 10 private string _savePath; 11 12 public string objPath; 13 public string error; 14 public GameObject loadedObject; 15 16 17 void Start() 18 { 19 20 UnityEngine.iOS.Device.SetNoBackupFlag(Application.persistentDataPath); 21 //iOS : /var/mobile/Containers/Data/Application/<guid>/Documents/Product名/hoge/ 22 //MacOS : /Users/user名/Library/Application Support/DefaultCompany/Product名/hoge/ 23 _savePath = Application.persistentDataPath + "/hoge/"; 24 Debug.Log(_savePath); 25 Directory.CreateDirectory(_savePath); 26 27 28 29 30 objPath = Application.persistentDataPath + "/hoge/" + "11605_HDMI_Type_C_mini__Male_Plug_v2_l2.obj"; 31 32 33 //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"; 34 //Unity上で表示させるときのためのパス 35 36 if (!File.Exists(objPath)) 37 { 38 Debug.Log("Error"); 39 } 40 else 41 { 42 Debug.Log("Exist!!!"); 43 44 if (loadedObject != null) 45 Destroy(loadedObject); 46 loadedObject = new OBJLoader().Load(objPath); 47 error = string.Empty; 48 } 49 50 } 51 52 53 void Update() 54 { 55 56 } 57}

試したこと

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

①Runtime OBJ Importerの使い方に問題があるのではと考え、Unity上で表示できるかどうかを試した。(この時に上記にあるUnity上で表示させるときのためのパスを使用しました。)
→その結果、ちゃんと動作しました。

②iPhone上の表示させたい.objファイルのパスが間違っているのではと考え、パスを設定しファイルの中に存在しているかどうかをデバッグさせました。
→Exist!!!と表示されました。

③表示させたい.objファイル自体に問題があるのではないかと考え、iPhone用アプリの3D modeling:Design my modelを使用しました。
→ちゃんと表示されました。

Unityをまだ始めたばかりで、Xcodeのこともあまり理解できていないと思うので、
初歩的な質問かもしれません。申し訳ありません。
また、こちらで質問させていただくのも初めてであるため、質問を答えていただくために必要な情報が抜けているかもしれません。コメントして教えていただければ、随時情報を加えたいと思います。
エラーメッセージの部分は、今のところ自分ではどこの部分が間違っているか分からず、これがエラーなのではないかと考え載せましたが、対処法が分かりませんでした。少しでも何か教えていただければ嬉しいです。よろしくお願いします。

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

Unity 2021.2.7f1
Runtime OBJ Importer
Xcode

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーメッセージから想像しますに、OBJLoaderHelper

C#

1 public static Material CreateNullMaterial() 2 { 3 return new Material(Shader.Find("Standard (Specular setup)")); 4 }

の箇所でシェーダーが見つからず、マテリアル作成に失敗したんじゃないかと思います。
ドキュメントに

*Runtime Import Note
You must go to the "Graphics" tab in your project, and add "Standard (Specular Setup)" to the always included shaders. This will make your next build take a while.

との注意書きがありましたが、これは設定済みでしょうか?
おそらくこれを設定しておかないと、他のオブジェクトで「Standard (Specular Setup)」を使ったものが存在しない場合は、不要なシェーダーだと判断されてビルド時に除外されてしまうかと思います。

図

投稿2023/02/26 19:28

Bongo

総合スコア10811

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

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

a06100256

2023/02/26 21:34

解決しました! 素早く的確な回答本当にありがとうございます。 写真もあり非常に分かりやすかったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問