Unity3Dで2Dシューティングゲームの作り方、パート1(スプライトとアニメーションの作成、自機、敵機、爆発、プレハブ)

今回はUnity3Dのチュートリアルにしたがって、2Dシューティングゲームを作ってみようと思います。

Unity3Dのチュートリアルをコツコツ進めて、Unity3Dで何が簡単にできて何が難しいかを把握して、簡単なものを組み合わせていつかオリジナルゲームを作るのです!

作り方はできるだけ説明しながら進めていきます。ただ、これで3個目のチュートリアルのゲームになるので、前に説明した箇所の説明は基本的に吹っ飛ばします。(ついていけない人は、Unityゲーム作りの最初の記事からやりましょう!)


このチュートリアルを始める前に

このチュートリアルを始める前にへ行き、“今回のプロジェクトファイルをダウンロード”をクリックして、ゲーム作りで必要なアセットや設定をダウンロードします。ダウンロードが終わったら解凍しておきます。

Unityを起動します。
File → Create Project → Open Project → Open Other
ダウンロードして解凍したフォルダ(ShootingGame)を指定する

Assetsを読み込んだ状態でUnityが再起動する。

ゲームサイズを変更する。
Edit → Player
Inspector上にあるWebのアイコン(一番左)を指定する。

シーンパネルの上にあるGameタブをクリックしてその少し下をクリック
一番下の+のマークをクリック
Label Web、Width 600、Height 450

これで画面サイズが600×450になりました。
以上で最初の設定は完了です。

スプライト/スプライトアニメーションの作成

Unity Japan: 第01回 スプライト / スプライトアニメーションの作成

スプライト=2Dのオブジェクト

Sprite Editorで1枚のテクスチャから複数のスプライトを作成します。
Assets → Sprites → Spaceship → Spaceshipを選択

InspectorのSprite ModeをMultipleに変更、
Pixels To Unitsを50に変更します。
50ピクセルで1ユニットの大きさになります。

Sprite Editorをクリックします。

Sprite Editorが起動します。
Slieceタブをクリック → TypeをGridに変更 → Pixel Sizeを48×48に変更 → Sliceをクリック
最後にApplayタブをクリックします。

これで1つのテクスチャから19個のスプライトを作成することができました。


自機(GIFアニメーション)を作ります。
Spaceshipで複数作成したスプライトのうちSpaceship_0からSpaceship_3までを選択して、シーンパネルに投げ込みます。
アニメーションファイルの保存先はAssets\Animations\Playerにして、名前はNormalにします。
HierarchyにあるSpaceship_0の名前をPlayerに変更します。

Playボタンを押すと、みみっちい自機が表示され、その場で少し動いています。


敵を作ります。
自機を作ったのと同じ作業で敵も作ります。Spaceship_4からSpaceship_7までを選択して、シーンパネルに投げ込んで、Assets\Animations\Enemyに名前をNormalとして保存します。Spaceship_4の名前をEnemyに変更します。


弾を作ります。
Assets → Sprites → Bullet
Bulletを選択してInspectorのSprite ModeをMultipleに変更します。
Sprite Editorをクリック

SliceタブをクリックしてTypeをGridに変更してPixel Sizeを16×16に変更して、Sliceボタンををクリックします。最後にApplyタブをクリックすると、1つのテクスチャから2個のスプライト(自機の弾と敵の弾)が作成されます。


爆発のアニメーションを作ります。
Assets → Sprites → Explosion
Explosionを選択してInspectorのSprite ModeをMultipleに変更します。
Sprite Editorをクリック

SliceタブをクリックしてTypeをGridに変更してPixel Sizeを80×80に変更して、Sliceボタンををクリックします。最後にApplyタブをクリックすると、1つのテクスチャから11個のスプライトが作成されます。

Explosion_0からExplosion_10までを選択してシーンパネルに投げ込みます。Assets\Animations\Explosionに名前をExplodeとして保存します。HierarchyのExplosion_0の名前をExplosionに変更します。

再生ボタンを押すと、爆発しているアニメーションが繰り返し再生されます。


Prefabにします。
Player、Enemy、ExplosionをPrefabにします。
HierarchyにあるPlayer、Enemy、Explosionを1つずつAssetsのPrefabsに投げ込んでいきます。全て投げ込み終わったら、HierarchyにあるPlayer、Enemy、Explosionを削除します。


これでスプライト/スプライトアニメーションの作成が完了です。
全て終わると下記のような感じになります。



プレイヤーを動かす

Unity Japan: 第02回 プレイヤーの移動

Prefabからゲームオブジェクトを作成する
Assets → Prefabs
Playerをクリックしてドラッグして、シーンパネルに投げ込みます。
作成されたPlayerにRigidbody 2Dを追加して、Gravity Scaleを0にします。
あとApply Root Motionのチェックもはずします。

スクリプトファイルを作成する
Assets → Scripts
右クリックしてCreate → C#Script
作成されたファイルの名前をPlayerに変更します。
Playerスクリプトをダブルクリックしてエディタを起動して編集させます。

