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

回答編集履歴

1

弾の挙動について追記

2020/05/13 00:55

投稿

YASU_jrt
YASU_jrt

スコア33

answer CHANGED
@@ -36,4 +36,72 @@
36
36
  これに関しては実際に作成したレイヤーを各GameObjectに対して設定してあげる必要があります。
37
37
  PlayerのameObjectにはPlayerを、弾のGameObjectにはBulletのレイヤーを指定すれば、
38
38
  現在のProjectSettingsの設定を見る限り、コリジョンの衝突が行われなくなるはずです。
39
- ![イメージ説明](966ff76e812dae8ab39275907db9ece7.png)
39
+ ![イメージ説明](966ff76e812dae8ab39275907db9ece7.png)
40
+
41
+ **追記:弾について**
42
+ 弾そのものも右方向に進むのか、左方向に進むのかを設定してあげる必要があると思います。
43
+ いろいろやり方がありますが、以下の処理ではシンプルに進行方向を設定する関数を用意してそれを生成時に指定するようにしています。
44
+ ご参考ください。
45
+
46
+ ```cs
47
+ public class Bullet : MonoBehaviour
48
+ {
49
+ // 弾オブジェクトのRigidbody2Dの入れ物
50
+ private Rigidbody2D rb2d;
51
+ // 弾オブジェクトの移動係数(速度調整用)
52
+ float bulletSpeed;
53
+
54
+ private Vector2 direction = Vector2.right;
55
+
56
+ public void SetDirection(bool isLeft)
57
+ {
58
+ // 左方向なら(-1.0, 0.0)方向に、右方向なら(1.0, 0.0)方向に進む
59
+ direction = isLeft ? Vector2.left : Vector2.right;
60
+
61
+ // スプライト画像の反転処理(画像のデフォルトが右方向の向いているもの前提)
62
+ var sprite = GetComponent<SpriteRenderer>();
63
+ if (sprite != null)
64
+ {
65
+ sprite.flipY = isLeft;
66
+ }
67
+
68
+ }
69
+
70
+ void BulletMove()
71
+ {
72
+ // Rigidbody2D に移動量を加算する
73
+ rb2d.velocity = direction * bulletSpeed;
74
+ }
75
+ }
76
+ ```
77
+
78
+ ```cs
79
+ public class PlayerBullet : MonoBehaviour
80
+ {
81
+ // InspectorでPrefab化したBulletを指定する
82
+ [SerializeField]
83
+ private GameObject bullet;
84
+
85
+ // ユーザーがどちらを向いているか
86
+ private bool isLeft = true;
87
+
88
+ void ShotAction()
89
+ {
90
+ Vector3 offset = new Vector3(1.0f, 0.0f, 0.0f);
91
+
92
+ // isLeft は仮の変数です。現在向いている方向を判定するフラグなどを用意してみてください。
93
+ // 向いている方向が反対ならx座標を反転する
94
+ if (isLeft)
95
+ {
96
+ offset.x = -offset.x;
97
+ }
98
+
99
+ if (Input.GetButtonDown("Fire1"))
100
+ {
101
+ // Bulletコンポーネントがアタッチしている前提
102
+ var bulletObj = Instantiate(bullet, transform.position + offset, transform.rotation);
103
+ bulletObj.GetComponent<Bullet>().SetDirection(isLeft);
104
+ }
105
+ }
106
+ }
107
+ ```