前提
Unity2Dで拡張機能を実装中、分からないことが出てきました。値の範囲を取得するMinMaxSlider
というものの間の範囲を取得したいです。
実現したいこと
例えば、リザルト画面で残機の数に応じて3種類の画像を切り替えたいとき、残機が3以上だったら黄色、残機が2以上だったらオレンジ色、残機が1以上だったら赤色の画像をSetActiveします。if文の判定で三段階のクリア画面を実現したいです。
発生している問題・エラーメッセージ
エラーメッセージ Assets\Editor\EditorTest\MyDataEditor.cs(33,18): error CS0029: Cannot implicitly convert type 'void' to 'float'
該当のソースコード
C#
1// 拡張する側 2using UnityEditor; 3 4// カスタマイズするクラスを設定 5[CustomEditor(typeof(Zannki))] 6// 複数オブジェクトを選択した時に変更可能にする 7[CanEditMultipleObjects] 8public class MyDataEditor : Editor 9{ 10 // MinMaxSlider用の初期の値 11 float minVal; 12 float maxVal; 13 float middle; 14 15 void OnEnable() 16 { 17 } 18 19 // インスペクタが更新されたら呼ばれる 20 public override void OnInspectorGUI() 21 { 22 // シリアライズオブジェクトの更新 23 serializedObject.Update(); 24 25 // targetでデータを取得しキャスト 26 Zannki zannki = (Zannki)target; 27 28 // MinMaxSliderを使用してmin,maxの値を変える 29 minVal = EditorGUILayout.FloatField("min", zannki.min); 30 maxVal = EditorGUILayout.FloatField("max", zannki.max); 31 middle = EditorGUILayout.MinMaxSlider(ref minVal, ref maxVal, 0, 30);// ***ここ*** 32 33 // 変更された値をデータに反映 34 zannki.min = minVal; 35 zannki.max = maxVal; 36 37 zannki.min = EditorGUILayout.FloatField("min", zannki.min); 38 zannki.max = EditorGUILayout.FloatField("max", zannki.max); 39 40 // 並びを調整して表示 41 EditorGUILayout.BeginHorizontal(); 42 43 GUILayout.Label("TEST"); 44 EditorGUILayout.LabelField("Test"); 45 46 EditorGUILayout.EndHorizontal(); 47 48 // シリアライズオブジェクトのプロパティの変更を更新 49 serializedObject.ApplyModifiedProperties(); 50 51 // デフォルトのインスペクタを表示 52 DrawDefaultInspector(); 53 54 // インスペクタにボタンを表示し押したら値をリセット 55 if (GUILayout.Button("全てのパラメータをリセット")) 56 { 57 58 Debug.Log("パラメータをリセットしました"); 59 } 60 61 // エディターの設定を取得 62 if (EditorPrefs.HasKey("TEST")) 63 { 64 if (EditorPrefs.GetBool("TEST")) 65 { 66 Debug.Log("エディター設定がセットされている"); 67 } 68 else 69 { 70 Debug.Log("エディター設定がセットされていない"); 71 } 72 } 73 74 // エディターの設定を保存 75 if (GUILayout.Button("値をセット・リセット")) 76 { 77 EditorPrefs.SetBool("TEST", !EditorPrefs.GetBool("TEST")); 78 } 79 80 // エディターの設定を削除 81 if (GUILayout.Button("エディター設定を削除")) 82 { 83 if (EditorPrefs.HasKey("TEST")) 84 { 85 EditorPrefs.DeleteKey("TEST"); 86 Debug.Log("エディター設定を削除しました。"); 87 } 88 } 89 90 EditorGUILayout.HelpBox("ここでインスペクタ項目終わり", MessageType.Info); 91 } 92}
C#
1// 拡張される側 2using UnityEngine.UI; 3using UnityEngine.SceneManagement; 4 5public class Zannki : MonoBehaviour 6{ 7 private Text zannkiText = null; 8 [HideInInspector] public int oldZannkiNum = 0; 9 [HideInInspector] public bool isGameOver; 10 public GameObject ScoreText; 11 Text SoldierScoreText; 12 13 [Header("切り替え")] public GameObject[] panel; 14 [Header("ライフ")] public int hikaku1; 15 [Header("ライフ")] public int hikaku2; 16 [Header("ライフ")] public int hikaku3; 17 18 public float min; // 小さい値 19 public float max; // 大きい値 20 21 public static Zannki instance; 22 private void Awake() 23 { 24 if (instance == null) 25 { 26 instance = this; 27 } 28 } 29 30 // Start is called before the first frame update 31 void Start() 32 { 33 zannkiText = GetComponent<Text>(); 34 SoldierScoreText = ScoreText.GetComponent<Text>(); 35 this.transform.localPosition = new Vector3(0f, 0f, 0f); 36 37 if (SceneManager.GetActiveScene().name == "Tutorial" || 38 SceneManager.GetActiveScene().name == "Stage1") 39 { 40 oldZannkiNum = ParaamsSO.Entity.zannki1; 41 } 42 if (SceneManager.GetActiveScene().name == "Stage2") 43 { 44 oldZannkiNum = ParaamsSO.Entity.zannki2; 45 } 46 if (SceneManager.GetActiveScene().name == "Stage3") 47 { 48 oldZannkiNum = ParaamsSO.Entity.zannki3; 49 } 50 if (SceneManager.GetActiveScene().name == "Stage4") 51 { 52 oldZannkiNum = ParaamsSO.Entity.zannki4; 53 } 54 if (SceneManager.GetActiveScene().name == "Stage5") 55 { 56 oldZannkiNum = ParaamsSO.Entity.zannki5; 57 } 58 if (SceneManager.GetActiveScene().name == "Stage6") 59 { 60 oldZannkiNum = ParaamsSO.Entity.zannki6; 61 } 62 if (SceneManager.GetActiveScene().name == "Stage7") 63 { 64 oldZannkiNum = ParaamsSO.Entity.zannki7; 65 } 66 if (SceneManager.GetActiveScene().name == "Stage8") 67 { 68 oldZannkiNum = ParaamsSO.Entity.zannki8; 69 } 70 if (SceneManager.GetActiveScene().name == "Stage9") 71 { 72 oldZannkiNum = ParaamsSO.Entity.zannki9; 73 } 74 if (SceneManager.GetActiveScene().name == "Stage10") 75 { 76 oldZannkiNum = ParaamsSO.Entity.zannki10; 77 } 78 if (SceneManager.GetActiveScene().name == "Stage11") 79 { 80 oldZannkiNum = ParaamsSO.Entity.zannki11; 81 } 82 if (SceneManager.GetActiveScene().name == "Stage12") 83 { 84 oldZannkiNum = ParaamsSO.Entity.zannki12; 85 } 86 } 87 88 public IEnumerator SubZannki() 89 { 90 if (oldZannkiNum > 0) 91 { 92 oldZannkiNum--; 93 SoldierScoreText.color = Color.red; 94 yield return new WaitForSeconds(0.7f); 95 SoldierScoreText.color = Color.black; 96 } 97 else 98 { 99 isGameOver = true; 100 SoldierScoreText.color = Color.red; 101 yield return new WaitForSeconds(0.7f); 102 SoldierScoreText.color = Color.black; 103 } 104 zannkiText.text = "" + oldZannkiNum.ToString(); 105 } 106 public IEnumerator AddZannki() 107 { 108 if (oldZannkiNum < 99) 109 { 110 oldZannkiNum +=2; 111 SoldierScoreText.color = Color.green; 112 yield return new WaitForSeconds(0.7f); 113 SoldierScoreText.color = Color.black; 114 } 115 zannkiText.text = "" + oldZannkiNum.ToString(); 116 } 117 118 public void RetryGame() 119 { 120 isGameOver = false; 121 } 122}
試したこと
確認したいこと
float型で変数を定義して、"EditorGUILayout.MinMaxSlider(ref minVal, ref maxVal, 0, 30);"
を代入すれば間の値まで取得できると考えました。
補足情報(FW/ツールのバージョンなど)
Unity2D
2021.2.13f1
VisualStudio2017

あなたの回答
tips
プレビュー