忍者ブログ
まったくのプログラミング素人の筆者がC++/HSPを使用してSTG(シューティングゲーム)を作っていく過程を書くブログでしたが最近は脱線気味。プログラミング以外にも、ゲーム関連の記事、日々の戯言など。
【Unity】自機を表示して移動させる【簡単な2DSTGを作ってみるNo.1】

【Unity】自機弾を発射する(プレハブ化する)【簡単な2DSTGを作ってみるNo.2】

【Unity】敵のアニメーション表示と移動(プレハブ化する)【簡単な2DSTGを作ってみるNo.3】

【Unity】自機狙い弾を発射させる【簡単な2DSTGを作ってみるNo.4】

【Unity】背景の表示とオブジェクトの表示順位【簡単な2DSTGを作ってみるNo.5】

【Unity】当たり判定の追加【簡単な2DSTGを作ってみるNo.6】

【Unity】爆破アニメーションの追加【簡単な2DSTGを作ってみるNo.7】

【Unity】タイトル画面の追加(シーン移行)とテキスト表示【簡単な2DSTGを作ってみるNo.8】

【Unity】ボスの追加【簡単な2DSTGを作ってみるNo.9】

最終回です。ボスを追加して弾幕を3つ作りました。


これまでのソースファイルと画像ファイル、プロジェクトセッティングなどはコチラ↓
テストシューティングダウンロード

Zipファイルになっていますので展開したらtestshooting.unitypackageとProjectSettingsフォルダが入っています。
このプロジェクトを実行させるためにはUnityでTemplateを2Dにして新規プロジェクトを作成します。


ファイルメニューのAsset→Import Package→Custom Packageを選択してtestshooting.unitypackageを読み込みます。
ProjectSettingsフォルダは作成したプロジェクトにあるProjectSettingsフォルダに上書きします。
Gameタブにあるアスペクト比を4:3にすればOK。再生ボタンを押すとゲームが開始されると思います。
動かすとこんな感じ↓


ボスに関しては本体と回転する羽に分けて表示して羽画像だけを回転させています。
羽画像を本体の小要素とするだけで移動や削除などは本体の方のスクリプトを引き継いでくれるので便利です。

上記のファイルにソースファイルもありますがボスに関しては下記の2つのファイルで制御しています。
boss0_bullet_move.cs


boss0_move.cs


ボス移動用のスクリプト(boss0_move.cs)で敵弾を発射したい時間(shot_time)の時にboss0_bullet_move.csスクリプトのCreate_rad_ds_bu_ex_ey()関数に発射角度、スピード、弾画像種類、発射位置x、発射位置yを引数として渡して敵弾を生成しています。

ここで悩んだのがInstantiateで生成したオブジェクトに引数を渡したいって事でした。
Instantiateで渡せる引数は座標と画像回転角度だけなので、弾のスピードとか発射角度は渡せないんですよね。
で、色々検索するとコチラで良い方法が掲載されていました。
【Unity】Instantiateで生成したGameObjectのScriptに引数を渡す方法
引数を渡す用の関数を作って別のスクリプトから読み込む感じかな。
boss0_bullet_move.csのpublic void Create_rad_ds_bu_ex_ey(float direction, float speed, int bullet, float ex, float ey)が引数を渡すようの関数です。
引数(発射角度、スピード、弾画像種類、発射位置x、発射位置y)

弾の移動に必要な要素は角度とスピードなのですが弾の画像や発射位置も制御したかったので5つの引数を入れました。
こうすることでスクリプトは一つですが色んな画像の色んな弾を表現出来ます。

例えばboss0_move.cs側で下記のように書けば1フレームに1回、8方向に回転しながら弾幕が発射されます。
 for (rad = 0f; rad < 6.28f; rad += 0.8f)//弾発射角度が6.28になるまで発射、6.28で一回転(3.14の2倍)青弾用
                {
                    GameObject shot = Instantiate(boss0_bullet_prefab, transform.position, transform.rotation) as GameObject;//敵弾生成
                    boss0_bullet_move s = shot.GetComponent <boss0_bullet_move >();//boss0_bullet_moveスクリプトを取得
                    s.Create_rad_ds_bu_ex_ey(rad + rad2, 0.1f, 0, 0, 0);//boss0_bullet_moveスクリプトのCreate_rad_ds_bu_ex_ey関数に弾の初期情報を渡す
                }

それと、ややこしくなるので自機とボスの当たり判定は行っていません。
自機弾とボスのみ当たり判定を行って、倒したら最初に戻るようにしました。

以上、稚拙な内容ですがどなたかの役に立てば幸いです。
このプログラム、画像は自由に使って頂いて構いませんが著作権は放棄していません。
本プログラムを使用したことで発生した如何なる不都合に対して、作者は責任を追いかねますのであらかじめご了承ください。ソースファイルの改変などはご自由に行って頂いて結構です。
PR
この記事にコメントする
お名前
タイトル
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
カウンター
Twitter
カレンダー
11 2018/12 01
S M T W T F S
1
2 3 4 5 7 8
9 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
最新コメント
[11/24 kt.]
[11/24 kt.]
[11/24 NONAME]
[11/23 NONAME]
[10/05 tejas]
プロフィール
HN:
kt.
HP:
性別:
男性
自己紹介:
STG大好きな45歳。
プログラミング経験は昔ファミリーベーシックでちょっとさわったくらい。
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
ブログ内検索
忍者ブログ [PR]