忍者ブログ
まったくのプログラミング素人の筆者がC++/HSPを使用してSTG(シューティングゲーム)を作っていく過程を書くブログでしたが最近は脱線気味。プログラミング以外にも、ゲーム関連の記事、日々の戯言など。
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

【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】

自機が移動出来るようになったので今回は自機弾を発射させてみます。
前回書き忘れていたのですが、Gameタブにあるアスペクト比で4:3を選択しておきます。(作成したいゲームによって変更するのが良いです)

まず下記の弾画像をAssetフォルダ内の画像フォルダに保存します。

こんな感じで保存します。


保存したらUnity側にも反映されるのでProjectタブにあるship_bullet.pngをSceneタブにドラッグ・アンド・ドロップするとHierarchyタブにship_bulletが生成されます。


Projectタブにマウスを持っていって右クリック→Create→C# Scriptでスクリプトを作成。名前はship_bullet_moveとしておきました。


ship_bullet_moveをタブルクリックしてVisualStudioを立ち上げて下記のコードを入力します。

今回は transform.Translate(0, 0.3f, 0);で自機弾の移動を行っています。真っ直ぐ進むだけなら数値を指定するだけで良いので便利ですね。
ただ、そのままだと画面外に消えてもオブジェクト自体は残り続けるのでif (transform.position.y > 5)でオブジェクトの位置が5以上になったらDestroy(gameObject);で削除しています。

スクリプトを保存したらProjectタブにあるship_bullet_moveスクリプトをHierarchyタブにあるship_bulletにアタッチします。

この時点で一度再生ボタンを押してみてください。自機弾が上に飛んで行けば成功です。

しかし、この状態では一発づつしか発射出来ないので不便です。沢山の弾を発射出来るように簡単にコピー(クローンを作って)して使えるようにします(プレハブ化すると言うようです)

まずはHierarchyタブにあるship_bulletの名称をship_bullet_prefabに名称変更します。
マウスをProjectタブに持っていて右クリック→Create→Folderで新規フォルダを作成。名前はPrefabにしておきます。


Hierarchyタブにあるship_bullet_prefabをProjectタブに作成したPrefabフォルダにドラッグ・アンド・ドロップするとコピーが生成されます。
コピーが生成されたらHierarchyタブにあるship_bullet_prefabは削除します。


次に自機移動スクリプトからship_bullet_prefabを呼び出せるようにship_moveの方のスクリプトを変更します。

まず最初のpublic GameObject ship_bullet_prefab;でオブジェクトとしてship_bullet_prefabを呼び出せるように宣言します。
(このようにpublic GameObject~と書くことでInspectorタブのスクリプト内に枠が出来ます。)
あとショットの発射間隔制御用にshot_time変数を用意しました。
ちなみにprivateで宣言すると、そのスクリプト内のみ有効な変数となり、publicで宣言すると他のスクリプトからも参照出来る変数となりますので、変数名の付け方に気を付けたほうが良くなります。
ついでに画面からはみ出さない処理も追加しておきました。
自機ショットの発射は下記のコードでZキーが押された時でshot_timeを4で割った時の余りが0の時に発射されます。
if (Input.GetKey(KeyCode.Z) && (shot_time % 4 == 0))
        {
            Instantiate(ship_bullet_prefab, transform.position, Quaternion.identity);
        }
Instantiate(オブジェクト,位置,回転)はオブジェクトを生成する命令。
ship_bullet_prefabを自機の位置に回転させずに生成しろって意味となります。

上記のスクリプトを保存してHierarchyタブのshipをクリックするとInspectorタブのship_moveスクリプト内にShip_bullet_prefabタブが出来ているので、そこにProjectタブにあるship_bullet_prefabをドラッグ・アンド・ドロップします。


この状態で再生ボタンを押せばZキーを押すと自機弾が発射されるようになるはずです。

これ、何が凄いって配列変数とか考えなくても勝手に沢山のオブジェクトを動かしてくれてる点。余計なこと考えなくても何か良い感じにしてくれてる感があって凄いなぁと思いました。
PR
この記事にコメントする
お名前
タイトル
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
Twitter
カレンダー
03 2024/04 05
S M T W T F S
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
最新コメント
[04/20 kt.]
[04/19 うぇむ]
[11/24 kt.]
[11/21 NONAME]
[11/24 kt.]
プロフィール
HN:
kt.
性別:
男性
自己紹介:
プログラミング経験は昔ファミリーベーシックでちょっとさわったくらい。
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
ブログ内検索
忍者ブログ [PR]