敵弾を制御したい。
でも、「どうやって実装すればいいのか分からない」そんな風に感じていませんか。
実は、敵弾の制御には、自機狙い攻撃ロジックの実装考察があります。
適切なロジックを理解すれば、初心者でも敵弾システムを実装できるでしょう。
この記事では、敵弾はどう制御するかを、自機狙い攻撃ロジックの実装考察とともに詳しく解説します。
✨ この記事でわかること
- 敵弾制御の基本ロジックと実装方法(所要30分)
- 自機狙い攻撃の実装方法と角度計算の詳細(所要1時間)
- 角度計算と弾の軌道の制御(所要1時間)
- 敵弾制御でよくある失敗5選と解決方法
- 実用的な敵弾システム完成までの4ステップ(合計4時間)

自機狙い攻撃は、角度計算が重要です。敵と自機の位置から角度を計算し、その方向に弾を発射するのがコツです。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。
敵弾制御とは?基礎知識から理解する

敵弾制御とは、敵が発射する弾を制御する処理のことです。
適切な制御により、面白い敵の攻撃を実現できます。
敵弾制御には、発射タイミング、弾の方向、弾の速度が重要になります。
発射タイミングを制御することで、適切なタイミングで敵弾を発射できます。
弾の方向と速度を制御することで、様々な攻撃パターンを作れます。
敵弾は、シューティングゲームの難易度を調整する重要な要素です。
自機狙い弾を使うことで、プレイヤーに緊張感を与えられます。
一方で、自機狙い弾ばかりだと、難易度が高くなりすぎる可能性があります。
適切なバランスを保つことが重要です。
敵弾制御の種類
敵弾制御には、いくつかの種類があります。
自機狙い弾は、発射時に自機の位置を狙う弾です。
固定方向弾は、常に同じ方向に発射される弾です。
拡散弾は、複数の方向に同時に発射される弾です。
それぞれの弾には、特徴があります。
自機狙い弾は難易度が高いですが、避けることができます。
固定方向弾は予測しやすいですが、配置次第で避けにくくなります。
拡散弾は避けるのが難しくなりますが、配置によっては避けやすくなります。
敵弾制御に必要な要素
✅ 敵弾制御に必要な要素
- 発射タイミング:いつ弾を発射するか(タイマーや条件で制御、所要時間:実装30分)
- 角度計算:自機に向かう角度を計算(atan2関数を使用、所要時間:実装1時間)
- 弾の速度:弾の移動速度を設定(バランス調整が重要、所要時間:実装30分)
- 弾の管理:複数の敵弾を管理(配列やリストで管理、所要時間:実装2時間)
発射タイミングは、ゲームのバランスに大きく影響します。
発射頻度が高すぎると、難易度が高くなりすぎます。
発射頻度が低すぎると、難易度が低くなりすぎます。
一般的には、1秒〜3秒に1発程度が適切です。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
自機狙い攻撃の実装方法

