Unityで2Dアクションゲームを作ろう① ~キャラクターの配置と移動と操作~


Unityで2Dアクションゲームを作ろう①


Unityで2Dアクションゲームを作成する際に使用した方法やロジックなどを紹介していきます。
※注意 Unity4の頃に作ったものなので、いろいろと古いです。

Unityの学習ならこちらもおすすめ
▶ Unity練習問題シリーズ

作成するゲームについて


今回作成したゲームは、強制横スクロールで指一本で遊べるという条件で作成した、いわゆる昔ながらの2Dアクションゲームです。


このゲームの作成手順と、組み込まれている要素を紹介していきます。

使用したアセット


ゲームを作成するにあたり、2Dのキャラクターデータ(Sprite)が必要であったため以下のアセットを使用しました。

Sprite Pack #1 – Tap and Fly
https://www.assetstore.unity3d.com/jp/#!/content/21454

GOLD EXPERIENCE TEAM というタイの開発チームが作成した無料のアセットです。

このアセットにはスクリプトも用意されているので、これだけでゲームを作成することも可能ですが、
今回は2Dキャラクターのスプライトだけ使用させていただきました。

ダウンロードしたアセットをインポートすると、[Aseets] フォルダに [Sprite Pack #1 – Tap and Fly] フォルダが作成されます。
インポートできたらゲームシーンの作成に取り掛かりましょう。

ゲームシーンの作成


プレイヤーの設定①

まずはキャラクターの配置をしましょう。
[Sprite Pack #1 – Tap and Fly] → [Sprites] → [Player] フォルダの中にある画像データを使用して、キャラクターのセットアップを行います。

1.[Player]→[player_fly_f01~03] をまとめてシーンに配置します。
その際、アニメーションの保存場所を聞かれるので、[Animations] フォルダに名前を”fly”で保存しましょう。

2.Hierarchyで名前をPlayerに変更します。先頭の文字を大文字にしておきましょう。
※後でスクリプト側から制御する際に、C#が大文字と小文字を区別するため。

3.座標とサイズの設定
Plyaerオブジェクトのパラメータを下図のように変更します。
WS000039

4.カメラの調整
Position Y を15、Sizeを20に変更します。

5.シーンを再生して、Playerが羽ばたくアニメーションを確認しましょう。

6.Rigidbody 2Dコンポーネントの設定
[Add Component]→[Physics 2D]→[Rigidbody 2D] を選択してコンポーネントを追加します。
パラメータを下図のように変更します。
WS000041
MassはPlayerの重さで、Gravity Scaleは重力の強さです。
Fixed Angleにチェックを入れると、オブジェクトの回転を許可しなくなります。

7.シーンを再生して重力エンジンの動作を確認しましょう。
Playerが落下すればOKです。

ステージ作成

続いてステージの作成をします。まずは土台となるFloorの作成から行います。

1.Floorオブジェクトの作成
[Hierarchy]→[Create]→[3D Object]→[Cube] を選択してCubeオブジェクトを作成します。
名前を”Floor”に変更しましょう。

2.パラメータを下図のように変更します。
WS000043

3.Collider(コライダー)の設定
先ほど作成したCubeオブジェクトは3Dオブジェクトなので、予め3D用のコライダーが設定されています。
3Dと2Dのコライダーを同時に設定することはできないので、3D用のコライダーを削除します。
CubeにはBox Colliderが設定されるので、歯車マークからRemove Componentを選択して削除しましょう。削除できたら、[Add Component]→[Physics 2D]→[Box Collider 2D] を選択して、追加します。

4.Playerにもコライダーを設定します。
先ほど作成したPlayerオブジェクトにもコライダーを追加しましょう。
[Add Component]→[Physics 2D]→[Circle Collider 2D]

5.シーン再生
シーンを再生して、落下するPlayerがFloorをすり抜けないことを確認しましょう。

プレイヤーの設定②

次にプレイヤーに適用するスクリプトを作成します。このスクリプトを適用するとプレイヤーがフレーム毎に右に移動し、スペースキーを押すと上方向に跳ねるようになります。

1.プロジェクトビューで右クリックから、[Create]→[C# Script] を選択して、名前をPlayerにします。
※先頭を大文字にすることに注意しましょう。

2.作成したPlayer.csに以下のスクリプトを記述します。
※この時、4行目のクラス名と作成したファイル名が一致していないとエラーになるので気を付けましょう。


using UnityEngine;
using System.Collections;

public class Player : MonoBehaviour {

	// 変数の定義と初期化
	public float flap = 550f;
	public float scroll = 10f;
	Rigidbody2D rb2d;

	// Updateの前に1回だけ呼ばれるメソッド
	void Start() {
		// Rigidbody2Dをキャッシュする
		rb2d = GetComponent<Rigidbody2D>();
	}

	// シーン中にフレーム毎に呼ばれるメソッド
	void Update() {
		// xの正方向にscrollスピードで移動
		rb2d.velocity = new Vector2(scroll, rb2d.velocity.y);

		// スペースキーが押されたら
		if (Input.GetKeyDown(KeyCode.Space)) {
			// 落下速度をリセット
			rb2d.velocity = Vector2.zero;
			// (0,1)方向に瞬間的に力を加えて跳ねさせる
			rb2d.AddForce(Vector2.up * flap, ForceMode2D.Impulse);
		}
	}
}

20行目の処理は、プレイヤーに2次元ベクトルの速度を与えています。Ⅹ方向にはscroll、Y方向には現状を維持。
25行目で落下速度をリセットしていますが、これは毎回一定量跳ねるようにするためです。これがないと落下速度が蓄積されてしまい、だんだんと跳ねなくなってしまいます。
27行目のForceMode2D.Impulseは力を加える処理であるAddForceのオプションで、変数flapで指定した量の力が瞬間的に加わるようになります。

3.作成したスクリプトをプレイヤーに適用します。
プレイヤーオブジェクトにドラッグ&ドロップしましょう。
※ヒエラルキー、インスペクター、シーンビューのどれからでも可です。

4.シーンの再生
シーンを再生してPlayerが右方向に移動することと、スペースキーを押すと上方向に跳ねることを確認しましょう。

まとめ


ここまでで、ゲームプレイヤーが介入できる部分はほぼ完成です。
キャラクターの配置と移動と操作については以上です。

次回は 障害物の配置とスコアの表示編 です。

今月の新着記事

【Unity認定試験対策】業界情報のチャプターで出題される用語の解説
【解けないとマズいレベルの練習問題】C# 練習問題 8
【Unity認定試験対策】Unity 練習問題 11 - Animator -
【Unity認定試験対策】Unity 練習問題 12 - Navmesh -

記事一覧にもどる

  • このエントリーをはてなブックマークに追加

PAGE TOP