-
Notifications
You must be signed in to change notification settings - Fork 37
第02回 プレイヤーの移動
2Dのための物理挙動を行うのに必要なクラスです。重力の影響や、物体の移動はこのクラスを介して行われます。 詳しくはドキュメントのRigidbody2Dを御覧ください。
キーボードやJoyStickなどコントローラーの全ての入力を処理するためのクラスです。モバイルなどでは加速度センサーやジャイロにもアクセスすることが出来ます。 詳しくはドキュメントのInputを御覧ください。
今回のチュートリアルでは、「○○をアタッチする」という言葉を表記していきます。アタッチとは取り付けるという意味で、ゲームオブジェクトにコンポーネントを取り付ける意味として使用することが多いです。
Playerスクリプトコンポーネントをゲームオブジェクトに取り付けるという意味です。取り付ける方法は様々で3つの方法を教えます。 1. ヒエラルキーウィンドウにあるゲームオブジェクトにドラッグ&ドロップしてアタッチする
図2.1:
2. インスペクターにドラッグ&ドロップしてアタッチする
図2.2:
3. インスペクターの「Add Component」ボタンを使ってアタッチする
図2.3:
さっそく操作キャラとなるプレイヤーを動かしてみましょう。 今回はキー入力によってプレイヤーを動かします。キー入力はスクリプトが必須でInputクラスを使用します。
PrefabからGameObjectを作成します。
図2.4:
前章で作成したプレイヤーのゲームオブジェクトにRigidbody2Dをアタッチしましょう。 今回は重力の影響は必要ないのでインスペクター上の図2.5のようにGravity Scaleを0にします。
図2.5: Playerゲームオブジェクトのインスペクター
既にアタッチされているAnimatorを見て、Apply Root Motionにチェックが付いている場合は外してください。
図2.6:
Apply Root Motionは3Dモデルに対するアニメーションの制御を行うために使用されます。ですが今回のように2Dゲームを作る場合でもチェックをつけていると影響を受けてしまい、プレイヤーを正しく動かすことが出来ません。
スクリプトファイルを作成しましょう。Assets -> Create -> C# Script
を選択し、名前をPlayerとします。
図2.7:
保存場所は図format_numberのようにScriptsフォルダの中に保存するようにしてください。
早速コードを書いていきます。Player.csファイルをダブルクリックして**Monodevelop (モノデベロップ)**を起動しましょう。
まずプレイヤーの移動は矢印キーの入力によって行い、スクリプトはInput.GetAxisRaw(string axisName)
を使用します。
矢印キーの左を押せば-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:
ここで、ゲームを再生してプレイヤーが動くか確認する前に、カメラの調整を行います。これはゲーム画面で見える範囲を調整するためです。 ProjectionをOrthographicに、Sizeを3にします。
図2.9: Main Cameraのインスペクター
スクリプトのアタッチとカメラの調整が終わったらゲームを再生して矢印キーを押してみましょう。動きましたか?
今までシーンで作成したものをSceneファイルとして保存します。
Scenes
フォルダを作成し、メニューの「File → Save Scene」
を選択してください。
シーン名はStageとします。
図2.10:
図2.11:
今回はここで終了です。つまずいてしまった方はプロジェクトファイルをダウンロードして新たな気持ちで次の回へ進みましょう。
第01回 スプライトとスプライトアニメーションの作成
第02回 プレイヤーの移動
第03回 プレイヤーから弾を撃つ
第04回 敵を作成しよう
第05回 当たり判定とアニメーションイベントとレイヤー
第06回 背景を作る
第07回 Wave型の仕組み作り
第08回 音をつける
第09回 プレイヤーの移動制限と様々な修正
第10回 タイトルを付ける
第11回 エネミーのHP、弾の攻撃力、アニメーションの追加
第12回 Waveを5個にする、スコアの実装
第01回 複数の解像度に対応する(黒帯を追加する)
第02回 複数の解像度に対応する(引き伸ばす)
第03回 タッチパネル対応
第04回 バーチャルジョイスティック対応