忍者ブログ
まったくのプログラミング素人の筆者が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】

敵をアニメーション表示して移動させます。
まずは下記の画像をAsset内の画像フォルダに保存します。
(サムネイル表示になっていますのでクリックしてから保存して下さい)


こんな感じ。


追加した画像をUnityで選択してInspectorのSprite ModeをMultipleに変更してからSprite Editorをクリックします。


Sprite Editorが開いたらSliceを押してTypeをGrid By Cell Sizeに変更しX、Yをそれぞれ96に変更してSliceボタンを押すと96x96ドットで画像が分割されます。便利!


Projectタブの画像が分割されていれば成功です。


分割した画像を全て選択してSceneタブにドラッグ・アンド・ドロップするとアニメファイルを保存するタブが出てきますので任意の名前(今回はenemy0.anim)で保存します。


作成されたアニメファイルの再生ボタンみたいなアイコンの方をクリックするとアニメをループするかどうかの選択が出来ます。
Loop Timeのチェックを外せばループしなくなります。今回はループさせたいのでそのままで。


再生ボタンじゃない方をダブルクリックするとアニメの再生スピードを変更出来ます。
オレンジの部分をクリックしてSpeedを変更すればOK。今回は2にしておきました。


一度、真ん中の再生ボタンを押してみてちゃんと敵がクルクル回っていればOKです。
敵移動のスクリプトを作成しますので右クリック→Create→C# Scriptでスクリプトを作成。
名前はenemy0_moveとして下記のコードを入力。

今回もtransform.Translateで移動させています。自機弾の時とは反対方向に動くので-0.03fとなっています。
if (transform.position.y < -6)で敵座標が-6以下になったらDestroy(gameObject)で敵削除。

作成したenemy0_moveスクリプトをenemy0にアタッチします。


アタッチしたらHierarchyタブのenemy0名前をenemy0_prefabに変更してProjectタブのPrefabフォルダにドラッグ・アンド・ドロップでコピーして、Hierarchyタブのenemy0_prefabは削除します。


次にゲーム時間を制御するためのタイムテーブルを導入します。
まず、Hierarchyタブ右クリック→Create Emptyで空のゲームオブジェクトを作成します。
名前はtime_tableとしておきます。
Projectタブで右クリック→Create→C# Scriptでスクリプトを作成。名前をtime_tableとして下記のコードを入力します。

public GameObject enemy0_Prefab;で追加したい敵などをInspectorに入力するタブを表示させます。
 if(game_time%10==0)でgame_timeを10で割った時の余りが0の時に敵を生成。
Instantiate(enemy0_Prefab, new Vector3(-6f + 12f * Random.value, 6, 0), Quaternion.identity)でx軸はランダムでy軸は6の位置に敵を回転させずに表示します。
game_timeの概念があれば例えばgame_time=100とかにすれば100の時に好きな場所に表示なども可能ですね。

作成したtime_tableスクリプトをHierarchyタブのtime_tableにアタッチします。


アタッチしたtime_tableを選択するとInspectorにenemy0_prefabタブが出来ているのでそこにProjectタブのenemy0_prefabをドラッグ・アンド・ドロップ。


この状態で真中の再生ボタンを押せば敵がワラワラ生成されます。


time_tableのif(game_time%10==0)をif(game_time%1==0)とかにするとこんな感じにもなります。


こんな感じで敵を追加していけば、自分の好きな時に好きな場所に色んな敵を表示出来るようになります。
PR
【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キーを押すと自機弾が発射されるようになるはずです。

これ、何が凄いって配列変数とか考えなくても勝手に沢山のオブジェクトを動かしてくれてる点。余計なこと考えなくても何か良い感じにしてくれてる感があって凄いなぁと思いました。
【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】

自分の忘却録も兼ねて前回紹介した簡単なSTGを作る過程を書いてみます。
使用しているUnityのバージョンは2018.2.11f1です。

