前提・実現したいこと
ここに質問の内容を詳しく書いてください。
(例)unity とc#をつかって下記のコードを書きました。
やりたいことはprocessedfileという配列にunity Resources内の既存のfile名を格納
Unity Resources内に新たにimportしたfile名とprocessedfile内のfileが一致したか、してないかで条件作成
条件があてはまらなければprefab作成といものを考えています
発生している問題・エラーメッセージ
ArgumentNullException: Value cannot be null. Parameter name: array System.Array.IndexOf[T] (T[] array, T value) (at <437ba245d8404784b9fbab9b439ac908>:0) getfish.Update () (at Assets/getfish.cs:39)
該当のソースコード
c#
1 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5 6using System; 7using System.IO; 8using System.Threading; 9 10public class getfish : MonoBehaviour 11{ 12 13 public static String[] processedFiles; 14 15 16 // Start is called before the first frame update 17 static void Main(string[] args) 18 { 19 processedFiles = new String[1]; //動的に配列のサイズを変えるので最初は配列の数を1個で作成。 20 Console.WriteLine(processedFiles.Length); 21 22 } 23 24 // Update is called once per frame 25 void Update() 26 { 27 IEnumerable<string> files = 28 System.IO.Directory.EnumerateFiles( 29 @"C:\Users\pokem\aquarium\Assets\Resources", "*", System.IO.SearchOption.AllDirectories); 30 31 32 33 34 foreach (string f in files) 35 { 36 //ファイル名を取得 37 string str = Path.GetFileName(f); 38 39 //処理済み一覧に一致するファイル名があるかどうかチェック 40 int i = Array.IndexOf(processedFiles, str); 41 Console.WriteLine("0以上なら配列に同じファイルが存在する " + i); 42 43 //配列に一致するファイル名があれば、このファイルの処理を飛ばす 44 if (i > -1) 45 { 46 Console.WriteLine("continueしました"); 47 48 continue;//次のファイルの処理へ移る 49 } 50 51 GameObject obj = (GameObject)Resources.Load("Quad"); 52 53 Quaternion rote = Quaternion.Euler(0.0f, 45.0f, 90.0f); 54 55 GameObject instance = (GameObject)Instantiate(obj, 56 new Vector3(5.0f, 5.0f, 5.0f), Quaternion.identity); 57 58 var rend = instance.GetComponent<Renderer>(); 59 rend.material.mainTexture = Resources.Load(str) as Texture; 60 61 62 getfish.processedFiles[getfish.processedFiles.Length - 1] = str; 63 Console.WriteLine(getfish.processedFiles[getfish.processedFiles.Length - 1]); 64 65 //次回の配列操作処理に備えて配列のサイズを1つ大きくしておく 66 Array.Resize(ref processedFiles, processedFiles.Length + 1); 67 68 Console.WriteLine("processedFiles[]配列の数" + processedFiles.Length); 69 for (int count = 0; count < processedFiles.Length; count++) 70 { 71 Console.WriteLine("processedFiles[]配列リスト" + processedFiles[count]); 72 73 } 74 75 76 77 } 78 } 79} 80ースコード
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/19 04:41
2020/02/19 04:43
2020/02/19 04:47
2020/02/19 04:54
2020/02/19 04:56
2020/02/19 07:18