Unityの学習 part2

前回は、物体にRigidbody(剛体)を与えて、物体に物理エンジンが作用するように設定しました
今回は、キー入力を取得してオブジェクトのRigidbodyへ力を加えてゲーム内で動かしてみましょう

事前準備

前回のシーンに引き続き作業をします

ボールを動かした時に地面より外へ出てしまわないように壁を作成します
これがないと、壁から落ちた時に延々と落下するだけになってしまいます

壁は地面を囲むように設定するので、地面のスケールに応じて壁のスケールも設定します
私の場合、スケールは(10.5, 1, 0.5)としています
壁生成

また、壁と地面が白のままでは分かりづらいために、Materialを作成して壁に色を付けたいと思います
色つげ

1つ目の壁が生成できたら、これを複製していきます
方法は、壁のオブジェクトを右クリック > Duplicateか、壁のオブジェクトを選択してEdit > Duplicateで複製できます
4つの壁が生成できたらそれぞれのオブジェクトのPositionを変更して四方に配置します
壁をまとめる

スクリプトの作成

球体オブジェクトを動かすためのスクリプトを書いていきます
まずは、球体オブジェクトからAdd Component > new Scriptでファイル名はなんでもいいのでスクリプトファイルを生成します
Assetsの直下に作成されると思いますので、ダブルクリックやOpenなどでエディタを起動します

キー入力の受け取りは、Inputクラスを使用します
その中のどのメソッドかと言うと公式「入力によってものを動かすようにしたいのであれば Input.GetAxis を使用してください。」とあるので、GetAxisを使います

また、「入力フラグが完了するまでリセットされないので、Update 関数の中に記述することをお勧めします。」ともあるので従います

これを踏まえた上で記述すると以下のようになります

using UnityEngine;

public class BallController : MonoBehaviour {

    private void Update()
    {
        float horizon = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");
    }

}

GetAxis(“Horizontal”)は矢印キーの左右、A、Dの入力値を-1から1で取得します
GetAxis(“Vertical”)は矢印キーの上下、S、Wの入力値を-1から1で取得します
また、今回は関係ありませんがジョイスティックもマッピングされています
新たに追加などした場合には、Input Managerで出来ます

この取得した値をRigidbodyに加えたいのでRididbodyをGetComponent<>()で取得し、力をAddForce()で加えることを追記します

using UnityEngine;

public class BallController : MonoBehaviour {

    private Rigidbody rb;

    private void Start()
    {
        rb = GetComponent();
    }

    private void Update()
    {
        float horizon = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");

        Vector3 move = new Vector3(horizon, 0, vertical);

        rb.AddForce(move);
    }

}

以上で、球体オブジェクトに力を加えれるようになりました
実際にプレイしてみてください
moveBall

終わりに

Unityのことを勉強していると用意されているオブジェクトだけでは、物足りないことに気づきました
例えば、曲線を描く壁などがないことや、好きなキャラクターを動かしたいからです

Assetストアなどからダウンロードするのが一番早いと思いますが、やはり自分で作れたら一番ですので、その辺りについても学習していけたらいいと思っています

火曜日担当:poppy



アプリ関連ニュース

お問い合わせはこちら

お問い合わせ・ご相談はお電話、またはお問い合わせフォームよりお受け付けいたしております。

tel. 06-6454-8833(平日 10:00~17:00)

お問い合わせフォーム