回答編集履歴

5

文章の修正

2020/01/16 00:39

投稿

simapiko
simapiko

スコア332

test CHANGED
@@ -140,6 +140,14 @@
140
140
 
141
141
  }
142
142
 
143
+ else //どちらも押されていなければ
144
+
145
+ {
146
+
147
+ xSpeed = 0; //左右に動かない
148
+
149
+ }
150
+
143
151
 
144
152
 
145
153
  if (isKasoku == true) //★加速フラグがtrueの場合の挙動

4

文章の修正

2020/01/16 00:39

投稿

simapiko
simapiko

スコア332

test CHANGED
@@ -23,3 +23,183 @@
23
23
  }
24
24
 
25
25
  ```
26
+
27
+ ---
28
+
29
+
30
+
31
+ いつの間にか質問が変わっていたので追記編集。
32
+
33
+ コルーチンでの回答がすでにあるので`Time.deltaTime`でのやり方です。
34
+
35
+ 加えて宣言部の調整と、加速の値を変数で管理するよう変更しました。
36
+
37
+
38
+
39
+ ```C#
40
+
41
+ public class player : MonoBehaviour
42
+
43
+ {
44
+
45
+ public float speed; //インスペクタで速度をいじくる宣言
46
+
47
+
48
+
49
+ private Animator anim = null;
50
+
51
+ private Rigidbody2D rb = null; //アニメとRBの変数宣言
52
+
53
+
54
+
55
+ private string ochaTag = "Ocha"; //★お茶タグを宣言
56
+
57
+
58
+
59
+ private bool isKasoku = false; //★加速boolを宣言、通常は加速してないよ(お茶を取ってないよ)
60
+
61
+
62
+
63
+ float ySpeed = 0.0f; //y軸移動速度の初期値
64
+
65
+ float xSpeed = 0.0f; //x軸移動速度の初期値
66
+
67
+
68
+
69
+ float verticalKey; //上下キー宣言
70
+
71
+ float horizontalKey; //左右キー宣言
72
+
73
+
74
+
75
+ int DashSpeed; //加速時倍率
76
+
77
+
78
+
79
+ float DashtTime; //加速経過時間
80
+
81
+
82
+
83
+ void Start ()
84
+
85
+ {
86
+
87
+ anim = GetComponent<Animator> ();
88
+
89
+ rb = GetComponent<Rigidbody2D> (); //インスタンスを取得命令
90
+
91
+ }
92
+
93
+
94
+
95
+ void FixedUpdate ()
96
+
97
+ {
98
+
99
+ verticalKey = Input.GetAxis ("Vertical");
100
+
101
+ horizontalKey = Input.GetAxis ("Horizontal");
102
+
103
+
104
+
105
+ if (verticalKey < 0) //下キーが押されたら(上に行く必要がないゲームなので下キーのみ指定しています)
106
+
107
+ {
108
+
109
+ anim.SetBool ("run", true); //アニメon
110
+
111
+ ySpeed = -speed; //走る
112
+
113
+ }
114
+
115
+ else
116
+
117
+ {
118
+
119
+ anim.SetBool ("run", false); //アニメoff
120
+
121
+ ySpeed = 0.0f; //走らない
122
+
123
+ }
124
+
125
+
126
+
127
+ if (horizontalKey > 0) //右キーが押されたら
128
+
129
+ {
130
+
131
+ xSpeed = speed; //右に行く
132
+
133
+ }
134
+
135
+ else if (horizontalKey < 0) //左キーが押されたら
136
+
137
+ {
138
+
139
+ xSpeed = -speed; //左に行く
140
+
141
+ }
142
+
143
+
144
+
145
+ if (isKasoku == true) //★加速フラグがtrueの場合の挙動
146
+
147
+ {
148
+
149
+ DashSpeed = 4; //4倍
150
+
151
+ DashtTime += Time.deltaTime; //フレーム事の経過時間を加算
152
+
153
+
154
+
155
+ //5秒間経過したら
156
+
157
+ if (DashtTime > 5.0f)
158
+
159
+ {
160
+
161
+ isKasoku = false;
162
+
163
+ }
164
+
165
+ }
166
+
167
+ else if (isKasoku == false) //★加速フラグがfalse、つまり通常時
168
+
169
+ {
170
+
171
+ DashSpeed = 1; //等倍
172
+
173
+ }
174
+
175
+
176
+
177
+ rb.velocity = new Vector2 (xSpeed, ySpeed * DashSpeed); //上記の記述をこの式に代入して動いているそうですがよくわかってません。
178
+
179
+
180
+
181
+ }
182
+
183
+ private void OnCollisionEnter2D (Collision2D collision) //★(お茶との)衝突判定
184
+
185
+ {
186
+
187
+ if (collision.collider.tag == ochaTag) //★お茶タグとぶつかったら
188
+
189
+ {
190
+
191
+ isKasoku = true; //★加速フラグがtrueになるよ
192
+
193
+ DashtTime = 0; //加速経過時間リセット
194
+
195
+ Destroy (collision.gameObject); //お茶が消えるよ
196
+
197
+ }
198
+
199
+ }
200
+
201
+ }
202
+
203
+ //アイテムによる加速までできた。
204
+
205
+ ```

3

文章の修正

2020/01/15 09:45

投稿

simapiko
simapiko

スコア332

test CHANGED
@@ -8,12 +8,18 @@
8
8
 
9
9
 
10
10
 
11
-
12
-
13
11
  ```c#