Player
using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour {
#NewBehaviourScriptはPlayerに訂正する必要ありです

	public float speed = 5;

	// Update is called once per frame
	void Update () {
		float x = Input.GetAxisRaw ("Horizontal");
		float y = Input.GetAxisRaw ("Vertical");

		Vector2 direction = new Vector2 (x, y).normalized;

		rigidbody2D.velocity = direction * speed;
	}
}

Playerスクリプトを選択してドラッグして、シーンパネルのPlayerの画像のところにドロップします。

エラーメッセージが出ました。
Cant’t add script
Can’t add component ‘Player’ because it doesn’t exist.
Check to see if the file name and class name match.

うーん、存在しているはずなんですが?

あれ、クラス名がNewBehaviourScriptってなってる!
NewBehaviourScriptをPlayerに変更したら、エラーが出なくなりました。

とりあえずPlayボタンを押してみます。
キーボードの矢印を押すとそれにしたがって自機が動いてくれます。


メインカメラの調整
Main CameraをクリックしてInspectorにあるSizeを3にします。

ここまでのプロジェクト画面の様子。



プレイヤーから弾を撃つ

Unity Japan: 第03回 プレイヤーから弾を撃つ

ちゃっちゃか作っていきましょう。

とりあえず、ここでシーンを保存しておきます。
File → Save Scene
Scenesフォルダをクリック
TheGameという名前で保存します。


プレイヤーの弾を作成する
Assets → Prefabs
Bullet_0をクリックしてシーンパネルにドラッグドロップします。
HierarchyのBullet_0をBulletという名前に変更します。

プレイヤーの弾を動かす
GameObject → Create Empty
作成されたGameObjectの名前をPlayerBulletに変更します。
PlayerBulletにRigidbody2Dを追加します。
PlayerBulletの位置をリセットします。
Gravity Scaleを0にします。

Playerの位置もリセットします。

Bulletの位置もリセットします。
Bulletを複製して2つにします。
片方のBulletの位置Xを-0.14に変更します。
もう片方のBulletの位置xを0.14に変更します。

2つのBulletをPlayerBulletにドラッグドロップします。

PlayerBulletをPrefabsにドロップします。
これで自機の弾をPrefab化することができました。


弾を動かす
BulletスクリプトをC#で作成します。

Bulletスクリプトを編集します。
using UnityEngine;
using System.Collections;

public class Bullet : MonoBehaviour {

	public int speed = 10;

	// Use this for initialization
	void Start () {
		rigidbody2D.velocity = transform.up.normalized * speed;
	}
}

BulletスクリプトをPlayerBulletにドラッグドロップします。
これでPlayボタンを押すと自機から弾がすぐに飛んでいきます。

HierarchyのPlayerBulletのInspectorにあるPrefabのApplyを押すと、追加したスクリプトがPlayerBulletのPrefabに反映されます。


プレイヤーから弾を発射する
HierarchyのPlayerBulletを削除する。

Playerスクリプトを編集する。
using UnityEngine;
using System.Collections;

public class Player : MonoBehaviour {

	public float speed = 5;
	public GameObject bullet;

	IEnumerator Start() {
		while(true){
			Instantiate (bullet, transform.position, transform.rotation);
			yield return new WaitForSeconds (0.05f);
		}
	}

	// Update is called once per frame
	void Update () {
		float x = Input.GetAxisRaw ("Horizontal");
		float y = Input.GetAxisRaw ("Vertical");

		Vector2 direction = new Vector2 (x, y).normalized;

		rigidbody2D.velocity = direction * speed;
	}
}
Bulletを永遠と打ち続けるためにコルーチンとして呼び出す。

次弾発射まで0.05秒待つコード
yield return new WaitForSeconds (0.05f);
へー・・・、くらいしかわかりませんが気にしない!

HierarchyのPlayerを選択します。
InspectorのスクリプトにBulletの欄ができています。
PrefabのPlayerBulletをドラッグしてその欄にドロップします。

ここでPlayボタンを押すと自機から弾がどんどん発射されていきます。


スプライトの描画順
上記では弾が自機の真上から発射されてしまいます。
これを修正して、弾が自機の真下から発射されるようにします。

Edit → Project Settings → Tags and Layers
InspectorのSorting Layersを変更する
+のボタンを二回押す
Layer 0 Default
Layer 1 Bullet
Layer 2 Player

数字の小さい順にオブジェクトが描写される。
つまりPlayerが一番上にくるようになる。

PrefabのPlayerBulletからBulletを選択する。
InspectorのSorting LayerをBulletに変更する。
もうかたっぽのBulletも同じように変更する。

HierarchyのPlayerを選択する。
InspectorのSorting LayerをPlayerに変更する。

以上で弾が機体の下から出てくるようになります。


ここまでてPlayボタンを押した状態




今回はここまでにします。

3個目のチュートリアルのゲーム作りですが、ある程度基本的なことには慣れましたが、
それでもいろいろ新しいやり方が出てきてとても勉強になります。

Unity3Dに興味のある人は、最初に本を買うんじゃなくて、
チュートリアルを先にやってみるのが良いと思います。

Unity3Dで2Dシューティングゲームの作り方、パート1(スプライトとアニメーションの作成、自機、敵機、爆発、プレハブ)” への1件のコメント
  1. ねじやま より:

    大変参考になりました!!!
    ありがとうございます!!

コメントを残す

メールアドレスが公開されることはありません。