自機狙い攻撃の実装方法を解説します。
適切な実装により、面白い敵の攻撃を実現できます。
角度計算の実装
自機狙い攻撃では、敵と自機の位置から角度を計算します。
atan2関数を使って、角度を計算できます。
atan2関数は、math.hをインクルードすることで使用できます。
第1引数はY座標の差、第2引数はX座標の差です。
計算した角度の方向に弾を発射することで、自機狙い攻撃を実現できます。
角度計算は、発射時に一度だけ実行します。
発射後は、計算した速度ベクトルで弾を移動させます。
角度を計算する際は、敵の位置を基準に自機の位置への方向を計算します。
dx = playerX – enemyX、dy = playerY – enemyYとして、atan2(dy, dx)を計算します。
この角度は、敵から自機への方向を示します。
計算した角度は、ラジアン単位で返されます。
発射処理の実装
発射処理では、計算した角度と速度を使って弾を生成します。
弾の速度ベクトルは、角度から計算できます。
cos関数とsin関数を使って、速度ベクトルを計算します。
速度ベクトルのX成分は、速度×cos(角度)で計算します。
速度ベクトルのY成分は、速度×sin(角度)で計算します。
速度の値は、ゲームのバランスに応じて調整します。一般的には、3.0〜8.0の範囲が適切です。
発射処理は、タイマーや条件によって制御します。
タイマーを使う場合は、一定時間ごとに弾を発射します。
条件を使う場合は、特定の条件が満たされたときに弾を発射します。
例えば、プレイヤーが一定範囲内に入ったときに弾を発射する、などの条件を設定できます。
実装例:基本的な自機狙い弾
以下は、基本的な自機狙い弾の実装例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
#include struct EnemyBullet { float x, y; // 弾の座標 float vx, vy; // 弾の速度ベクトル bool active; // 弾が有効かどうか }; const int MAX_BULLETS = 100; EnemyBullet bullets[MAX_BULLETS]; void FireEnemyBullet(float enemyX, float enemyY, float playerX, float playerY) { // 空いている弾を探す for (int i = 0; i < MAX_BULLETS; i++) { if (!bullets[i].active) { // 角度を計算 float dx = playerX - enemyX; float dy = playerY - enemyY; float angle = atan2f(dy, dx); // 速度ベクトルを計算 float speed = 5.0f; bullets[i].vx = speed * cosf(angle); bullets[i].vy = speed * sinf(angle); // 弾の初期位置を設定 bullets[i].x = enemyX; bullets[i].y = enemyY; bullets[i].active = true; break; // 1発だけ発射 } } } |
|
1 |
このコードにより、敵から自機に向かって弾を発射できます。
発射する際は、空いている弾のスロットを探して使用します。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
角度計算と弾の軌道

角度計算と弾の軌道を解説します。
適切な計算により、正確な自機狙い攻撃を実現できます。
角度の計算方法
角度は、atan2関数を使って計算します。
atan2関数は、2つの引数を取り、角度を返します。
第1引数はY座標の差、第2引数はX座標の差です。
返される角度は、ラジアン単位で、-πからπまでの範囲です。
敵の位置と自機の位置の差から、角度を計算します。
計算した角度は、ラジアン単位で返されます。
atan2関数は、象限を自動的に考慮するため、atan関数よりも使いやすくなっています。
角度計算の際は、引数の順序に注意が必要です。
第1引数がY座標の差、第2引数がX座標の差です。
順序を間違えると、角度が90度ずれてしまいます。
正しい順序は、atan2(dy, dx)です。
弾の軌道の制御
弾の軌道は、角度と速度から決定されます。
毎フレーム、速度ベクトルに従って弾を移動させます。
画面外に出た弾は、削除処理で無効化します。
弾の軌道は、発射時に決定されます。
発射後は、計算した速度ベクトルで弾を移動させます。
これにより、直進する弾を実現できます。
弾の速度は、ゲームのバランスに大きく影響します。
速度が速すぎると、弾が避けにくくなります。
速度が遅すぎると、弾が避けやすくなります。
一般的には、プレイヤーの移動速度の1.5〜2倍程度が適切です。
プレイヤーの移動速度が3.0の場合、弾の速度は4.5〜6.0が適切です。
曲がる弾の実装
発射後に角度を更新し続けることで、曲がる弾を実現できます。
ただし、曲がる弾は実装が複雑になります。
また、難易度が高くなりすぎる可能性があります。
一般的には、直進する弾を使う方が、実装が簡単で、バランスが取りやすくなります。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
敵弾制御でよくある失敗5選と解決方法

