質問編集履歴

2

初心者マークをつけました。

2020/01/12 07:55

投稿

Kageyama_23457
Kageyama_23457

スコア21

test CHANGED
File without changes
test CHANGED
@@ -264,6 +264,6 @@
264
264
 
265
265
  ・一応、加速アイテムを取って加速しっぱなしの映像を貼っておきます。
266
266
 
267
- (とあるマンガの非営利二次創作で、拙い絵でお恥ずかしいのですがスルーしてください
267
+ (とあるマンガの非営利二次創作で、拙い絵でお恥ずかしいのですがスルーお願います
268
268
 
269
269
  https://streamable.com/p6esx

1

投稿時の問題「加速できない」→現在「加速するが元の速度に戻らない」ということで、「加速できない」の自己解決も交え改訂しました。

2020/01/12 07:54

投稿

Kageyama_23457
Kageyama_23457

スコア21

test CHANGED
@@ -1 +1 @@
1
- Unity縦スクロール障害物競争で、加速装置(パネル)作りたい
1
+ Unity縦スクロール障害物競争で、加速アイテム取っあと元の速さに戻るようにした
test CHANGED
@@ -1,136 +1,240 @@
1
- ### Unity縦スクロール障害物競争で、加速装置(パネル)を作りたい
1
+ ### Unity縦スクロール障害物競争で、加速アイテムを作りたい
2
-
3
-
4
-
2
+
3
+
4
+
5
- Unity、C#ともに初心者、そしてteratailでの質問が初めてなので、至らぬ点あるかと思いますがご容赦ください。
5
+ Unity、C#ともに初心者なので、至らぬ点あるかと思いますがご容赦ください。
6
6
 
7
7
  Unityの3Dモードで、縦スクロールの、障害物競争のようなゲームを作っています。
8
8
 
9
9
  具体的に書くと、「自機キャラがいて、他に3人ほどCPUがいて、ゴールを目指す。
10
10
 
11
- 途中、①障害物(当たり判定使用)、②加速パネル踏んづけると数秒走るのが速くなる)、そして③アビリティパネルがある。
12
-
13
- アビリティパネル踏んづけるとそのキャラごとの必殺技が使えて、他キャラへの妨害などができる。
14
-
15
- CPUも障害物を避けたり加速パネルやアビリティパネルを狙ってきたりする。」といったところです。
16
-
17
-
18
-
19
- この度は加速パネルについて質問致します。
20
-
21
- このページからリンクを貼ること避けますが
22
-
23
- unity 加速装置」と検索すると講座ページが2つほど出てきて、どちらも同じスクリプが載っす(下記2つめ)
24
-
25
- これを試しましたが、
26
-
27
- ・当方のキャラターオブジェクはrigidbody2D
28
-
29
- ・しかし、お手本スクリプトのGet.Component<>はrigidbody
30
-
31
- おそらくこの点が問題なのではと思うのですが、作用しません。3Dのキューブに2Dのキャラがめりこむだけです。
32
-
33
- Get.Component<>のrigidbodyをrigidbody2Dに書き換えるとunityのコンソールにエラーが出ます(下記1つめ)。
34
-
35
-
36
-
37
- 解決法は、
38
-
39
- ①お手本スクリプトをrigidbosy2D仕様に書き換える
40
-
41
- ②加速オブジェクトのスクリプトではなく、自機キャラのスクリプトに記述する このどちらかかと思うのですが、
42
-
43
-
44
-
45
- ①を取るべきだとしたら、単に書き方がわからないという話になるので申し訳ないのですが、書き方をご教授頂きたく存じます。
46
-
47
- ②だとしたら、ifで書けるのかとは思うのですが、
48
-
49
- 日本語で言う「もし加速パネルを踏んづけたら、A秒間、速度が+Bされる」という書き方がわからないで、
50
-
51
- やはり申し訳ないのですが書き方をご教授頂きたく存じます。
52
-
53
-
54
-
55
- ### 発生している問題・エラーメッセージ
56
-
57
-
11
+ 途中、①障害物(当たり判定使用)、②加速アイテム一定時間速くなる)、そして③アビリティアイテムがある。
12
+
13
+ アビリティアイテムるとそのキャラごとの必殺技が使えて、他キャラへの妨害などができる。
14
+
15
+ CPUも障害物を避けたり加速アイテムやアビリティアイテムを狙ってきたりする。」といったところです。
16
+
17
+
18
+
19
+ この度は加速アイテムについて質問致します。
20
+
21
+ まず、「unity 加速装置」と検索して出る講座ページの「加速パネル(踏んづけて加速)」でダメだったので
22
+
23
+ 「加速アイテム(ゲッ加速)」にしした
24
+
25
+
26
+
27
+ ↓playerスリプまるごと
28
+
29
+ ```C#
30
+
31
+ using System.Collections;
32
+
33
+ using System.Collections.Generic;
34
+
35
+ using UnityEngine;
36
+
37
+
38
+
39
+ public class player : MonoBehaviour
40
+
41
+ {
42
+
43
+ public float speed;//インスペクタで速度をいじくる宣言
44
+
45
+
46
+
47
+ private Animator anim = null;
48
+
49
+ private Rigidbody2D rb = null;//アニメRBの変数宣言
50
+
51
+
52
+
53
+ private string ochaTag = "Ocha";//★お茶タグを宣言
54
+
55
+
56
+
57
+ void Start()
58
+
59
+ {
60
+
61
+ anim = GetComponent<Animator>();
62
+
63
+ rb = GetComponent<Rigidbody2D>();//インスタンスを取得命令
64
+
65
+ }
66
+
67
+
68
+
69
+ // Update is called once per frame
70
+
71
+ private bool isKasoku = false;//★加速boolを宣言、通常は加速してないよ(お茶を取ってないよ)
72
+
73
+ void FixedUpdate()
74
+
75
+ {
76
+
77
+ float verticalKey = Input.GetAxis("Vertical");//上下キー宣言
78
+
79
+ float horizontalKey = Input.GetAxis("Horizontal");//左右キー宣言
80
+
81
+ float ySpeed = 0.0f;//y軸移動速度の初期値
82
+
83
+ float xSpeed = 0.0f;//x軸移動速度の初期値
84
+
85
+ if(verticalKey<0)//下キーが押されたら(上に行く必要がないゲームなので下キーのみ指定しています)
86
+
87
+ {
88
+
89
+ anim.SetBool("run", true);//アニメon
90
+
91
+ ySpeed = -speed;//走る
92
+
93
+ }
94
+
95
+ else
96
+
97
+ {
98
+
99
+ anim.SetBool("run", false);//アニメoff
100
+
101
+ ySpeed = 0.0f;//走らない
102
+
103
+ }
104
+
105
+
106
+
107
+ if(horizontalKey>0)//右キーが押されたら
108
+
109
+ {
110
+
111
+ xSpeed = speed;//右に行く
112
+
113
+ }
114
+
115
+ else if(horizontalKey<0)//左キーが押されたら
116
+
117
+ {
118
+
119
+ xSpeed = -speed;//左に行く
120
+
121
+ }
122
+
123
+ rb.velocity = new Vector2(xSpeed, ySpeed);//上記の記述をこの式に代入して動いているそうですがよくわかってません。
124
+
125
+
126
+
127
+ if(isKasoku==true)//★加速フラグがtrueの場合の挙動
128
+
129
+ {
130
+
131
+ rb.velocity = new Vector2(xSpeed,ySpeed*4);//★y軸移動速度が4倍になる(今後通常時の走行速度の違う他キャラも増やすので、この方が汎用性があります)
132
+
133
+ }
134
+
135
+ else if(isKasoku==false)//★加速フラグがfalse、つまり通常時
136
+
137
+ {
138
+
139
+ rb.velocity = new Vector2(xSpeed, ySpeed);//★通常時と同じ速度を記述
140
+
141
+ }
142
+
143
+ }
144
+
145
+ private void OnCollisionEnter2D(Collision2D collision)//★(お茶との)衝突判定
146
+
147
+ {
148
+
149
+ if(collision.collider.tag==ochaTag)//★お茶タグとぶつかったら
150
+
151
+ {
152
+
153
+ isKasoku = true;//★加速フラグがtrueになるよ
154
+
155
+ Destroy(collision.gameObject);//お茶が消えるよ
156
+
157
+ }
158
+
159
+ }
160
+
161
+ }
162
+
163
+ //アイテムによる加速までできた。
58
164
 
59
165
  ```
