レッスン 3.1 - ジャンプ力
Tutorial
·
Beginner
·
+0XP
·
90 mins
·
(183)
Unity Technologies

概要:
このレッスンの目的は、このプロトタイプの基本的なゲームプレイを設定することです。まず、新しいプロジェクトを作成し、スターターファイルをインポートします。次に、美しい背景とプレイヤーが操作するキャラクターを選択し、スペースバーを押すとそのキャラクターがジャンプするようにします。また、プレイヤーに対する障害物を選択し、一定の間隔でプレイヤーの進路に障害物を放り込むスポーンマネージャーを作成します。
プロジェクトの成果物:
好みのキャラクター、背景、障害物を設定します。障害物が画面の端に出現してプレイヤーの進路を塞ぐので、プレイヤーはスペースバーを押してキャラクターをジャンプさせてそれを避けることができるようにします。
Languages available:
1. 概要
2. プロトタイプを開き、背景を変える
まず新しいプロジェクトを立ち上げ、スターターファイルをインポートし、ゲームの背景を選択します。
- Unity Hub を開き、コースディレクトリに新しく「Prototype 3」プロジェクトを作成する
- リンクをクリックして Prototype 3 のスターターファイルにアクセスし、ダウンロードして Unity にインポートする
- Prototype 3 シーンを開き、Sample シーンを保存せずに削除する
- ヒエラルキーで Background オブジェクトを選択し、Sprite Renderer コンポーネント の Sprite で、_City、_Nature、_Town のいずれかの画像を選択する
3. プレイヤーキャラクターを選び、設定する
プロジェクトを開始して背景を選択しました。次はプレイヤーが操作するキャラクターの設定を行いましょう。
- Course Library > Characters から、キャラクターを 1 つヒエラルキーにドラッグし、「Player」に名前を変更してから、Y 軸で回転させて右を向かせる
- Rigid Body コンポーネントを追加する
- ボックスコライダーを追加し、コライダーの境界を編集する
- Assets 内に新しく「Scripts」フォルダーを作成し、その中に「PlayerController」スクリプトを作成して、それをプレイヤーにアタッチする
4. スタート時にプレイヤーをジャンプさせる
今まではゲームオブジェクト全体か Transform コンポーネントに対してしかメソッドを呼び出していませんでした。プレイヤーにかかる力や重力をもっとコントロールしたい場合は、プレイヤーの Rigidbody コンポーネントのメソッドを呼び出す必要があります。
- PlayerController.cs で、新しく private Rigidbody playerRb;変数を宣言する
- Start() で playerRb = GetComponent<Rigidbody>(); と初期化する
- Start() で AddForce メソッドを使用して、ゲームの開始時にプレイヤーをジャンプさせる
5. スペースバーが押された時にプレイヤーをジャンプさせる
プレイヤーがスタート時にジャンプしますが、これは望んだ挙動ではありません。スペースバーを押して、ジャンプするよう指示したときだけジャンプさせるようにしましょう。
- Update() にスペースバーが押されたかどうかをチェックする if-then 文を追加する
- Start() の AddForce のコードを切り取って if 文のブロック中に貼り付ける
- ForceMode.Impulse パラメーターを AddForce の呼び出しに追加して、力に掛ける数を小さくする
6. ジャンプ力と重力を調整する
ジャンプの力、シーンの重力、キャラクターの質量などを調整して、プレイヤーにきれいなジャンプをさせましょう。
- 新しく public float jumpForce 変数を作り、ハードコードされた値を置き換える
- 新しく public float gravityModifier 変数を追加し、Start() に Physics.gravity *= gravityModifier; を追加する
- インスペクターで、gravityModifer、jumpForce、Rigidbody の mass の値を微調整して、楽しくプレイできる感触にする
7. プレイヤーが二重ジャンプしないようにする
すでにお気づきかもしれませんが、プレイヤーはスペースバーを何度も叩くと、キャラクターをものすごい勢いで飛び上がせることができます。このおかしな挙動をなくしてジャンプをより現実的なものにするためには、ジャンプする前にプレイヤーが地面に接していることを確認する if 文が必要です。
- 新しく public bool isOnGround 変数を追加し、true に設定する
- プレイヤーをジャンプさせる if 文で isOnGround = false を設定してから、テストする
- if 文の条件に「&& isOnGround」を追加する
- 新しく void onCollisionEnter() メソッドを追加し、そのメソッドで isOnGround = true と設定し、テストする
8. 障害物を作り、左に動かす
プレイヤーは空中をジャンプするようになりました。ここで何か飛び越えるものを置いてみましょう。これまでに慣れ親しんだコードを使って、障害物のインスタンスを作り、プレイヤーの動く先に配置してみましょう。
- Course Library > Obstacles から障害物を追加し、「Obstacle」と名前を変更し、出現させる位置に配置する
- Rigid Body と Box Collider コンポーネントを適用し、障害物の形に合うようにコライダーの境界を編集する
- 新しく「Prefabs」フォルダーを作成し、Obstacle をドラッグして新しくオリジナルのプレハブを作成する
- 新しく「MoveLeft」スクリプトを作成し、障害物に適用して開く
- MoveLeft.cs で、speed 変数に応じて左に移動するコードを記述する
- MoveLeft スクリプトを背景に適用する
9. スポーンマネージャーを作る
前回のプロジェクトと同様に、障害物のプレハブのインスタンスを作る空のオブジェクト Spawn Manager を作成しましょう。
- 新しく「Spawn Manager」という名前の空のオブジェクトを作成し、そのオブジェクトに新しく作った SpawnManager.cs スクリプトを適用する
- SpawnManager.cs で、新しく public GameObject obstaclePrefab; を宣言し、インスペクターの新しい変数にプレハブを割り当てる
- 新しく private Vector3 spawnPos を宣言し、障害物を出現させる位置で初期化する
- Start() で新しい障害物プレハブのインスタンスを作るようにして、シーンからプレハブを削除してテストする
10. 一定間隔で障害物を出現させる
いま、スポーンマネージャーはゲーム開始時にプレハブのインスタンスを作ります。新しい関数を書いて、タイマーで障害物を出現させるようにしたいのですが、それには InvokeRepeating を使う必要があります。また、キャラクターの RigidBody を変更して、倒されないようにしなければなりません。
- 新しい void SpawnObstacle メソッドを作成し、その中に Instantiate の呼び出しを移動させる
- 新しく、startDelay と repeatRate という名前の float 型変数を作成する
- InvokeRepeating() メソッドを使用して、障害物を間隔をおいて出現させるようにする
- Player の Rigid Body コンポーネントの Constraints を展開し、Y 軸方向の位置以外のすべての位置をフリーズする
11. レッスンのまとめ
新機能:
- スペースバーを押すとプレイヤーがジャンプする
- プレイヤーの二重ジャンプの抑止
- 障害物と左に動く背景
- 一定間隔で障害物を出現させる
新しい概念とスキル:
- GetComponent
- ForceMode.Impulse
- Physics.Gravity
- Rigidbody の制約
- Rigidbody 変数
- ブーリアン
- 乗算/割り当て(「*」)演算子
- 論理積(&&)演算子
- OnCollisionEnter()
次のレッスン:
- 背景を左に動かすことで生まれたおかしな演出を、コードを使って常にスクロールするように修正します。