質問編集履歴

5

追記

2017/06/07 03:50

投稿

ponju
ponju

スコア13

test CHANGED
File without changes
test CHANGED
@@ -60,110 +60,146 @@
60
60
 
61
61
 
62
62
 
63
+ (追記その2)
64
+
65
+ 場面をStepというStateパターン(もどき)で実装しています。
66
+
67
+ プレイヤーの状態についてもまた別のStateパターンで実装しています。
68
+
69
+ そのコードです。
70
+
71
+ ```C#
72
+
73
+ using com.hops.p.EnergyStone.phase.combat.step;
74
+
75
+ using UnityEngine;
76
+
77
+ using com.hops.p.EnergyStone;
78
+
79
+ using com.hops.p.EnergyStone.player;
80
+
81
+ using System.Collections.Generic;
82
+
83
+ using com.hops.p.EnergyStone.player.state;
84
+
85
+
86
+
87
+ namespace com.hops.p.EnergyStone.phase.combat.step
88
+
89
+ {
90
+
91
+ public class ActionStep : Step
92
+
93
+ {
94
+
95
+ List<Player> Players = GameManager.instance.charactors;
96
+
97
+ public const float STEPNULLTIME=1.5f;
98
+
99
+ public float stepNullTime = 0;
100
+
101
+ public override void Update()
102
+
103
+ {
104
+
105
+ base.Update();
106
+
107
+
108
+
109
+ for (int i = 0; i < Players.Count; i++)
110
+
111
+ {
112
+
113
+ Player player = Players[i];
114
+
115
+ player.Execute();
116
+
117
+ Debug.Log(player.name + "-state:" + player.state);
118
+
119
+ }
120
+
121
+ if(Players.TrueForAll(p=>p.state is StateStay||p.state is StateCharging)) stepNullTime += Time.deltaTime;
122
+
123
+
124
+
125
+ if (stepNullTime > STEPNULLTIME)
126
+
127
+ {
128
+
129
+ if (Players.TrueForAll(p => p.actionFlag)) {
130
+
131
+ ((CombatPhase)Phase.instance).currentStep = new EndStep();
132
+
133
+ }
134
+
135
+ else
136
+
137
+ {
138
+
139
+ for (int i = 0; i < Players.Count; i++)
140
+
141
+ {
142
+
143
+ if (!Players[i].actionFlag)
144
+
145
+ {
146
+
147
+ Players[i].DoAction();
148
+
149
+ stepNullTime = 0;
150
+
151
+ }
152
+
153
+ }
154
+
155
+ }
156
+
157
+ }
158
+
159
+ }
160
+
161
+ }
162
+
163
+ }
164
+
165
+ ```
166
+
167
+
168
+
169
+ あと関連するところとしては攻撃の前にキャラクターが回転するStateがあるのですが、そこからキャラクターがアイドル状態のstateに変わっていないようです。回転は次のメソッドで行っています。
170
+
171
+ ```C#
172
+
173
+ public void Turn2()
174
+
175
+ {
176
+
177
+ if (transform.rotation != destinationAngle2)
178
+
179
+ {
180
+
181
+ transform.rotation = Quaternion.RotateTowards(transform.rotation, destinationAngle2, Time.deltaTime * speed*50.0f);
182
+
183
+ }
184
+
185
+ else
186
+
187
+ {
188
+
189
+ this.state = new StateStay(this);
190
+
191
+ turn2Flag = true;
192
+
193
+ }
194
+
195
+ }
196
+
197
+
198
+
199
+ ```
200
+
201
+
202
+
203
+
204
+
63
205
  何かご存知の方がいればまたご教示願います。
64
-
65
-
66
-
67
- (追記その2)
68
-
69
- 場面をStepというStateパターン(もどき)で実装しています。
70
-
71
- プレイヤーの状態についてもまた別のStateパターンで実装しています。
72
-
73
- そのコードです。
74
-
75
- ```C#
76
-
77
- using com.hops.p.EnergyStone.phase.combat.step;
78
-
79
- using UnityEngine;
80
-
81
- using com.hops.p.EnergyStone;
82
-
83
- using com.hops.p.EnergyStone.player;
84
-
85
- using System.Collections.Generic;
86
-
87
- using com.hops.p.EnergyStone.player.state;
88
-
89
-
90
-
91
- namespace com.hops.p.EnergyStone.phase.combat.step
92
-
93
- {
94
-
95
- public class ActionStep : Step
96
-
97
- {
98
-
99
- List<Player> Players = GameManager.instance.charactors;
100
-
101
- public const float STEPNULLTIME=1.5f;
102
-
103
- public float stepNullTime = 0;
104
-
105
- public override void Update()
106
-
107
- {
108
-
109
- base.Update();
110
-
111
-
112
-
113
- for (int i = 0; i < Players.Count; i++)
114
-
115
- {
116
-
117
- Player player = Players[i];
118
-
119
- player.Execute();
120
-
121
- Debug.Log(player.name + "-state:" + player.state);
122
-
123
- }
124
-
125
- if(Players.TrueForAll(p=>p.state is StateStay||p.state is StateCharging)) stepNullTime += Time.deltaTime;
126
-
127
-
128
-
129
- if (stepNullTime > STEPNULLTIME)
130
-
131
- {
132
-
133
- if (Players.TrueForAll(p => p.actionFlag)) {
134
-
135
- ((CombatPhase)Phase.instance).currentStep = new EndStep();
136
-
137
- }
138
-
139
- else
140
-
141
- {
142
-
143
- for (int i = 0; i < Players.Count; i++)
144
-
145
- {
146
-
147
- if (!Players[i].actionFlag)
148
-
149
- {
150
-
151
- Players[i].DoAction();
152
-
153
- stepNullTime = 0;
154
-
155
- }
156
-
157
- }
158
-
159
- }
160
-
161
- }
162
-
163
- }
164
-
165
- }
166
-
167
- }
168
-
169
- ```

