この記事では初心者用にUnityで横スクロール2Dゲームの作り方を解説していきます。
画像を使って解説しますが、画像には赤丸で手順をつけているのでその通りに進めていけば大丈夫です!
この記事は他の記事を一部参考にしており、プログラムのコードも似ている箇所があります。
作っていくゲームは動画の通りで、左にいるキャラクターを操作して、ジャンプを駆使してクリアまで進んでいきます。
説明は「キャラ作り」「ステージ作り」「ゲームオーバー画面」「敵作り」「クリア画面とタイトル画面」4つに分けて解説していきます!
目次
操作キャラ作り
ステージ作り
GAMEOVER画面作り
敵作り
GAMECLER画面とタイトル作り
プロジェクトを作る
まずはゲームを作るためのプロジェクトを作りましょう。Unityを開くと以下の画面が表示されるので、右上の「New project」をクリックします(画像赤丸)。
すると以下の画面が開くので、左から「All templates」(画像1番目の赤丸)、「2D」(画像2番目の赤丸)、と選択し、右下にゲームの名前をつける欄があるので、そこで好きなゲーム名を入力してください(画像3番目の赤丸)。
完了したら下の「Create project」をクリックします(画像4番目の赤丸)。
すると以下の画面が表示されます。この画面で実際にゲームを作っていくことになります。
右上の「Default」から画面の表示を変更することができるので、「2×3」をクリックします(画像赤丸)。
Unityはデフォルトだと英語ですが、この解説では画像が日本語です。日本語に変換する場合はお手数ですが、こちらを参考にしてください。
操作キャラ作り
ではここから操作するキャラクターを作っていきます。
右上に「プロジェクト」と書かれた項目があるのでそこを探してください。画像だと少し分かりずらいですが、「Scenes」というファイルが初めからあるはずです。「プロジェクト」を見つけたらその中にマウスカーソルを入れた状態で右クリックします(画像1番目の赤丸)。
そして「作成」(画像2番目の赤丸)→「フォルダー」と選択していきます(画像3番目の赤丸)。
すると「Scenes」というファイルの下に新しくファイルが追加されるので、「画像」という名前に変更します(画像赤丸)。
このファイルにはゲームで使う画像を入れます。画像は以下の4種類を使用しているのでそれぞれダウンロードしてファイルに入れてください。
画像はダウンロードしたものを左クリック長押しで直接ファイルの中に入れることができます。
次にヒエラルキーの下にある「+」マークをクリックし(画像1番目の赤丸)、その中から「2Dオブジェクト」→「スプライト」→「正方形」とクリックしていきます(画像2番目の赤丸)。
左上と下に画面がありますが、これらがゲーム画面になります。今スプライトというオブジェクトを追加しましたが、画面中心に四角形があると思います。これがスプライトですね。
これには画像を読みこませることができ、これを使ってキャラクターやステージを作っていきます。
ヒエラルキーに「Square」がありますが、これが画面に映っている四角形です。これをクリックすると(画像1番目の赤丸)右側の「インスペクター」という箇所が画像のように変化するので、そこの「Sprite Renderer」にある「スプライト」という項目に、ダウンロードした地面の画像を左クリック長押しで入れると画像を変化させることができます(画像2番目の赤丸)。
スプライトは右上の「Transform」という箇所の数値を変更することで位置、角度、大きさを自由に変更することができます(画像赤丸)。
大きさと位置を調整して画面の左下に移動させてみましょう。
次にヒエラルキーの「Square」を選んだ状態のまま、右下の「コンポーネントを追加」をクリックします(画像赤丸)。
すると画像と同じ画面が開くと思うので、上の検索欄に「Box Collider 2D」と検索し(画像1番目の赤丸)、同じ名前のものを見つけてクリックします(画像2番目の赤丸)。
画像のように「Box Collider 2D」が追加されていればOKです。
この「Box Collider 2D」は当たり判定を付けてくれます。このオブジェクトは地面で、あとでキャラが歩けるようにしたいので当たり判定をつけておきます。
それができたら地面を右クリックで複製して5つほど作りましょう(画像1番目の赤丸)。それらの位置をx軸の値を変更して横にずらしていきます(画像2番目の赤丸)。
画像のように横長に床ができればOKです。
次に再びヒエラルキーからスプライトを追加し(画像1番目の赤丸)、今度は一番上のキャラクターの画像を表示させます(画像2番目の赤丸)。
キャラクターも位置と大きさを変更して、左下あたりで地面の上に配置します(画像赤丸)。
このキャラクターを操作キャラとします。ヒエラルキーで全ての名前がスプライトのままだと分かりずらいので
名前を変更しましょう。
キャラクターを右クリックして(画像1番目の赤丸)、「名前を変更」をクリックします(画像2番目の赤丸)。
名前は「Player」にしましょう(画像赤丸)。
Playerにも当たり判定を付けていきましょう。Playerを選択した状態で右下の「コンポーネントを追加」をクリックします(画像赤丸)。
先ほどと同じく「Box Collider 2D」を追加します(画像赤丸)。
追加できたらズームしてPlayerを近くで見てください。すると緑色の線で囲まれていると思います。これがPlayerの当たり判定になります。
この当たり判定は「Box Collider 2D」内の「オフセット」「サイズ」の箇所で位置と大きさを変更できます。
丁度Playerと同じくらいの大きさになるようにしましょう(画像赤丸)。
次に再び「コンポーネントを追加」をクリックし、「Rigidbody 2D」と検索して同名の物を選びます。
これは付けたオブジェクトに重力をつけてくれるもので、これによりPlayerが下に当たり判定のあるオブジェクトがない場合下に落ちていくことになります。
プログラミング
ここまでできたらついにプログラミングをしていきます。
プロジェクトから再びファイルを作り、名前を「スクリプト」とします(画像赤丸)。
これから作るプログラムは全てこのファイルに入れていきます。
そしてスクリプトのファイルの中で右クリックし、「作成」(画像1番目の赤丸)→「C#スクリプト」(画像2番目の赤丸)とクリックしていきます。
するとスクリプトが作られるので名前を「Playercontroller」にします(画像赤丸)。
このスクリプトをクリックすることでプログラムを書くことができます。
プログラミングをする際、専用のソフトウェアがないとメモ帳などでプログラミングをすることになります。しかしそれだとエラーがあった際わかりずらかったりと不便が多いです。ここでは「Visual Studio」という無料で使えるソフトウェアを使用してしますので、良ければお手数ですがこちらにダウンロード方法を載せているので参考にしてください。
スクリプトは以下のコードをコピー&ペーストしてください。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Playercontroller : MonoBehaviour
{
[SerializeField] float speed=5;
public SpriteRenderer spriteRenderer;
public Sprite sprite;
public Sprite sprite2;
public bool count = true;
//ジャンプ
private Rigidbody2D rbody2D;
private float jumpForce = 350f;
private int jumpCount = 0;
// Start is called before the first frame update
void Start()
{
rbody2D = GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update()
{
MovementHandler();
}
private void MovementHandler()
{
Vector3 inputVector = new Vector3(0, 0, 0);
if (Input.GetKey(KeyCode.D))
{
inputVector.x = 1;
this.GetComponent<SpriteRenderer>().flipX = true;
if (count == true)
{
count = false;
Move_1();
}
}
if (Input.GetKey(KeyCode.A))
{
inputVector.x = -1;
this.GetComponent<SpriteRenderer>().flipX = false;
if (count == true)
{
count = false;
Move_1();
}
}
if (Input.GetKeyUp(KeyCode.D))
{
count = true;
}
if (Input.GetKeyUp(KeyCode.A))
{
count = true;
}
inputVector = inputVector.normalized;
transform.position += inputVector * speed * Time.deltaTime;
if (Input.GetKey(KeyCode.W) && this.jumpCount < 1)
{
this.rbody2D.AddForce(transform.up * jumpForce);
jumpCount++;
}
}
private void Move_1()
{
if (count == false)
{
spriteRenderer.sprite = sprite;
Invoke("Move_2", 0.2f);
}
}
private void Move_2()
{
if (count == false)
{
spriteRenderer.sprite = sprite2;
Invoke("Move_1", 0.2f);
}
}
private void OnCollisionEnter2D(Collision2D other)
{
if (other.gameObject.CompareTag("Floor"))
{
jumpCount = 0;
}
}
private void OnCollisionExit2D(Collision2D other)
{
if (other.gameObject.CompareTag("Floor"))
{
//jumpCount = 0;
}
}
}
コピー&ペーストした時、たまにスクリプトの上の方に画像のようなコードが自動生成されることがありますが、これがあるとエラーになるので削除してください。
スクリプトが完成したら左クリック長押しでPlayerにスクリプトを持っていきます(画像1番目の赤丸)。
Playerを選択した時に右側に画像と同じく「Playercontroller」が追加されていれば大丈夫です(画像2番目の赤丸)!
追加された「Playercontroller」を見てみると、「スプライトレンダラー」、「スプライト」、「Sprite2」という欄があります。それぞれ「スプライトレンダラー」にはヒエラルキーにある「Player」を、スプライトにはキャラクターの画像、「Sprite2」にはキャラクターの画像2を入れます。
タグをつける
スクリプトにはキャラクターを「A」と「D」キーで移動、「W」キーでジャンプするコードが入っています。
ジャンプは「Floor」というタグの上に乗っている時のみ行うようにしています。つまり地面の上にいる時だけですね。
その場合地面に「Floor」というタグをつける必要があります。ヒエラルキーから地面のオブジェクト「Square」をクリックして(画像1番目の赤丸)、タグの項目をクリックします(画像2番目の赤丸)。
そして一番下の「タグを追加」をクリックします(画像赤丸)。
すると新しいタグを作ることができるので、「Floor」と入力して下の「Save」をクリックします(画像赤丸)。
再びタグをクリックすると、一番下に先ほど作った「Floor」が追加されているのでそれをクリックします(画像赤丸)。
画像のようにタグの隣が「Floor」となっていればOKです。
全ての地面のオブジェクトのタグをこの「Floor」にしてください。
今回の解説はこれで終わりです。
真ん中上の▶️マークをクリックしてゲームを実行してみてください。
動画のように「A」「D」「W」キーで左右移動とジャンプができていればOKです!
次回はステージ作りを解説していきます!
今回ほど長くはないので良ければ参考にしていってください!
コメントを残す