レッスン 2.2 - 食べ物を飛ばす

Tutorial

Beginner

+0XP

70 mins

(261)

Unity Technologies

レッスン 2.2 - 食べ物を飛ばす

概要:

このレッスンでは、プレイヤーがシーンを通して投射物を発射できるようにします。最初に、プロジェクタイルを前方に送るための新しいスクリプトを書きます。次に、プレハブと呼ばれる Unity の重要な新しい概念を使用して、すべてのスクリプトとプロパティと一緒にプロジェクタイルを保存します。プレイヤーはスペースバーをタップするだけでプレハブを起動することができます。最後に、シーンに境界線を追加し、画面から離れたオブジェクトを削除します。

プロジェクトの成果物:

プレイヤーはスペースバーをタップしてシーンに投射物プレハブを発射することができ、ゲームの境界線から離れると自壊します。また、動物はゲームの境界を離れるとシーンから削除されます。

1. 導入

2. 投射物を前方に飛ばす

まず最初に、プレイヤーが発射してにシーンを横切ることができるように、投射物に前方への動く力を与えます。
  1. 新しく「MoveForward」スクリプトを作成し、それを Food オブジェクトにアタッチしてから、それを開きます。
  2. 新しく public float speed 変数を宣言します。
  3. Update()に、「transform.Translate(Vector3.forward * Time.deltaTime * speed);」を追加し、保存します。
  4. インスペクターで、投射物の速度の変数を設定してから、テストを行います。

3. 投射物をプレハブにする

投射物が望みの動作をするようになったので、これをプレハブにして同じ動作をするものをいつどこででも使えるようにしましょう。
  1. 新しい「Prefabs」フォルダを作成し、そこに食べ物をドラッグして、オリジナルのプレハブを選択します。
  2. PlayerController.cs で、新しく public GameObject projectilePrefab 変数を宣言します。
  3. Hierarchy内のPlayerを選択し、Prefabs フォルダーからインスペクターの新しい Projectile Prefab ボックスにオブジェクトをドラッグします。
  4. 実行時に投射物をシーン内にドラッグして、飛んでいくことを確認します。

4. スペースキーの押下を検出する

PlayerController.cs に投射物のプレハブが割り当てられました。スペースバーを使ってこれを発射できるようにしましょう。
  1. PlayerController.cs の Update()で、スペースバーが押されたかどうかをチェックする if 文を「if (Input.GetKeyDown(KeyCode.Space)) {」を追加します。
  2. if 文の中に、「// Launch a projectile from the player」(プレイヤーから投射物を発射)というコメントを追加します。

5. スペースバーが押されたときに投射物を発射する

プレイヤーがスペースバーを押したことを検出するコードを作成しました。次は検出したときに投射物を生成するようにします。
  1. if 文の中で、Instantiate メソッドを使用して、プレハブの回転を指定してプレイヤーの位置で投射物を生成します。

6. 動物をプレハブにする

投射物はプレハブになっていますが、動物がまだなので、動物もプレハブにして、ゲーム中にインスタンス化できるようにしましょう。
  1. すべての動物を Y 軸で 180 度回転させ、下を向くようにします。
  2. Hierarchy 内の 3 つの動物をすべて選択し、Add Component > Move Forward を選択します。
  3. speed の値を編集して、テストしてどのような動きになるか確かめます。
  4. 「Original Prefab」を選択して、3 匹の動物を Prefabs フォルダーにドラッグします。
  5. ゲームプレイ中にプレハブをシーンビューにドラッグしてテストします。

7. 画面外に出た投射物を消去する

投射物を生成すると、その投射物はプレイエリアを越えてどこまでも飛んでいきます。ゲームのパフォーマンスを向上させるためには、表示範囲外に出たときに消去する必要があります。
  1. DestroyOutOfBounds スクリプトを作成し、投射物に適用します。
  2. 新しいプライベート変数 float topBound を追加して、30 で初期化します。
  3. 上側の境界を超えた場合に破棄するコード「if (transform.position.z > topBound) {
  4. Destroy(gameObject); }」を書きます。
  5. インスペクターの Overrides ドロップダウンで、Apply all をクリックしてプレハブに適用します。

8. 画面外に出た動物を消去する

画面外に出てしまった投射物を破壊するのであれば、動物にも同じようにするべきでしょう。Unity エディターの深淵で迷子になる生き物を生み出し続けてしまっては困ってしまいますからね...
  1. オブジェクトが lowerBound の下にあるかどうかをチェックする else-if 文「else if (transform.position.z > topBound)」を書きます。
  2. すべての動物にスクリプトを適用し、プレハブを上書きします。

9. レッスンのまとめ

新機能

  • プレイヤーはスペースバーを押して、投射物のプレハブを発射することができます。
  • 投射物と動物は画面に出るとシーンから削除されます。

新しい概念とスキル

  • プレハブの作成
  • プレハブの上書き
  • キー押下の検出
  • オブジェクトのインスタンス化
  • オブジェクトの消去
  • Else-ifステートメント

次のレッスン

  • このレッスンでは動物のプレハブをシーンに直接置いていましたが、次は平地を徘徊する動物の群れを作りましょう

Complete this Tutorial