第02回 プレイヤーの移動

hiroki-o edited this page Oct 15, 2015 · 2 revisions
Clone this wiki locally

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 (モノデベロップ)**を起動しましょう。

まずプレイヤーの移動は矢印キーの入力によって行い、スクリプトは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にします。

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

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

シーンを保存する

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


図2.10:


図2.11:

第02回終わり

今回はここで終了です。つまずいてしまった方はプロジェクトファイルをダウンロードして新たな気持ちで次の回へ進みましょう。

今回のプロジェクトファイルをダウンロード