質問編集履歴

1

すいません。コードをすべて貼りました。

2021/09/05 03:57

投稿

Sukai
Sukai

スコア7

test CHANGED
File without changes
test CHANGED
@@ -26,6 +26,172 @@
26
26
 
27
27
  ```C#
28
28
 
29
+ using System.Collections;
30
+
31
+ using System.Collections.Generic;
32
+
33
+ using UnityEngine;
34
+
35
+
36
+
37
+ // 宝石を制御するコンポーネント
38
+
39
+ public class Gem : MonoBehaviour
40
+
41
+ {
42
+
43
+ public int m_exp; // 取得できる経験値
44
+
45
+ public float m_brake = 0.9f; // 散らばる時の減速量、数値が小さいほどすぐ減速する
46
+
47
+
48
+
49
+ private Vector3 m_direction; // 散らばる時の進行方向
50
+
51
+ private float m_speed; // 散らばる時の速さ
52
+
53
+
54
+
55
+ // プレイヤーを追尾する時の加速度、数値が大きいほどすぐ加速する
56
+
57
+ public float m_followAccel = 0.01f;
58
+
59
+
60
+
61
+ private bool m_isFollow; // プレイヤーを追尾するモードに入った場合 true
62
+
63
+ private float m_followSpeed; // プレイヤーを追尾する速さ
64
+
65
+
66
+
67
+ // 毎フレーム呼び出される関数
68
+
69
+ private void Update()
70
+
71
+ {
72
+
73
+ // プレイヤーの現在地を取得する
74
+
75
+ var playerPos = Player.m_instance.transform.localPosition;
76
+
77
+
78
+
79
+ // プレイヤーと宝石の距離を計算する
80
+
81
+ var distance = Vector3.Distance(playerPos, transform.localPosition);
82
+
83
+
84
+
85
+ // プレイヤーと宝石の距離が近づいた場合
86
+
87
+ if (distance < Player.m_instance.m_magnetDistance)
88
+
89
+ {
90
+
91
+ // プレイヤーを追尾するモードに入る
92
+
93
+ m_isFollow = true;
94
+
95
+ }
96
+
97
+
98
+
99
+ // プレイヤーを追尾するモードに入っている場合かつ
100
+
101
+ // プレイヤーがまだ死亡していない場合
102
+
103
+ if (m_isFollow && Player.m_instance.gameObject.activeSelf)
104
+
105
+ {
106
+
107
+ // プレイヤーの現在位置へ向かうベクトルを作成する
108
+
109
+ var direction = playerPos - transform.localPosition;
110
+
111
+ direction.Normalize();
112
+
113
+
114
+
115
+ // 宝石をプレイヤーが存在する方向に移動する
116
+
117
+ transform.localPosition += direction * m_followSpeed;
118
+
119
+
120
+
121
+ // 加速しながら近づく
122
+
123
+ m_followSpeed += m_followAccel;
124
+
125
+ return;
126
+
127
+ }
128
+
129
+
130
+
131
+ // 散らばる速度を計算する
132
+
133
+ var velocity = m_direction * m_speed;
134
+
135
+
136
+
137
+ // 散らばる
138
+
139
+ transform.localPosition += velocity;
140
+
141
+
142
+
143
+ // だんだん減速する
144
+
145
+ m_speed *= m_brake;
146
+
147
+
148
+
149
+ // 宝石が画面外に出ないように位置を制限する
150
+
151
+ transform.localPosition =
152
+
153
+ Utils.ClampPosition(transform.localPosition);
154
+
155
+ }
156
+
157
+
158
+
159
+ // 宝石が出現する時に初期化する関数
160
+
161
+ public void Init(int score, float speedMin, float speedMax)
162
+
163
+ {
164
+
165
+ // 宝石がどの方向に散らばるかランダムに決定する
166
+
167
+ var angle = Random.Range(0, 360);
168
+
169
+
170
+
171
+ // 進行方向をラジアン値に変換する
172
+
173
+ var f = angle * Mathf.Deg2Rad;
174
+
175
+
176
+
177
+ // 進行方向のベクトルを作成する
178
+
179
+ m_direction = new Vector3(Mathf.Cos(f), Mathf.Sin(f), 0);
180
+
181
+
182
+
183
+ // 宝石の散らばる速さをランダムに決定する
184
+
185
+ m_speed = Mathf.Lerp(speedMin, speedMax, Random.value);
186
+
187
+
188
+
189
+ // 8 秒後に宝石を削除する
190
+
191
+ Destroy(gameObject, 8);
192
+
193
+
194
+
29
195
  // 他のオブジェクトと衝突した時に呼び出される関数
30
196
 
31
197
  private void OnTriggerEnter2D(Collider2D collision)
@@ -44,6 +210,10 @@
44
210
 
45
211
  }
46
212
 
213
+ }
214
+
215
+ }
216
+
47
217
  ```
48
218
 
49
219