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

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

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

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

Unity

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

Q&A

解決済

2回答

911閲覧

UnityEditor拡張でforで表示した値を個別に設定したい

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

Unity

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

0グッド

0クリップ

投稿2020/03/05 04:09

編集2020/03/05 08:14

変更前
変更
変更後

写真のように一つ変えるとすべて変更されてしまうのですがどのように対応したらよいでしょうか。

using

1using System.Collections.Generic; 2using UnityEngine; 3using UnityEditor; 4 5[CustomEditor(typeof(BossInfo))] 6public class BossEditor : Editor 7{ 8 9 public override void OnInspectorGUI() 10 { 11 12 BossInfo boss = target as BossInfo; 13 14 EditorGUILayout.BeginVertical(GUI.skin.box); 15 EditorGUILayout.LabelField("ステータス"); 16 EditorGUILayout.BeginHorizontal(); 17 EditorGUILayout.LabelField("体力/現在値"); 18 boss.hp = EditorGUILayout.FloatField(boss.hp); 19 if (GUILayout.Button("Reset")) 20 { 21 Debug.Log("Reset"); 22 boss.hp = boss.max_hp; 23 } 24 EditorGUILayout.EndHorizontal(); 25 EditorGUILayout.BeginHorizontal(); 26 EditorGUILayout.LabelField("体力/最大値"); 27 boss.max_hp = EditorGUILayout.FloatField(boss.max_hp); 28 EditorGUILayout.EndHorizontal(); 29 EditorGUILayout.EndVertical(); 30 31 if( GUILayout.Button("Attck!!")) 32 { 33 boss.hp -= 1; 34 } 35 36 EditorGUILayout.BeginVertical(GUI.skin.box); 37 EditorGUILayout.LabelField("ウェーブ数"); 38 EditorGUILayout.BeginHorizontal(); 39 boss.wave = EditorGUILayout.IntField(boss.wave); 40 EditorGUILayout.EndHorizontal(); 41 EditorGUILayout.LabelField("攻撃変化"); 42 for (int i = 1; i <= boss.wave; i++)**//この部分** 43 { 44 EditorGUILayout.BeginVertical(GUI.skin.box); 45 EditorGUILayout.LabelField("Wave" + i); 46 //関数またはフォルダから攻撃を選ぶプルダウンを表示 47 //選ばれたらそれぞれの設定可能パラメータの表示 48 boss.attack =(BossInfo.ATTACK) EditorGUILayout.EnumPopup("攻撃", boss.attack); 49 EditorGUILayout.EndVertical(); 50 } 51 EditorGUILayout.EndVertical(); 52 53 } 54} 55 56Editor

using

1using System.Collections; 2using System.Collections.Generic; 3using System.IO; 4using System.Reflection; 5using UnityEngine; 6using UnityEngine.Events; 7 8 9public class BossInfo : MonoBehaviour 10{ 11 [SerializeField, Tooltip("体力/現在値")] 12 private float m_hp; 13 [SerializeField, Tooltip("体力/最大値")] 14 private float m_hp_max; 15 [SerializeField, Tooltip("ウェーブ数")] 16 private int m_wave; 17 public enum ATTACK 18 { 19 RollingShot, 20 RandomShot, 21 HomingShot, 22 SpecialShot, 23 RoundShot, 24 25 } 26 27 public ATTACK attack; 28 public float hp { get { return m_hp; } set { m_hp = value; } } 29 public float max_hp { get { return m_hp_max; } set { m_hp_max = value; } } 30 public int wave { get {return m_wave; } set { m_wave = value; } } 31 32} 33BossInfo

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

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

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

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

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

guest

回答2

0

using

1using System.Collections; 2using System.Collections.Generic; 3using System.IO; 4using System.Reflection; 5using UnityEngine; 6using UnityEngine.Events; 7 8 9public class BossInfo : MonoBehaviour 10{ 11 12 [SerializeField, Tooltip("体力/最大値")] 13 private float m_hp_max; 14 [SerializeField, Tooltip("ウェーブ数")] 15 private int m_wave; 16 public enum ATTACK 17 { 18 RollingShot, 19 RandomShot, 20 HomingShot, 21 SpecialShot, 22 RoundShot, 23 24 } 25 26 public ATTACK[] attack;//配列に変えた 27 public float max_hp { get { return m_hp_max; } set { m_hp_max = value; } } 28 public int wave { get {return m_wave; } set { m_wave = value; } } 29 30 31} 32BossInfo

using

1using System.Collections.Generic; 2using UnityEngine; 3using UnityEditor; 4 5[CustomEditor(typeof(BossInfo))] 6public class BossEditor : Editor 7{ 8 private int BeforeWave = 0; 9 public override void OnInspectorGUI() 10 { 11 12 BossInfo boss = target as BossInfo; 13 14 EditorGUILayout.BeginVertical(GUI.skin.box); 15 EditorGUILayout.LabelField("ステータス"); 16 EditorGUILayout.BeginHorizontal(); 17 EditorGUILayout.LabelField("体力/最大値"); 18 boss.max_hp = EditorGUILayout.FloatField(boss.max_hp); 19 EditorGUILayout.EndHorizontal(); 20 EditorGUILayout.EndVertical(); 21 22 23 24 EditorGUILayout.BeginVertical(GUI.skin.box); 25 EditorGUILayout.LabelField("ウェーブ数"); 26 EditorGUILayout.BeginHorizontal(); 27 boss.wave = EditorGUILayout.IntField(boss.wave); 28 EditorGUILayout.EndHorizontal(); 29 if (boss.wave > BeforeWave)//配列の初期化 30 { 31 BeforeWave = boss.wave; 32 boss.attack = new BossInfo.ATTACK[boss.wave]; 33 } 34 EditorGUILayout.LabelField("攻撃変化"); 35 for (int i = 1; i <= boss.wave; i++) 36 { 37 38 EditorGUILayout.BeginVertical(GUI.skin.box); 39 EditorGUILayout.LabelField("Wave" + i); 40 //関数またはフォルダから攻撃を選ぶプルダウンを表示 41 //選ばれたらそれぞれの設定可能パラメータの表示 42 43 boss.attack[i-1] = (BossInfo.ATTACK)EditorGUILayout.EnumPopup("攻撃:"+i, boss.attack[i-1]);//追加箇所、0番目から入れたいので-1 44 45 EditorGUILayout.EndVertical(); 46 47 } 48 EditorGUILayout.EndVertical(); 49 50 51 } 52 53 54} 55Editor

配列にすることで解決できました

投稿2020/03/10 11:45

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

boss.attackが配列になっていない為ですね。
boss.waveの数だけattackを増やしましょう。

for (int i = 1; i <= boss.wave; i++)**//この部分** { EditorGUILayout.BeginVertical(GUI.skin.box); EditorGUILayout.LabelField("Wave" + i); //関数またはフォルダから攻撃を選ぶプルダウンを表示 //選ばれたらそれぞれの設定可能パラメータの表示 //boss.attack =(BossInfo.ATTACK) EditorGUILayout.EnumPopup("攻撃", boss.attack); boss.attack[i] =(BossInfo.ATTACK) EditorGUILayout.EnumPopup("攻撃", boss.attack[i]); EditorGUILayout.EndVertical(); }

投稿2020/03/05 07:59

stdio

総合スコア3307

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

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

退会済みユーザー

退会済みユーザー

2020/03/05 08:29

boss.attackの情報が足りていませんでした。attackはEnumの変数です。もしかしてEnumPopUpの使い方が間違っているのでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問