14
12
 
15
13
 
16
14
 
15
+ void OnTriggerEnter2D (Collider2D other)
16
+
17
+ {
18
+
17
- other.gameObject.GetComponent<Rigidbody2D>().AddForce(new Vector2(0, -30),ForceMode2D.Impulse);
19
+ other.gameObject.GetComponent<Rigidbody2D> ().AddForce (new Vector2 (0, -30), ForceMode2D.Impulse);
20
+
21
+ Debug.Log ("当たったオブジェクト: " + other.gameObject.name);
22
+
23
+ }
18
24
 
19
25
  ```

2

文章の修正

2020/01/10 09:50

投稿

simapiko
simapiko

スコア332

test CHANGED
@@ -1,10 +1,10 @@
1
- [Rigidbody2D .AddForce](https://docs.unity3d.com/ja/2017.4/ScriptReference/Rigidbody2D.AddForce.html)で使われている[ForceMode2D](https://docs.unity3d.com/ja/2017.4/ScriptReference/ForceMode2D.html)では、理由は分かりませんが`ForceMode.VelocityChange`が実装されていません。上記のエラーはおそらくそこが原因かと思います。
1
+ [Rigidbody2D .AddForce](https://docs.unity3d.com/ja/2017.4/ScriptReference/Rigidbody2D.AddForce.html)で使われている[ForceMode2D](https://docs.unity3d.com/ja/2017.4/ScriptReference/ForceMode2D.html)では、理由は分かりませんが`ForceMode2D.VelocityChange`が実装されていません。上記のエラーはおそらくそこが原因かと思います。
2
2
 
3
3
  加えて`Rigidbody2D`に対して3Dベクトルを扱っている`Vecter3`になっているので`Vecter2D`に書き換えます。多分これで動作するのではないかと思います。
4
4
 
5
5
 
6
6
 
7
- (一応仮としてForceMode.Impulseにしていますが、質量無視で力を加えたい場合は[ここ](https://teratail.com/questions/100181)とかが参考になるかと。)
7
+ (一応仮としてForceMode2D.Impulseにしていますが、質量無視で力を加えたい場合は[ここ](https://teratail.com/questions/100181)とかが参考になるかと。)
8
8
 
9
9
 
10
10
 

1

文章の修正

2020/01/10 01:32

投稿

simapiko
simapiko

スコア332

test CHANGED
@@ -14,6 +14,6 @@
14
14
 
15
15
 
16
16
 
17
- other.gameObject.GetComponent<Rigidbody2D>().AddForce(new Vector2(0, -30),ForceMode.Impulse);
17
+ other.gameObject.GetComponent<Rigidbody2D>().AddForce(new Vector2(0, -30),ForceMode2D.Impulse);
18
18
 
19
19
  ```