まずはUnityをインストールします。
インストール時に気をつけるのは自分が作りたい(ビルドしたい)プラットフォームを選択しておく事。WindowsとかiOSとかAndriodとか色々選択出来ます。(後で変更可能です)
それとVisualStudioもインストールしておきます。(インストールの過程でVisualStudioをインストールするか聞かれるのでOKにしておけば勝手にインストールされる感じです)

ユーザー登録(無料で出来ます)などをしてUnityを立ち上げたら右上のNewボタンから新しいプロジェクトを作成します。


好きなプロジェクト名を付けてTemplateは2Dにして任意のフォルダにプロジェクトを作成します。


プロジェクトが出来上がったら↓の画像を作成したプロジェクトフォルダのAssetsフォルダの中に適当なフォルダを作って、その中に入れます。

こんな感じ↓


するとUnityのProjectタブに追加したフォルダと画像が出てきます。


追加したship.pngをSceneタブにドラッグ・アンド・ドロップするとHierarchyタブにshipが生成されます。


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


ship_moveをダブルクリックするとVisualStudioが立ち上がってスクリプトを作成することが出来ます。
void Start () は最初の1回だけ呼び出される命令。
void Update ()は毎フレーム呼び出される命令を書く所となります。 


そこに下記のコードをコピペして保存します。
内容としてはアローキー(矢印キー)キーコードを検出して矢印の向きにあった方向に移動させています。
if (Input.GetKey(KeyCode.LeftArrow))なら左のキーを押した時となります。
Vector2 pos = transform.position;ってのは自機の位置情報=transform.positionを変数posに代入しています。ちなみに3Dの場合はVector2(x,y)ではなくVector3(x,y,z)を使うようです。


スクリプトを保存したらProjectタブにあるship_moveをHierarchyタブにあるshipにドラッグ・アンド・ドロップします。ちなみに、こんな感じでオブジェクトに色々と足していく行為をアタッチすると言うそうです。
Inspectorタブに先程アタッチしたスクリプトが表示されていればOK
画面真ん中にある再生ボタンを押せば矢印キーで自機が動くようになっています。


と言った感じで、正直たったこれだけで自機が動かせるようになったのは驚きです。
プログラムとして書いたのは自機の移動処理だけですので、簡単に動かせるように作ってあって凄いなーと感じました。
お久しぶりです。
実に4年ぶりくらいに更新してみます。

ここ最近ボチボチと活動を再開しようかと色々といじってみたりしてるんですが一番のやりたい事はスマートフォン用のSTGを作りたいって事でした。

でSwift(iOSの開発環境です)なんかを勉強してみたりしたのですが全然理解出来ず・・・
どうしたもんかと思っていたのですがUnityなら色んなプラットフォームにも対応してるし良さそうだなぁと思って、ちょっと作ってみたら予想以上に作れそうだったので
UnityでSTGを作っていくブログ的な物を書いて行こうかと思っています。

とりあえず作って見たのがコレ


簡単な敵が出てきて当たり判定して消滅させてみたいな感じで作ってみたのですが、思った以上に簡単に作れました。
やっぱりゲーム制作に特化されているのですぐにキャラクターなんかを動かす事が出来るのと、先人達の今まで実績があるのでインターネットで検索すると色んな方法が出てきて判りやすくて良かったです。
そしてUnityで作っておけばWindowsは勿論の事iOSとAndroid用にビルド出来るので良いなぁと思ってます。

あとUnityを勉強する上で非常に役に立ったサイトがコチラ
おもちゃラボ-【Unity入門】60分で作るシューティングゲーム
初心者にもわかりやすく書いてあって良かったです。

それとUnity公式のチュートリアルも良かったのですが、ちょっとプログラムを知ってないと難しい感じかも
Unity の2D機能を使い、シューティングゲームを作成しましょう。 (初級)

UnityはプログラムはC#で書くのですが、C#の事など全く知らない私でも他の人のコードをコピペして色々変更して使ったりするとそれなりに動きそうなので、とりあえず何か完成させたいと思っております。
Twitter
カレンダー
03 2025/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]