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

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

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

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

Unity

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

Q&A

解決済

2回答

6886閲覧

【C# Unity】 scriptableObjectにarreyやdictionaryを設定するには?

MOTOMUR

総合スコア195

C#

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

Unity

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

0グッド

0クリップ

投稿2020/05/28 09:53

編集2020/05/29 01:04

scriptableObjectにarreyやdictionaryを設定するには?

string[]の入ったscriptableObjectは作成できました。
しかし下記のように、string[]とint[]をいれたものは作成できず。(コンパイルは通るが、int[]がなかったことに。)

C#

1public class AllyMemberID : ScriptableObject 2{ 3 //味方のメンバーリスト 4 [SerializeField] 5 private string[] allyMemberIDs = { "hoge1", "hoge2", "hoge3"}; 6 private int[] allyNum = new int[3] { 1, 2, 3}; 7 8 public void SetAllyMemberID(string[] allyMemberIDs) 9 { 10 this.allyMemberIDs = allyMemberIDs; 11 } 12 public string[] GetAllyMemberID() 13 { 14 return allyMemberIDs; 15 } 16 public void SetAllyNum(int[] allyNum) 17 { 18 this.allyNum = allyNum; 19 } 20 public int[] GetAllyNum() 21 { 22 return allyNum; 23 } 24 25}

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

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

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

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

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

fiveHundred

2020/05/28 10:03

あなたのおっしゃる通り、普通の人なら配列にする内容で、その定石を無視する理由が分かりませんし、それで困らないはずです。 なぜ、そうしたいのかを明確にしてください。
Zuishin

2020/05/28 10:31

配列にするのが最も良いパフォーマンスで、最も簡単なコードで済みます。 どうしても a0 a1 を使うというダサいやりかたがしたいなら、次のようにループする直前で配列にすればいいでしょう。 var a = new[] { a0, a1 };
BluOxy

2020/05/28 12:14 編集

> ScriptableObjectにint arrayをうまく入れられなかった これが真の問題ではないでしょうか。Unityの公式ドキュメント曰くうまく入れられるはずなので。 なぜうまく入れられなかったかを追記してください。
BluOxy

2020/05/29 01:00

質問文がごちゃごちゃなので、①②どちらかの方法で内容を整理して頂きたいです。 ①編集履歴から修正した文章は見れますから、現在の質問と関係ない部分(取り消し線が掛かっている部分)は削除してください。そしてタイトルを「scriptableObjectで作ったステータスをまとめる親を作るには。?」に変えてください。 ②追加質問をこの質問文から取り消して、1度質問をクローズして頂きたいです。「scriptableObjectにarreyやdictionaryを設定するには?」の回答に対しては「配列はできるがDictionaryはできない」で恐らく終わっている話なので。 その場合、追加質問については別途質問を立ててください。
guest

回答2

0

ベストアンサー

公式ドキュメント 曰く、配列は要素の型がシリアライズできれば、シリアライズできるようですよ。

シリアライズできるフィールドタイプ

・シリアライズできるフィールドタイプの配列

Dictionaryはそこに含まれていないようなので、出来ないのでしょう。

投稿2020/05/28 10:18

編集2020/05/29 01:07
BluOxy

総合スコア2663

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

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

BluOxy

2020/05/28 10:33

そもそも a0 と a1 がpublicではないため、外からアクセスできません。
MOTOMUR

2020/05/28 12:00

public抜けはミスでした。 リフレクションは初めて知りました。やりたいこととは違いますので、後学いたします。
MOTOMUR

2020/05/28 15:00 編集

(allyStatusesはscriptableobject) 直感的に下のようにはできない。 allyStatuses[i] = Resources.Load<AllyStatus>(Path); 下記のように追加もできない(Arrayじゃない。。) Array.Resize(ref allyStatuses, allyStatuses.Length + 1); できました。。System.Arrayでした。。
MOTOMUR

2020/05/28 15:30

NullReferenceException: Object reference not set to an instance of an object BattleManeger.Update () になってしまいますね。中身の初期宣言しないでfor文のみで配列の追加ってできないですか。?
guest

0

それはできませんし、する必要もないことです

投稿2020/05/28 10:14

y_waiwai

総合スコア88042

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問