【Unity2D 入門】横スクロールアクションゲームを作ってみたい -キャラクターを動かしてみる

raharu(仮名)(プログラマー)
これがダイバージェンス1%の先の世界か。。。

※このブログはUnityの勉強がてら備忘録として残しているものです、ご使用の際には自己責任でお願いします。

前回はキャラクターが動くようになったので、あとは動かせればなんかそれっぽくなりそうなんですけど、
今まで一切ソースを書いてこなかったんですけど、今回遂にソース書いちゃいます!(いやプログラマなんだから書けよ俺)

オブジェクトにComponent追加する

そのまえに、とりあえずplayerを動かすために3つほどAdd Componentしておきます。

追加するコンポーネントは以下の3つ

  1. RigidBody 2D
  2. Circle Collider 2D
  3. Box Collider 2D

playerのInspectorからAddComponentしてこんな状態にします。
New Project

この状態でエミュレートすると、、、キャラクター地面を突き破って下に落ちていきます()
あれ?地面作っておいたのになんでですかね。。

どうやらCubeで作成したFloorは3D用のBox Colliderで今回のこのplayerは2DColliderなんです、
これらは干渉しないため、すり抜けて下におちてしまうそうな。。。

なのでマップ作ったときのFloorに3D用のBox Colliderを消して、Box Collider 2Dこれに変えます。
New Project

これでエミュレートすると落ちない!案ずるな受験生!絶対におちないから!
New Project

うっすら地面に見えてる緑色の線は地面です。

キャラクターを動かすスクリプトを書く

いまその場で足踏みしているキャラクターを動かせるようにスクリプトを書いてみようと思います。
Project > create > C# Scriptでファイルを作成して、
playerのゲームオブジェクトにAddComponentします。

New Project

さて、それではC#ファイルを開いて、以下のスクリプトを追加します。

playermove.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using UnityEngine;
using System.Collections;

public class playermove : MonoBehaviour {

    private bool isRight = true;

    // Update is called once per frame
    void Update ()
    {

    }

    void FixedUpdate ()
    {
        //左右キーの入力
        float h = Input.GetAxis("Horizontal");
        rigidbody2D.AddForce(Vector2.right * h * 300f);
    }
}

void update (){}の下にこんな感じで追加します。

何をしているかと言えばただ、Horizontal(左右)のボタンが押されたら押された方向に
力を加えるというだけのスクリプトです。かんたんですね。

さて、保存したらエミュレートしてみましょう。
New Project

おkおk!ばっちり動いているじゃないですか。
結局playerゲームオブジェクトに追加されたスクリプトに力を加える処理さえ書いてしまえば
そのゲームオブジェクトを動かす事ができるというかんじですね。

つい今までのノリで書くと、あれ?playerの指定とか、いらないの?
とかTranceFormに対してなんかしてあげないと行けないの?とかおもいましたが、
そんな事は特に必要ないのですね。

プレイヤーの向きを反転させる

左に移動しようとすると、後ろ向きに走ってる用にみえるので、
playerを反転させて逆向きに動かせるようにします。

先ほどのスクリプトにこれを追加

playermove.cs

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
using UnityEngine;
using System.Collections;

public class playermove : MonoBehaviour {

    private bool isRight = true;

    // Update is called once per frame
    void Update ()
    {

    }

    void FixedUpdate ()
    {
        //左右キーの入力
        float h = Input.GetAxis("Horizontal");
        rigidbody2D.AddForce(Vector2.right * h * 300f);

        //右を向いていて、左の入力があったとき、もしくは左を向いていて、右の入力があったとき
        if((h > 0 && !isRight) || (h < 0 && isRight))
        {
            //右を向いているかどうかを、入力方向をみて決める
            isRight = (h > 0);
            //localScale.xを、右を向いているかどうかで更新する
            transform.localScale = new Vector3((isRight ? 2 : -2), 2, 2);
        }
    }
}

この状態でエミュレートしてみると右左に反転してプレイヤーが動けるようになりました。
ちょっと動きが不細工なのが気になるところですが、今回はこれでよしとしましょう。
New Project

次回は敵キャラをおいて自動で動くようにしておく。
という所に挑戦していきたいと思います。