回答編集履歴

5

文章修正 コード修正

2020/05/13 12:25

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- X … Player_Mainオブジェクトからの値を参照したい
5
+ X … いかに効率的にかつ簡略化して変数の値を見れるか(要はPlayer_Mainオブジェクトからの値を参照したい
6
6
 
7
7
  Y … メソッドの内容が同じで引数の型だけ変えたい
8
8
 
@@ -64,7 +64,7 @@
64
64
 
65
65
  GUI_S.Auto_TextField("AngleDir : " + PlayerM.AngelDir, "AngleDir");
66
66
 
67
- GUI_S.Auto_TextField("Player.transform.position : " + Player_Main.transform.position, "Player.transform.position");
67
+ GUI_S.Auto_TextField("Player.transform.position : " + PlayerM.PlayerTransform.transform.position, "Player.transform.position");
68
68
 
69
69
  GUI_S.Auto_TextField("Player.Speed : " + PlayerM.Speed, "Player.Speed");
70
70
 

4

改善例を更新

2020/05/13 12:25

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -1,10 +1,16 @@
1
- コードを整理すると問題が解決すると思います。
1
+ [XY問題](https://ja.meta.stackoverflow.com/questions/2701/xy-%E5%95%8F%E9%A1%8C-%E3%81%A8%E3%81%AF%E4%BD%95%E3%81%A7%E3%81%99%E3%81%8B)に感じます。
2
2
 
3
- - クラス名やメソッド名から処理の内容がイメージできない
4
3
 
5
- - `static`の乱用で`Vars`の状態が分かりにくい
6
4
 
5
+ X … Player_Mainオブジェクトからの値を参照したい
6
+
7
- - 冗長的な処理含まれる
7
+ Y … メソッドの内容同じで引数の型だけ変えたい
8
+
9
+
10
+
11
+ まず、Varsクラスを用意する必要性を感じません。
12
+
13
+ よって、Omit_Rpvメソッドを用意する必要もなくなるので、下記で解決します。
8
14
 
9
15
 
10
16
 
@@ -14,43 +20,15 @@
14
20
 
15
21
  {
16
22
 
17
- public Player Create () {
23
+ public float Speed = 1; //PlayerのSpeedを定義及び代入
18
24
 
19
- return new Player {
25
+ public float AngleDir = 0; //AngleDirを定義
20
26
 
21
- Position = PlayerTransform.transform.position;
27
+ public float X_Rotation = 0; //X_Rotationを定義
22
28
 
23
- AngleDir = AngleDir;
29
+ public float Y_Rotation = 0; //Y_Rotationを定義
24
30
 
25
- Speed = Speed;
26
-
27
- RotationX = X_Rotation;
28
-
29
- RotationY = Y_Rotation;
30
-
31
- };
32
-
33
- }
34
-
35
- }
36
-
37
- ```
38
-
39
- ```C#
40
-
41
- public class Player
31
+ public Transform PlayerTransform;
42
-
43
- {
44
-
45
- public float Speed = 0;
46
-
47
- public float AngleDir = 0;
48
-
49
- public float RotationX = 0;
50
-
51
- public float RotationY = 0;
52
-
53
- public Vector3 Position = new Vector3(0, 0, 0);
54
32
 
55
33
  }
56
34
 
@@ -84,15 +62,11 @@
84
62
 
85
63
 
86
64
 
87
- var player = PlayerM.Create();
65
+ GUI_S.Auto_TextField("AngleDir : " + PlayerM.AngelDir, "AngleDir");
88
66
 
67
+ GUI_S.Auto_TextField("Player.transform.position : " + Player_Main.transform.position, "Player.transform.position");
89
68
 
90
-
91
- GUI_S.Auto_TextField("AngleDir : " + player.AngelDir, "AngleDir");
92
-
93
- GUI_S.Auto_TextField("Player.transform.position : " + player.Position, "Player.transform.position");
94
-
95
- GUI_S.Auto_TextField("Player.Speed : " + player.Speed, "Player.Speed");
69
+ GUI_S.Auto_TextField("Player.Speed : " + PlayerM.Speed, "Player.Speed");
96
70
 
97
71
  /*----------------------*/
98
72
 
@@ -101,27 +75,3 @@
101
75
  }
102
76
 
103
77
  ```
104
-
105
-
106
-
107
- ### 変更要点
108
-
109
-
110
-
111
- - `ReturnPlayerVar`→`Create`に命名変更
112
-
113
- - `Vars`→`Player`に変更 (PlayerPositionを保持しているところからプレイヤーに関連する情報と推測したためこのように命名。クラス設計が正しいかは不明)
114
-
115
- - staticを削った
116
-
117
- - 冗長的な処理も削った
118
-
119
-
120
-
121
- ### まとめ
122
-
123
-
124
-
125
- コードを整理すると`Omit_Rpv`メソッドがなくなりました。
126
-
127
- なので、それぞれのクラス・メソッドの役割を整理することでも今回の問題は解決します。

3

改善例を更新

2020/05/13 12:09

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -10,53 +10,27 @@
10
10
 
11
11
  ```C#
12
12
 
13
- public Player CreateAndSetFieldByName (string fieldName)
13
+ public class Player_Main : MonoBehaviour
14
14
 
15
15
  {
16
16
 
17
- Player player = new Player();
17
+ public Player Create () {
18
18
 
19
- if (fieldName == "AngleDir")
19
+ return new Player {
20
20
 
21
- {
21
+ Position = PlayerTransform.transform.position;
22
22
 
23
- player.AngleDir = AngleDir;
23
+ AngleDir = AngleDir;
24
24
 
25
- }
25
+ Speed = Speed;
26
26
 
27
- else if (fieldName == "Speed")
27
+ RotationX = X_Rotation;
28
28
 
29
- {
29
+ RotationY = Y_Rotation;
30
30
 
31
- player.Speed = Speed;
31
+ };
32
32
 
33
33
  }
34
-
35
- else if (fieldName == "X_Rotation")
36
-
37
- {
38
-
39
- player.RotationX = X_Rotation;
40
-
41
- }
42
-
43
- else if (fieldName == "Y_Rotation")
44
-
45
- {
46
-
47
- player.RotationY = Y_Rotation;
48
-
49
- }
50
-
51
- else if (fieldName == "PlayerTp")
52
-
53
- {
54
-
55
- player.Position = PlayerTransform.transform.position;
56
-
57
- }
58
-
59
- return player;
60
34
 
61
35
  }
62
36
 
@@ -68,7 +42,7 @@
68
42
 
69
43
  {
70
44
 
71
- public int Speed = 0;
45
+ public float Speed = 0;
72
46
 
73
47
  public float AngleDir = 0;
74
48
 
@@ -82,27 +56,65 @@
82
56
 
83
57
  ```
84
58
 
59
+
60
+
61
+ ```C#
62
+
63
+ public class RealTimeInfo : MonoBehaviour
64
+
65
+ {
66
+
67
+ public RealTime_Setting RealTime_Setting;
68
+
69
+ public Player_Main PlayerM;
70
+
71
+ GUI_Support GUI_S = new GUI_Support(); //GUI_Supportを変数に代入
72
+
73
+
74
+
75
+ void OnGUI()
76
+
77
+ {
78
+
79
+ /*デバック用テキスト表示*/
80
+
81
+ if(RealTime_Setting.MainAudioSource.clip.name != null)
82
+
83
+ GUI_S.Auto_TextField("BGM : " + RealTime_Setting.MainAudioSource.clip.name.ToString(), "LoadType");
84
+
85
+
86
+
87
+ var player = PlayerM.Create();
88
+
89
+
90
+
91
+ GUI_S.Auto_TextField("AngleDir : " + player.AngelDir, "AngleDir");
92
+
93
+ GUI_S.Auto_TextField("Player.transform.position : " + player.Position, "Player.transform.position");
94
+
95
+ GUI_S.Auto_TextField("Player.Speed : " + player.Speed, "Player.Speed");
96
+
97
+ /*----------------------*/
98
+
99
+ }
100
+
101
+ }
102
+
103
+ ```
104
+
105
+
106
+
85
107
  ### 変更要点
86
108
 
87
109
 
88
110
 
89
- - `ReturnPlayerVar`→`CreateAndSetFieldByName`に命名変更
111
+ - `ReturnPlayerVar`→`Create`に命名変更
90
112
 
91
- - `Vars`→`Player`に変更 (PlayerPositionを保持しているところからプレイヤー情報と推測したためこのように命名。クラス設計が正しいかは不明)
113
+ - `Vars`→`Player`に変更 (PlayerPositionを保持しているところからプレイヤーに関連する情報と推測したためこのように命名。クラス設計が正しいかは不明)
92
114
 
93
115
  - staticを削った
94
116
 
95
117
  - 冗長的な処理も削った
96
-
97
-
98
-
99
- ### 思うところ
100
-
101
- - `CreateAndSetFieldByName`はCreateとSetの2つにメソッドを分けたほうが分かりやすい
102
-
103
- - そもそも上記メソッドを用意する必要性があるかは不明
104
-
105
- - `Player`のクラス定義が妥当であるかは不明
106
118
 
107
119
 
108
120
 

2

文章の修正

2020/05/13 12:02

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -60,7 +60,9 @@
60
60
 
61
61
  }
62
62
 
63
+ ```
63
64
 
65
+ ```C#
64
66
 
65
67
  public class Player
66
68
 
@@ -108,6 +110,6 @@
108
110
 
109
111
 
110
112
 
111
- コードを整理するとOmit_Rpvメソッドがなくなりました。
113
+ コードを整理すると`Omit_Rpv`メソッドがなくなりました。
112
114
 
113
115
  なので、それぞれのクラス・メソッドの役割を整理することでも今回の問題は解決します。

1

コードと回答が一致していない。

2020/05/13 08:16

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  ```C#
12
12
 
13
- public Player Create (string fieldName)
13
+ public Player CreateAndSetFieldByName (string fieldName)
14
14
 
15
15
  {
16
16