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

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

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

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

Unity

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

Q&A

解決済

1回答

804閲覧

MonoBehaviourを継承していないクラスをSerializedPropertyに変換したいです。

LightGive

総合スコア14

C#

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

Unity

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

0グッド

2クリップ

投稿2017/09/14 04:54

###前提・実現したいこと
下記のクラスのTestEditor内で、MonoBehaviourを継承していないクラスのリストの最後尾に、編集した新しい値を追加するために、MyClassをSerializedPropertyに変換したいです。

###該当のソースコード

1.カスタムクラス

[System.Serializable] public class MyClass { public AudioClip audioClip; public float floatVal; }

2.インスペクタ拡張のターゲットクラス

public class Test : MonoBehaviour { [SerializeField] private List<MyClass> myClassList = new List<MyClass>(); }

3.インスペクタ拡張用クラス

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; [CustomEditor(typeof(Test))] public class TestEditor : Editor { private SerializedObject serializedObj; private SerializedProperty listProp; void OnEnable() { serializedObj = new SerializedObject(target); listProp = serializedObj.FindProperty("myClassList"); } /// <summary> /// リストに要素を追加 /// </summary> /// <param name="_addItem">追加する要素</param> void AddListItem(MyClass _addItem) { listProp.arraySize++; //配列の最後の要素を書き換え(ここをどうやるか分からないです) //listProp.GetArrayElementAtIndex(listProp.arraySize - 1) = _addItem; } /// <summary> /// インスペクタ拡張 /// </summary> public override void OnInspectorGUI() { base.OnInspectorGUI(); //ボタンを押した時、リストに新しく要素を追加する if (GUILayout.Button("AddListItem")) { MyClass item = new MyClass(); AddListItem(item); } } }

3のクラスの配列の最後の要素を書き換える所をどうすればいいのかわかりません、方法を教えていただきたいです。よろしくお願い致します。

###補足情報(言語/FW/ツール等のバージョンなど)
Unityのバージョン:Unity 2017.1.0.p5

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

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

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

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

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

guest

回答1

0

ベストアンサー

AddListItemメソッド→削除
OnInspectorGUIメソッド→以下のように変更

C#

1public override void OnInspectorGUI() 2 { 3 base.OnInspectorGUI (); 4 5 if (GUILayout.Button("Append Item")) { 6 Undo.RecordObjects(targets, "Append Item"); 7 8 foreach (Test t in targets) { 9 t.myClassList.Add(new MyClass()); 10 } 11 EditorUtility.SetDirty(target); 12 } 13 }

とりあえずこれで動作しました。
参考:Using Generic List with serializedProperty Inspector - Unity Answers

投稿2017/09/15 02:35

sakura_hana

総合スコア11425

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

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

LightGive

2017/09/16 00:52

有難うございます、無事リストに追加されてインスペクタに反映されました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問