teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

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

2021/09/05 03:57

投稿

Sukai
Sukai

スコア7

title CHANGED
File without changes
body CHANGED
@@ -12,6 +12,89 @@
12
12
  ### 該当のソースコード
13
13
 
14
14
  ```C#
15
+ using System.Collections;
16
+ using System.Collections.Generic;
17
+ using UnityEngine;
18
+
19
+ // 宝石を制御するコンポーネント
20
+ public class Gem : MonoBehaviour
21
+ {
22
+ public int m_exp; // 取得できる経験値
23
+ public float m_brake = 0.9f; // 散らばる時の減速量、数値が小さいほどすぐ減速する
24
+
25
+ private Vector3 m_direction; // 散らばる時の進行方向
26
+ private float m_speed; // 散らばる時の速さ
27
+
28
+ // プレイヤーを追尾する時の加速度、数値が大きいほどすぐ加速する
29
+ public float m_followAccel = 0.01f;
30
+
31
+ private bool m_isFollow; // プレイヤーを追尾するモードに入った場合 true
32
+ private float m_followSpeed; // プレイヤーを追尾する速さ
33
+
34
+ // 毎フレーム呼び出される関数
35
+ private void Update()
36
+ {
37
+ // プレイヤーの現在地を取得する
38
+ var playerPos = Player.m_instance.transform.localPosition;
39
+
40
+ // プレイヤーと宝石の距離を計算する
41
+ var distance = Vector3.Distance(playerPos, transform.localPosition);
42
+
43
+ // プレイヤーと宝石の距離が近づいた場合
44
+ if (distance < Player.m_instance.m_magnetDistance)
45
+ {
46
+ // プレイヤーを追尾するモードに入る
47
+ m_isFollow = true;
48
+ }
49
+
50
+ // プレイヤーを追尾するモードに入っている場合かつ
51
+ // プレイヤーがまだ死亡していない場合
52
+ if (m_isFollow && Player.m_instance.gameObject.activeSelf)
53
+ {
54
+ // プレイヤーの現在位置へ向かうベクトルを作成する
55
+ var direction = playerPos - transform.localPosition;
56
+ direction.Normalize();
57
+
58
+ // 宝石をプレイヤーが存在する方向に移動する
59
+ transform.localPosition += direction * m_followSpeed;
60
+
61
+ // 加速しながら近づく
62
+ m_followSpeed += m_followAccel;
63
+ return;
64
+ }
65
+
66
+ // 散らばる速度を計算する
67
+ var velocity = m_direction * m_speed;
68
+
69
+ // 散らばる
70
+ transform.localPosition += velocity;
71
+
72
+ // だんだん減速する
73
+ m_speed *= m_brake;
74
+
75
+ // 宝石が画面外に出ないように位置を制限する
76
+ transform.localPosition =
77
+ Utils.ClampPosition(transform.localPosition);
78
+ }
79
+
80
+ // 宝石が出現する時に初期化する関数
81
+ public void Init(int score, float speedMin, float speedMax)
82
+ {
83
+ // 宝石がどの方向に散らばるかランダムに決定する
84
+ var angle = Random.Range(0, 360);
85
+
86
+ // 進行方向をラジアン値に変換する
87
+ var f = angle * Mathf.Deg2Rad;
88
+
89
+ // 進行方向のベクトルを作成する
90
+ m_direction = new Vector3(Mathf.Cos(f), Mathf.Sin(f), 0);
91
+
92
+ // 宝石の散らばる速さをランダムに決定する
93
+ m_speed = Mathf.Lerp(speedMin, speedMax, Random.value);
94
+
95
+ // 8 秒後に宝石を削除する
96
+ Destroy(gameObject, 8);
97
+
15
98
  // 他のオブジェクトと衝突した時に呼び出される関数
16
99
  private void OnTriggerEnter2D(Collider2D collision)
17
100
  {
@@ -21,6 +104,8 @@
21
104
  // 宝石を削除する
22
105
  Destroy(gameObject);
23
106
  }
107
+ }
108
+ }
24
109
  ```
25
110
 
26
111
  ### 試したこと