【インディーズゲーム応援キャンペーン実施中】

Unity初心者がゲームの動きを作ってみた1【ジャンプ動作】

こんにちは、Unity初心者の流です。

【Unity】という簡単にゲーム制作ができるツールを使い、ゲームの動きを作っていきます。

Unityに関しての説明はこちらの記事を参考にしていただければと思います。

新人エンジニアがゲーム開発エンジンUnityを使ってみた1【Unityインストールと起動まで解説】

 

今回は、ゲームでよくある動きの「ジャンプ」を作っていきます。

いきなり、「ジャンプ」なんて作れるのと思うかもしれませんが

Unity初心者の私でも出来ましたので、頑張って制作していきましょう。

今回の目次です。

  • オブジェクトの作成
  • ジャンプの作成
  • スクリプトの解説
  • まとめ

オブジェクトの作成

まずはプロジェクトの設定からです。

3Dで作るので、3Dを選択し、プロジェクト名は「Jump」とします。

プロジェクト名は、どんなプロジェクトなのかが分かれば何でも大丈夫です。

最後に作成を押して、プロジェクトの完成です。

次に、必要なオブジェクトを作成します。

Unityの画面に関する説明はこちらの記事を参考にしていただければと思います。

新人エンジニアがゲーム開発エンジンUnityを使ってみた2【エディタ画面解説】

今回必要なのはプレイヤーと床です。

プレイヤー用にCube、床用にPlaneを使います。

Hierarchyビューの+ボタンをクリックし、メニューから

「3D Object」>「Cube」「3D Object」>「Plane」の2つを作成します。

作成後はHierarchyビューにCubePlaneが追加されます。

ですが、このままでは今後なにかCubeなどのオブジェクトが追加された際にプレイヤーなのか追加されたもの(例:敵)なのか区別がつきません

ですので、CubeとPlaneの名前を変更していきます。

名前を変更したいオブジェクトを右クリック

メニューからRenameを選択します。

以下のように、文字の入力が可能になります。

Cubeはプレイヤーとして使うので名前のCubeの部分Playerに変更します。

Playerと入力ができたらEnterキーを押します。

これで名前の変更ができました。

同様に、Planeは床として使うのでFloorに変更します。

名前変更後のHierarchyビューが以下のようになっていれば名前の変更完了です。

次に、オブジェクトの配置を変更していきます。

現在は以下のように、プレイヤーが床に埋まっています。

これでは、困るのでプレイヤーの位置を床に埋もれない位置にします。

PlayerオブジェクトTransfromを以下に変更します。

オブジェクトの配置に関する説明はこちら記事を参考にしていただければと思います。

新人エンジニアがゲーム開発エンジンUnityを使ってみた3【オブジェクトの配置と操作】

画面を確認し床から浮いていれば配置は完了です。

 

ジャンプの作成

ここからジャンプの挙動を作っていきます。

ジャンプというのは物理挙動ですので、プレイヤーにRigidbodyを追加します。

Rigidbodyに関する説明、追加の方法はこちらの記事を参考にしていただければと思います。

新人エンジニアがゲーム開発エンジンUnityを使ってみた4【物理演算Rigidbody】

 

実際にジャンプさせるためのC#スクリプトを作っていきます。

C#スクリプトの名前はJumpとして、Playerに追加します。

C#スクリプトに関する説明・追加の方法はこちらの記事を参考にしていただければと思います。

新人エンジニアがゲーム開発エンジンUnityを使ってみた5【C#スクリプトで動かす】

PlayerのInspectorビューの下のほうにRigidbodyJump(Script)が追加されていれば大丈夫です。

では、実際にジャンプできるようにJumpスクリプトを編集していきます。

以下のコードをコピペしてください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Jump : MonoBehaviour
{
    private Rigidbody rigidbody;

    // Start is called before the first frame update
    void Start()
    {
        rigidbody = GetComponent<Rigidbody>();
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            rigidbody.velocity = new Vector3(0.0f, 5.0f, 0.0f);
        }
    }
}

コピペできたらCtrlキー + Sキーで忘れずに保存してください。

Unityの画面に戻り動作を確認してみます。

Playボタンをクリックしてください。

Spaceキーを押すとジャンプすることができます。

これでジャンプの完成です。

 

スクリプトの解説

今回ジャンプに使ったスクリプトを解説していきます。

まずはStartの部分から解説します。

rigidbody = GetComponent<Rigidbody>();

GetComponentというのはC#スクリプトがついているオブジェクト(Player)のコンポーネントを取得するものになります。

コンポーネントというのは今回使ったRigidbodyTransfromなどInspectorビューに表示されているもののことです。

GetComponent<>();の<>には欲しいコンポーネントの名前を記載します。

今回はRigidbodyが欲しかったので、GetComponent<Rigidbody>();となります。

もし、Transfromが欲しい場合にはGetComponent<Transfrom>();のようになります。

 

次にUpdateの中を解説します。

if (Input.GetKeyDown(KeyCode.Space))
        {
            rigidbody.velocity = new Vector3(0.0f, 5.0f, 0.0f);
        }

Input.GetKeyDown()というのは英語の通り、Key(キーボードのキー)がDown(押されたら) trueを返すものです。

Input.GetKeyDown()の()中には、どのキーボードのキーなのかを記載します。

今回は、Spaceキーに設定したのでInput.GetKeyDown(KeyCode.Space)となります。

もしWキーが押された時が欲しい場合はInput.GetKeyDown(KeyCode.W)のようになります。

 

次にif文の中を解説します。

ここが実際にジャンプしている箇所になります。

rigidbody.velocityのvelocityを翻訳すると速度という意味になります。

ですので物理演算(rigidbody)の速度(velocity)を表しています。

Vector3というのは3次元のベクトルを表しています。()の中のx,y,z軸の向きにかかる力の強さを表しています。

Vector3 Unity公式リファレンス

今回はその速度(velocity)力の強さ(Vector3)を代入しています。

Vector3(0.0f, 5.0f, 0.0f)の()の中は左から、x軸、y軸、z軸です。

ジャンプをさせる場合は上方向に速度(velocity)を与えたいのでVector3(0.0f, 5.0f, 0.0f)を代入しています。

y軸の5.0fというのは速度の速さです。

もっと高くジャンプしたい時などは数字を大きくして10.0fなどに変更するとジャンプが高くなります。

もしx軸方向に速度(velocity)を与えたいときはVector3(5.0f, 0.0f, 0.0f)になります。

まとめ

ここまで、Unityを使ってのジャンプの作り方を学んできました。

今回は以下のことを覚えていっていただけると嬉しいです。

  • オブジェクトには使用用途に応じた名前を付ける
  • GetComponentはコンポーネントを取得するときに使う
  • Input.GetKeyDownで好きなキーを押した時が分かる
  • velocityというのは速度のこと
  • Unityなら少しのスクリプトで簡単にジャンプができる

これがUnityを触るきっかけになり、ここから自分なりに変更を加えていってよりゲームらしくしていっていただければ嬉しいです。

(Written by 流)