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

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

新規登録して質問してみよう
ただいま回答率
85.46%
C#

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1307閲覧

Unity Resources.LoadAllでデータ取得時のキャストエラー

akasatanaha

総合スコア44

C#

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/01/13 09:56

編集2021/01/14 03:33

ScriptableObject で作ったアイテムマスタデータ一覧を取得したいのですが
Resources.LoadAllで暗黙的なキャスト変換は出来ませんとエラーになっております。
キャストすればいいだけとは分かっているのですが、
以下のコードですとどのようにキャストすればよいのでしょうか?
初歩的な質問かもしれませんが、どうぞよろしくお願いいたします。

using System.Collections; using System.Collections.Generic; using UnityEngine; [CreateAssetMenu(menuName = "hoge/MasterItem")] public class MasterItem: ScriptableObject { public List<ItemInfo> list = new List<ItemInfo>(); [System.SerializableAttribute] public class ItemInfo { public int itemId; public string itemName; } public ItemInfo Get(int itemId) { list = Resources.LoadAll("MasterItem", typeof(List<ItemInfo>)) as List<ItemInfo>; //list = Resources.Load("MasterItem", typeof(List)) as List; for (int i = 0; i < list.Count; i++) { if (itemId == list[i].itemId) { return list[i]; } } return null; } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

ScriptableObject継承してのinnerClassでとか、個人的に書いた事がないコードなのでこの部分に関してはちょっとよくわからず、なのでこのコード部分は置いといてですね、

キャスト出来ませんって行はlist = Resources.LoadAll(~って事でしょう?

試しに、

var hoge = Resources.LoadAll(~

って書いてみては?他の部分の書き方も色々おかしい気もしますが、それも置いておきます。

unityならvisualStudioを使っているでしょう?カーソルを合わせればhogeがなんの型として扱われているかが分かるのではないでしょうか。

ごく普通な書き方だと、

var items = Resources.LoadAll<ItemInfo>("MasterItem"); // varはItemInfo[] foreach(var item in items) => list.Add(item);

みたいな感じになる気がします。

投稿2021/01/14 06:23

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

akasatanaha

2021/01/14 09:35 編集

ご教示ありがとうございます。 「自作クラスはUnityEngine.Objectにキャストできない」というルールがあるようなので public class ItemInfo : UnityEngine.Object とする必要があったみたいです。 >カーソルを合わせればhogeがなんの型として扱われているかが分かるのではないでしょうか。 この仕様知りませんでした。 勉強になります。
退会済みユーザー

退会済みユーザー

2021/01/14 10:21

なんか、すいません。 そういえばインテリセンスに頼りすぎるとそんな基底までさかのぼっちゃうんでしたね… ある意味、間違っちゃいないんですが…それをしてしまうと何でもありになってしまいますね 多分ネタだと思いますが、説明の難しさを教えていただきました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問