60
166
 
167
+
168
+
169
+ 今困っているのは、加速したあと元の速さに戻せないことです。
170
+
171
+ 例:5秒間、走る速さが4倍になる。その後は元の速さで走る(キャラクターごとに元の走る速さは違います)
172
+
173
+ というふうにしたいです。
174
+
175
+
176
+
177
+ ### 試したこと
178
+
179
+ ・コルーチンが正解かと思い、上記スクリプトにねじ込もうとしました。
180
+
181
+
182
+
183
+ ###エラー、メッセージ
184
+
185
+ 以下、上記スクリプトにコルーチンをねじ込んだ部分を抜粋
186
+
187
+ ```C#
188
+
189
+ void Start()
190
+
191
+ {
192
+
193
+ anim = GetComponent<Animator>();
194
+
61
- CS1503:Argument2:cannot convert from 'UnityEngine.ForceMode'to'UnityEngine.ForceMode2D'
195
+ rb = GetComponent<Rigidbody2D>();//インスタンスを取得命令
196
+
197
+ StartCoroutine("Kasoku");
198
+
199
+ }
200
+
201
+ IEnumerable Kasoku()
202
+
203
+ {
204
+
205
+ rb.velocity = new Vector2(xSpeed, ySpeed * 4);
206
+
207
+
208
+
209
+ yield return new WaitForSeconds(5)
210
+
211
+
212
+
213
+ //ここに「元の速度に戻る」と書くべきだと思うのですが、書き方がわかりません。
214
+
215
+ }
62
216
 
63
217
  ```