4

文の修正

2017/06/07 03:50

投稿

ponju
ponju

スコア13

test CHANGED
File without changes
test CHANGED
@@ -55,6 +55,8 @@
55
55
  値型などを変えてみましたが(Unity上では動いているので当然ですが)変化ありませんでした。
56
56
 
57
57
  Time.deltaTime自体もログ出力してみましたが、こちらはきちんと表示されています。
58
+
59
+ (値もUnity上のものもSH03Gのものもそれほど変わりませんでした)
58
60
 
59
61
 
60
62
 

3

追記

2017/06/07 03:46

投稿

ponju
ponju

スコア13

test CHANGED
File without changes
test CHANGED
@@ -59,3 +59,109 @@
59
59
 
60
60
 
61
61
  何かご存知の方がいればまたご教示願います。
62
+
63
+
64
+
65
+ (追記その2)
66
+
67
+ 場面をStepというStateパターン(もどき)で実装しています。
68
+
69
+ プレイヤーの状態についてもまた別のStateパターンで実装しています。
70
+
71
+ そのコードです。
72
+
73
+ ```C#
74
+
75
+ using com.hops.p.EnergyStone.phase.combat.step;
76
+
77
+ using UnityEngine;
78
+
79
+ using com.hops.p.EnergyStone;
80
+
81
+ using com.hops.p.EnergyStone.player;
82
+
83
+ using System.Collections.Generic;
84
+
85
+ using com.hops.p.EnergyStone.player.state;
86
+
87
+
88
+
89
+ namespace com.hops.p.EnergyStone.phase.combat.step
90
+
91
+ {
92
+
93
+ public class ActionStep : Step
94
+
95
+ {
96
+
97
+ List<Player> Players = GameManager.instance.charactors;
98
+
99
+ public const float STEPNULLTIME=1.5f;
100
+
101
+ public float stepNullTime = 0;
102
+
103
+ public override void Update()
104
+
105
+ {
106
+
107
+ base.Update();
108
+
109
+
110
+
111
+ for (int i = 0; i < Players.Count; i++)
112
+
113
+ {
114
+
115
+ Player player = Players[i];
116
+
117
+ player.Execute();
118
+
119
+ Debug.Log(player.name + "-state:" + player.state);
120
+
121
+ }
122
+
123
+ if(Players.TrueForAll(p=>p.state is StateStay||p.state is StateCharging)) stepNullTime += Time.deltaTime;
124
+
125
+
126
+
127
+ if (stepNullTime > STEPNULLTIME)
128
+
129
+ {
130
+
131
+ if (Players.TrueForAll(p => p.actionFlag)) {
132
+
133
+ ((CombatPhase)Phase.instance).currentStep = new EndStep();
134
+
135
+ }
136
+
137
+ else
138
+
139
+ {
140
+
141
+ for (int i = 0; i < Players.Count; i++)
142
+
143
+ {
144
+
145
+ if (!Players[i].actionFlag)
146
+
147
+ {
148
+
149
+ Players[i].DoAction();
150
+
151
+ stepNullTime = 0;
152
+
153
+ }
154
+
155
+ }
156
+
157
+ }
158
+
159
+ }
160
+
161
+ }
162
+
163
+ }
164
+
165
+ }
166
+
167
+ ```

2

追記

2017/06/06 21:21

投稿

ponju
ponju

スコア13

test CHANGED
File without changes
test CHANGED
@@ -46,6 +46,8 @@
46
46
 
47
47
  ここの部分では「一定時間」を変数にし、そこからTime.deltaTimeを引いています。そして0より小さくなった時にキャラクターの状態を遷移させ、行動を起こさせていますが、どうやらここの部分がうまくないようです。
48
48
 
49
+ ちなみにカウントダウンではなくTime.deltaTimeを足すカウントアップでも試してみましたがやはり上手くいっていません。
50
+
49
51
 
50
52
 
51
53
  Time.deltaTimeを引いている変数が、Unity上ではきちんと引かれていますが、実機のログでは引かれていません。

1

調査の追記

2017/06/06 21:10

投稿

ponju
ponju

スコア13

test CHANGED
File without changes
test CHANGED
@@ -35,3 +35,25 @@
35
35
 
36
36
 
37
37
  「コードのこういうところを見た方がいいんじゃないか/載せてくれないか」という指示をいただければなるべく早急に対応します。もしよろしければコメントどうぞよろしくお願いいたします。
38
+
39
+
40
+
41
+
42
+
43
+ (追記)
44
+
45
+ 「行動しているプレイヤーがおらず、まだ行動していないキャラクターがいるとき、一定時間経過後にそのキャラクターに行動をさせる(弾を発射するなど攻撃エフェクトを出す)」
46
+
47
+ ここの部分では「一定時間」を変数にし、そこからTime.deltaTimeを引いています。そして0より小さくなった時にキャラクターの状態を遷移させ、行動を起こさせていますが、どうやらここの部分がうまくないようです。
48
+
49
+
50
+
51
+ Time.deltaTimeを引いている変数が、Unity上ではきちんと引かれていますが、実機のログでは引かれていません。
52
+
53
+ 値型などを変えてみましたが(Unity上では動いているので当然ですが)変化ありませんでした。
54
+
55
+ Time.deltaTime自体もログ出力してみましたが、こちらはきちんと表示されています。
56
+
57
+
58
+
59
+ 何かご存知の方がいればまたご教示願います。