プレイヤーの移動

確認済のバージョン: 5.5

-

難易度: 初級

2.1 読む前におさえておこう

Rigidbody2Dクラス

2Dのための物理挙動を行うのに必要なクラスです。重力の影響や、物体の移動はこのクラスを介して行われます。 詳しくはドキュメントのRigidbody2Dを御覧ください。

Inputクラス

キーボードやJoyStickなどコントローラーの全ての入力を処理するためのクラスです。モバイルなどでは加速度センサーやジャイロにもアクセスすることが出来ます。 詳しくはドキュメントのInputを御覧ください。

○○をアタッチする

今回のチュートリアルでは、「○○をアタッチする」という言葉を表記していきます。アタッチとは取り付けるという意味で、ゲームオブジェクトにコンポーネントを取り付ける意味として使用することが多いです。

例: Player.csをアタッチする

Playerスクリプトコンポーネントをゲームオブジェクトに取り付けるという意味です。取り付ける方法は様々で3つの方法を教えます。 1. ヒエラルキーウィンドウにあるゲームオブジェクトにドラッグ&ドロップしてアタッチする


図2.1:

2. インスペクターにドラッグ&ドロップしてアタッチする


図2.2:

3. インスペクターの「Add Component」ボタンを使ってアタッチする


図2.3:

さっそく操作キャラとなるプレイヤーを動かしてみましょう。 今回はキー入力によってプレイヤーを動かします。キー入力はスクリプトが必須Inputクラスを使用します。

2.2 Prefabからゲームオブジェクトを作成

PrefabからGameObjectを作成します。


図2.4:

2.3 プレイヤーを動かす準備

前章で作成したプレイヤーのゲームオブジェクトにRigidbody2Dをアタッチしましょう。 今回は重力の影響は必要ないのでインスペクター上の図2.5のようにGravity Scale0にします。

Playerゲームオブジェクトのインスペクター
図2.5: Playerゲームオブジェクトのインスペクター

既にアタッチされているAnimatorを見て、Apply Root Motionにチェックが付いている場合は外してください。


図2.6:

Apply Root Motionのチェックを外す理由

Apply Root Motionは3Dモデルに対するアニメーションの制御を行うために使用されます。ですが今回のように2Dゲームを作る場合でもチェックをつけていると影響を受けてしまい、プレイヤーを正しく動かすことが出来ません。

2.4 プレイヤーにスクリプトをアタッチ

スクリプトファイルの作成

スクリプトファイルを作成しましょう。Assets -> Create -> C# Scriptを選択し、名前をPlayerとします。


図2.7:

保存場所は図format_numberのようにScriptsフォルダの中に保存するようにしてください。

スクリプトを書く

早速コードを書いていきます。Player.csファイルをダブルクリックしてMonodevelop (モノデベロップ)を起動しましょう。環境によっては、Visual Studioが起動する場合もあります。

まずプレイヤーの移動は矢印キーの入力によって行い、スクリプトはInput.GetAxisRaw(string axisName)を使用します。

Input.GetAxisRaw

矢印キーの左を押せば-1、右を押せば1、何も押さなければ0を取得できます。これはキーボードのような「押す/押さない」の2択しかない場合に使用してください。 アナログスティックのような完全には押し込まず、中途半端な状態が存在する場合は0から1の間の値も検出できるInput.GetAxis(string axisName)を使用します。

キー入力によってプレイヤーの移動する向きと速度 (速度ベクトル)rigidbody2D.velocityに代入します。

速度ベクトル...??

物体の移動する向きと速さをベクトルで表したものです。 他にも、ベクトルをUnityで使う場面の紹介をドキュメントにて公開しています。ベクトルのクックブック

実装したコードが以下になります。

Player.cs


using UnityEngine;
using System.Collections;

public class Player : MonoBehaviour
{
  // 移動スピード
  public float speed = 5;

  void Update ()
  {
    // 右・左
    float x = Input.GetAxisRaw ("Horizontal");

    // 上・下
    float y = Input.GetAxisRaw ("Vertical");

    // 移動する向きを求める
    Vector2 direction = new Vector2 (x, y).normalized;

    // 移動する向きとスピードを代入する
    GetComponent<Rigidbody2D>().velocity = direction * speed;
  }
}


プレイヤーにスクリプトをアタッチする

先ほど作成したPlayer.csをプレイヤーにアタッチします。スクリプトをプレイヤーのゲームオブジェクトにドラッグ&ドロップしてください。


図2.8:

Main Camera (メインカメラ)の調整

ここで、ゲームを再生してプレイヤーが動くか確認する前に、カメラの調整を行います。これはゲーム画面で見える範囲を調整するためです。 ProjectionをOrthographicに、Sizeを3にします。


図2.9: Main Cameraのインスペクター

スクリプトのアタッチとカメラの調整が終わったらゲームを再生して矢印キーを押してみましょう。動きましたか?

シーンを保存する

今までシーンで作成したものをSceneファイルとして保存します。 Scenesフォルダを作成し、メニューの「File → Save Scene」を選択してください。 シーン名はStageとします。


図2.10:


図2.11: