パドル(Player)の移動
パドルが左右に移動できるようにしましょう。このスクリプトを使って:
- 左キーと右キーがInspectorで設定できるようにしたい。
- 速度もInspectorで調整できるようにしたい。
- 右か左キーを押したら、設定した速度をリジッドボディに与える(
Rigidbody2D.linearVelocity)
Scripts フォルダーの中に、新しいスクリプト「PlayerMove」を作成し、上記の機能を実装してみましょう。
スクリプトの変数
using UnityEngine;
// パドルを移動するスクリプト
public class PlayerMove : MonoBehaviour
{
// 速度をInspectorで設定
[SerializeField]
private float speed;
// 左へ移動するキーをInspectorで設定
[SerializeField]
private KeyCode leftKey;
// 右へ移動するキーをInspectorで設定
[SerializeField]
private KeyCode rightKey;
// 物理的動かすためのリジッドボディ
private Rigidbody2D _rigidbody;
}
これで新しい PlayerMove のスクリプトを作成し、必要なデータ(変数)を準備ができた。Inspectorで編集するべきの変数に [SerializeField] を頭につけ、アクセス修飾子は private であっても、Unityで見えるようになる。
リジッドボディは Start() で取得するため、[SerializeField] は不要で、プログラムの中で代入する予定。
変数の先頭につけるアンダーバーについて
変数の先頭につけるアンダーバーについて
固いルールではないが、開発者の「いいマナー」としてのルールであり、変数名を見るだけで、アクセス権限がわかるためのものである。
- Unityで編集するメンバー変数:小文字で始まる。
// 速度
[SerializeField]
private float speed;
// 最大体力
[SerializeField]
private int maxHP;
// ステージの名前
[SerializeField]
private string stageName;
- クラス内部に使う
privateのメンバー変数:アンダーバーで始まる。
// 現在の体力
private float _nowHP;
// リジッドボディコンポーネントの参照
private Rigidbody2D _rigidBody;
// アイテムの位置
private Vector3 _itemPosition;
- 公開された
publicメンバー変数:大文字で始まる。
// コインの数
public int Coins;
// 最大体力(読み込み専用)
public int MaxHP {
get { return _maxHP; }
}
// 現在の体力
public string NowHP
{
get { return _nowHP; }
set { _nowHP = Mathf.Clamp(value, 0, _maxHP); }
}
- 上記以外の変数はいつも小文字で始まる。
// 引数の変数は:小文字
private int Sum (int a, int b)
{
// 内部で使う変数も小文字
int c = a + b;
return c;
}
- メソッドはいつも大文字で始まる。
// 攻撃する
public void Attack()
{
}
// ゲームオーバーになったかを確認
private void IsGameOver()
{
}
// フレーム毎の処理
private void Update()
{
}
初期化 - Start()
パドルの初期化はほとんどなく、あくまで、リジッドボディの参照を取得しておきたい。このスクリプトはパドルにアタッチするべきなので、GetComponent で簡単に取れる。PlayerMove クラスに以下のメソッドを追加してください
private void Start()
{
_rigidbody = GetComponent<Rigidbody2D>();
}
フレームごとの更新 - Update()
フレームごとに、右か左のキーが押されたかどうかを確認し、押されていたら、その向きに移動する。一方、キーが押されていなかったら、パドルを止める(速度をゼロにする)
PlayerMove クラスに以下のメソッドを追加してください:
private void Update()
{
// 前提として速度はゼロにする。
var velocity = Vector2.zero;
// ただし、左キーが押されたら
if (Input.GetKey(leftKey))
{
// x軸の速度を左の方(マイナス軸)にする
velocity.x = -speed;
}
// 右のキーが押されたら
if (Input.GetKey(rightKey))
{
// x軸の速度を右の方(プラス軸)にする
velocity.x = speed;
}
// 最後に、計算した速度をリジッドボディに与える
_rigidbody.linearVelocity = velocity;
}
試してみましょう!
|
スプライトを Player にアタッチし、右キーと左キーを設定の上、速度を設定してください。そして、ゲーム開始して、動くかどうかを確認してください。 |

No comments to display
No comments to display