回答編集履歴
5
文章の修正
answer
CHANGED
@@ -69,6 +69,10 @@
|
|
69
69
|
{
|
70
70
|
xSpeed = -speed; //左に行く
|
71
71
|
}
|
72
|
+
else //どちらも押されていなければ
|
73
|
+
{
|
74
|
+
xSpeed = 0; //左右に動かない
|
75
|
+
}
|
72
76
|
|
73
77
|
if (isKasoku == true) //★加速フラグがtrueの場合の挙動
|
74
78
|
{
|
4
文章の修正
answer
CHANGED
@@ -10,4 +10,94 @@
|
|
10
10
|
other.gameObject.GetComponent<Rigidbody2D> ().AddForce (new Vector2 (0, -30), ForceMode2D.Impulse);
|
11
11
|
Debug.Log ("当たったオブジェクト: " + other.gameObject.name);
|
12
12
|
}
|
13
|
+
```
|
14
|
+
---
|
15
|
+
|
16
|
+
いつの間にか質問が変わっていたので追記編集。
|
17
|
+
コルーチンでの回答がすでにあるので`Time.deltaTime`でのやり方です。
|
18
|
+
加えて宣言部の調整と、加速の値を変数で管理するよう変更しました。
|
19
|
+
|
20
|
+
```C#
|
21
|
+
public class player : MonoBehaviour
|
22
|
+
{
|
23
|
+
public float speed; //インスペクタで速度をいじくる宣言
|
24
|
+
|
25
|
+
private Animator anim = null;
|
26
|
+
private Rigidbody2D rb = null; //アニメとRBの変数宣言
|
27
|
+
|
28
|
+
private string ochaTag = "Ocha"; //★お茶タグを宣言
|
29
|
+
|
30
|
+
private bool isKasoku = false; //★加速boolを宣言、通常は加速してないよ(お茶を取ってないよ)
|
31
|
+
|
32
|
+
float ySpeed = 0.0f; //y軸移動速度の初期値
|
33
|
+
float xSpeed = 0.0f; //x軸移動速度の初期値
|
34
|
+
|
35
|
+
float verticalKey; //上下キー宣言
|
36
|
+
float horizontalKey; //左右キー宣言
|
37
|
+
|
38
|
+
int DashSpeed; //加速時倍率
|
39
|
+
|
40
|
+
float DashtTime; //加速経過時間
|
41
|
+
|
42
|
+
void Start ()
|
43
|
+
{
|
44
|
+
anim = GetComponent<Animator> ();
|
45
|
+
rb = GetComponent<Rigidbody2D> (); //インスタンスを取得命令
|
46
|
+
}
|
47
|
+
|
48
|
+
void FixedUpdate ()
|
49
|
+
{
|
50
|
+
verticalKey = Input.GetAxis ("Vertical");
|
51
|
+
horizontalKey = Input.GetAxis ("Horizontal");
|
52
|
+
|
53
|
+
if (verticalKey < 0) //下キーが押されたら(上に行く必要がないゲームなので下キーのみ指定しています)
|
54
|
+
{
|
55
|
+
anim.SetBool ("run", true); //アニメon
|
56
|
+
ySpeed = -speed; //走る
|
57
|
+
}
|
58
|
+
else
|
59
|
+
{
|
60
|
+
anim.SetBool ("run", false); //アニメoff
|
61
|
+
ySpeed = 0.0f; //走らない
|
62
|
+
}
|
63
|
+
|
64
|
+
if (horizontalKey > 0) //右キーが押されたら
|
65
|
+
{
|
66
|
+
xSpeed = speed; //右に行く
|
67
|
+
}
|
68
|
+
else if (horizontalKey < 0) //左キーが押されたら
|
69
|
+
{
|
70
|
+
xSpeed = -speed; //左に行く
|
71
|
+
}
|
72
|
+
|
73
|
+
if (isKasoku == true) //★加速フラグがtrueの場合の挙動
|
74
|
+
{
|
75
|
+
DashSpeed = 4; //4倍
|
76
|
+
DashtTime += Time.deltaTime; //フレーム事の経過時間を加算
|
77
|
+
|
78
|
+
//5秒間経過したら
|
79
|
+
if (DashtTime > 5.0f)
|
80
|
+
{
|
81
|
+
isKasoku = false;
|
82
|
+
}
|
83
|
+
}
|
84
|
+
else if (isKasoku == false) //★加速フラグがfalse、つまり通常時
|
85
|
+
{
|
86
|
+
DashSpeed = 1; //等倍
|
87
|
+
}
|
88
|
+
|
89
|
+
rb.velocity = new Vector2 (xSpeed, ySpeed * DashSpeed); //上記の記述をこの式に代入して動いているそうですがよくわかってません。
|
90
|
+
|
91
|
+
}
|
92
|
+
private void OnCollisionEnter2D (Collision2D collision) //★(お茶との)衝突判定
|
93
|
+
{
|
94
|
+
if (collision.collider.tag == ochaTag) //★お茶タグとぶつかったら
|
95
|
+
{
|
96
|
+
isKasoku = true; //★加速フラグがtrueになるよ
|
97
|
+
DashtTime = 0; //加速経過時間リセット
|
98
|
+
Destroy (collision.gameObject); //お茶が消えるよ
|
99
|
+
}
|
100
|
+
}
|
101
|
+
}
|
102
|
+
//アイテムによる加速までできた。
|
13
103
|
```
|
3
文章の修正
answer
CHANGED
@@ -3,8 +3,11 @@
|
|
3
3
|
|
4
4
|
(一応仮としてForceMode2D.Impulseにしていますが、質量無視で力を加えたい場合は[ここ](https://teratail.com/questions/100181)とかが参考になるかと。)
|
5
5
|
|
6
|
-
|
7
6
|
```c#
|
8
7
|
|
8
|
+
void OnTriggerEnter2D (Collider2D other)
|
9
|
+
{
|
9
|
-
other.gameObject.GetComponent<Rigidbody2D>().AddForce(new Vector2(0, -30),ForceMode2D.Impulse);
|
10
|
+
other.gameObject.GetComponent<Rigidbody2D> ().AddForce (new Vector2 (0, -30), ForceMode2D.Impulse);
|
11
|
+
Debug.Log ("当たったオブジェクト: " + other.gameObject.name);
|
12
|
+
}
|
10
13
|
```
|
2
文章の修正
answer
CHANGED
@@ -1,7 +1,7 @@
|
|
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)では、理由は分かりませんが`
|
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
|
加えて`Rigidbody2D`に対して3Dベクトルを扱っている`Vecter3`になっているので`Vecter2D`に書き換えます。多分これで動作するのではないかと思います。
|
3
3
|
|
4
|
-
(一応仮として
|
4
|
+
(一応仮としてForceMode2D.Impulseにしていますが、質量無視で力を加えたい場合は[ここ](https://teratail.com/questions/100181)とかが参考になるかと。)
|
5
5
|
|
6
6
|
|
7
7
|
```c#
|
1
文章の修正
answer
CHANGED
@@ -6,5 +6,5 @@
|
|
6
6
|
|
7
7
|
```c#
|
8
8
|
|
9
|
-
other.gameObject.GetComponent<Rigidbody2D>().AddForce(new Vector2(0, -30),
|
9
|
+
other.gameObject.GetComponent<Rigidbody2D>().AddForce(new Vector2(0, -30),ForceMode2D.Impulse);
|
10
10
|
```
|