敵弾制御で、初心者が陥りやすい失敗があります。
ここでは、5つのよくある失敗と解決方法を紹介します。
失敗1:角度計算が間違っている
❌ よくある失敗
- atan関数を使っている
- 角度の単位が間違っている
- 座標系が間違っている
- 引数の順序が間違っている
atan関数を使うと、象限の判定が必要になります。
また、X座標の差が0の場合にエラーが発生する可能性があります。
atan2関数を使うことで、これらの問題を回避できます。
✅ 正しいアプローチ
- atan2関数を使う
- ラジアン単位で計算する
- 座標系を確認する
- 引数の順序を正しくする(atan2(dy, dx))
失敗2:弾の速度が速すぎる
弾の速度が速すぎると、プレイヤーが避けられなくなります。
また、ゲームのバランスが崩れます。
速度を適切に調整することが重要です。
解決方法:
- 弾の速度を調整する(プレイヤーの移動速度の1.5〜2倍程度)
- Time.deltaTimeを使って、フレームレートに依存しない速度にする
- バランスを調整する(難易度に応じて速度を変える)
- 速度を定数として定義し、調整しやすくする
失敗3:発射タイミングが適切でない
発射タイミングが適切でないと、ゲームのバランスが崩れます。
発射頻度が高すぎると、難易度が高くなりすぎます。
発射頻度が低すぎると、難易度が低くなりすぎます。
⚠️ 解決方法
- タイマーを使って、一定時間ごとに発射する
- 発射頻度を調整する(1秒〜3秒に1発程度)
- 条件を使って、適切なタイミングで発射する
- 難易度に応じて発射頻度を変える
失敗4:画面外の弾を削除しない
画面外に出た弾を削除しないと、メモリを無駄に消費します。
また、画面外の弾も処理し続けるため、パフォーマンスが低下します。
解決方法:
- 画面外に出た弾を無効化する
- 画面の範囲をチェックして、範囲外の弾を削除する
- 定期的に無効な弾をクリーンアップする
- 画面のサイズに応じて範囲を設定する
失敗5:ゼロ除算エラーが発生する
敵の位置と自機の位置が同じ場合、dxとdyが0になり、角度の計算で問題が発生する可能性があります。
また、距離を計算する際にゼロ除算が発生する可能性があります。
⚠️ 解決方法
- 敵と自機の距離が0でないことを確認する
- 距離が小さい場合は、デフォルトの角度を使用する
- ゼロ除算チェックを追加する
- 最小距離を設定して、完全に重ならないようにする
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
実用的な敵弾システム完成までの4ステップ

- STEP1角度計算の実装(所要1時間)
敵と自機の位置から角度を計算する処理を実装する。
atan2関数を使って、自機への角度を計算する。
学べること:atan2関数、角度計算
成果物:角度を計算できるシステム
- STEP2発射処理の実装(所要30分)
計算した角度を使って、弾を発射する処理を実装する。
速度ベクトルを計算して、弾を生成する。
学べること:ベクトル計算、弾の生成
成果物:弾を発射できるシステム
- STEP3弾の移動処理(所要30分)
発射された弾を移動させる処理を実装する。
速度ベクトルに従って、弾を移動させる。
学べること:移動処理、フレーム更新
成果物:弾が移動するシステム
- STEP4最適化と調整(所要2時間)
画面外の弾を削除し、ゲームバランスを調整する。
発射頻度や速度を調整して、適切な難易度にする。
学べること:メモリ管理、ゲームバランス調整
成果物:実用的な敵弾システム
合計4時間で、実用的な敵弾システムが完成します。
実装時のチェックリスト
✅ 実装時のチェックリスト
- atan2関数を使っているか(atan関数ではない)
- 角度の単位がラジアンであることを確認しているか
- 速度ベクトルの計算が正しいか(cos関数とsin関数の引数)
- 画面外の弾を削除しているか
- ゼロ除算エラーのチェックを追加しているか
- 発射タイミングが適切か(1秒〜3秒に1発程度)
- 弾の速度が適切か(プレイヤーの移動速度の1.5〜2倍程度)
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。
まとめ

敵弾の制御には、自機狙い攻撃ロジックの実装考察があります。
適切なロジックを理解し、段階的に実装していくことで、面白い敵弾システムを作ることができるでしょう。
✅ 記事の要点まとめ
- 敵弾制御の基本:発射タイミング、角度計算、弾の速度、弾の管理
- 自機狙い攻撃:角度計算、発射処理、速度ベクトルの計算
- 角度計算と軌道:atan2関数、角度から速度ベクトルへの変換、弾の移動
- よくある失敗5選:角度計算の間違い、速度の問題、発射タイミング、画面外削除、ゼロ除算エラー
- 実用的なシステム:4ステップで完成(合計4時間)
今日から始める3ステップ:
- STEP1:角度計算を実装する(所要1時間)
- STEP2:発射処理を実装する(所要30分)
- STEP3:弾の移動処理を実装する(所要30分)
あなたのペースで、少しずつ進めていけば大丈夫です。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる



コメント