64
218
 
65
-
66
-
67
- ### 該当のソースコード
68
-
69
-
70
-
71
- ```C#
72
-
73
- using System.Collections;
74
-
75
- using System.Collections.Generic;
76
-
77
- using UnityEngine;
78
-
79
-
80
-
81
- public class kasoku : MonoBehaviour
82
-
83
- {
84
-
85
- void OnTriggerEnter(Collider other)
86
-
87
- {
88
-
89
- other.gameObject.GetComponent<Rigidbody>().AddForce(new Vector3(0, -30, 0),ForceMode.VelocityChange);
90
-
91
- }//うちのキャラたちはRB2Dなので、これで動くか不明→だめだった
92
-
93
- //ゴールは下方向(y軸マイナス方向)なので、Vevtor3のyはマイナスに書き換えました
94
-
95
- // Start is called before the first frame update
219
+ ①この質問ページでは見えませんが、VisuialStdioにおいてxSpeedとySpeedに赤線が引かれ、
96
-
97
- void Start()
220
+
98
-
99
- {
100
-
101
-
102
-
103
- }
104
-
105
-
106
-
107
- // Update is called once per frame
221
+ 「現在のコンテキストに(xSpeed/ySpeed)という名前は存在しません」と出ます。
222
+
108
-
223
+ playerスクリプト内で定義(?)していると思うのですがだめなのでしょうか。
224
+
225
+ ②スクリプト内にも書きましたが、元の速度に戻るという命令の書き方がわかりません。
226
+
109
- void Update()
227
+ 丸投げ状態で申し訳ないのですがご教授頂きたく存じます。
110
-
111
- {
228
+
112
-
113
-
114
-
115
- }
229
+
116
-
117
- }
230
+
118
-
119
-
120
-
121
- ```
122
-
123
-
124
-
125
- ### 試したこと
126
-
127
-
128
-
129
- ・Get.Component<>rigidbodyをrigidbody2Dに書き換えた(上記とおだめでした
231
+ playerスクリプトですが、上記ものはvelocityで動かしていますが、アドバイス頂きAddForceで動くもも作した
130
-
232
+
131
- ・スクリプト3Dキューブではなく自分で描いた加速パネル画像(2DandUI)くっつけ、is triggerにチェックを入れ
233
+ 今回はvelocityのもの載せましたがAddForceの方が加速と減速問題が解決しやすいならそちらしますのでお教え頂きいです。
132
-
133
-  (エラーは出ませんがなんの作用もありませんでした)
234
+
235
+
236
+
237
+
134
238
 
135
239
  ### 補足情報(FW/ツールのバージョンなど)
136
240
 
@@ -152,4 +256,14 @@
152
256
 
153
257
  ・キャラクターの下と左右の移動。上に行く必要はないので、上キーを入力しても動きません。
154
258
 
259
+ ・カメラのプレイヤー追従(y軸)
260
+
155
261
  ・障害物の設置(キャラと障害物に当たり判定をつけた)
262
+
263
+ ・CPUキャラの自走(y軸下に向けて進むだけですが)
264
+
265
+ ・一応、加速アイテムを取って加速しっぱなしの映像を貼っておきます。
266
+
267
+ (とあるマンガの非営利二次創作で、拙い絵でお恥ずかしいのですがスルーしてください)
268
+
269
+ https://streamable.com/p6esx