キャラクターが移動出来るようになりましたが、同じ方向をみたまま移動するのはやはり不自然ですよね。ここではプログラムを改良して向きを変更させましょう。
向きを変更する処理を加える
前回の処理でプレイヤーが移動する処理を実装しました。ここではそのプログラムに手を加え、向きを変更する処理を実装したいと思います。プログラムは段階的に変更していきます。前回の処理からの変更点がどのあたりにあるか見比べながら進めてください
ソースファイルの更新
まだそこまで長くないプログラムなので、今回は全部載せておきます。何か違いが無いか見直しに使ってください。
using UnityEngine;
public class PlayerController : MonoBehaviour
{
private Rigidbody2D m_rigidbody;
private float m_fAxisHorizontal;
private float HorizontalSpeed = 3f;
void Start()
{
m_rigidbody = GetComponent<Rigidbody2D>();
}
void Update()
{
m_fAxisHorizontal = Input.GetAxisRaw("Horizontal");
if( 0f < m_fAxisHorizontal)
{
// 右側の入力
transform.localScale = Vector2.one;
}
else if(m_fAxisHorizontal < 0f)
{
// 左側の入力
transform.localScale = new Vector2(-1f, 1f);
}
else
{
// 左右の入力なし
}
}
private void FixedUpdate()
{
m_rigidbody.velocity = new Vector2(
m_fAxisHorizontal * HorizontalSpeed,
m_rigidbody.velocity.y);
}
}
変更があるのはUpdateメソッドの中だけです。
if – else 文 について
今回の処理で使われたif文とelse if文はプログラムの順番が重要になります。else if文というもの自体は無いのですが、else文(if文の条件に満たなかったもの)の中でさらにif文をつなげて書くことでelse if文みたいに書くのがお約束になっています。
説明っぽく書くと下のようになるのですが、
if( 条件A ){
条件Aの処理
}
else if( 条件B ){
条件Bの処理
}
else {
条件Aにも条件Bにも合わなかった場合の処理
}
こういうのは日常生活に当てはめて考えると少しわかりやすくなると思います。みなさんは以下の条件だとどのブロックの中の処理になりますか?
if( Unityのゲーム開発歴が1年以上 ){ // 条件A
処理A
}
else if( 現在学生さん ){ // 条件B
処理B
}
else {
処理C
}
さぁどこの処理になったでしょうか?このelseを使ったif文の注意点は先程も言ったとおり、順序が重要になります。先程のプログラムでUnityのゲーム開発歴が1年以上でかつ学生さんがいた場合、上のプログラムだと処理Aを行うことになりますが、if文の順序を次の様に入れ替えてしまうと実行される結果が変わってしまいます。
if( 現在学生さん ){ // 条件B
// 先程の学生さんは学生のため
// このプログラムだと処理Bを行ってしまう
処理B
}
else if( Unityのゲーム開発歴が1年以上 ){ // 条件A
処理A
}
else {
処理C
}
このプログラムの特性をしっかり覚えておきましょう。
動かして確認してみよう
プログラムの修正とif – else if文への理解が深まったところで実際に動かしてみましょう。
インスペクターを使ったパラメータの変更方法
ゲームを作っていると、いろいろなパラメータの調整を行いたくなるもです。今回だとプレイヤーのスピードを早くしたり遅くしたくなると思います。Unityはゲームエンジンなだけあって、この手の調整を非常に行いやすく設計されています。
プログラム側の変更
今回は一部だけ変更してその調整方法を体験したいと思います。メンバー変数のHorizontalSpeedをpublicに変更するだけです。
public float HorizontalSpeed = 3f;
インスペクターで数字を変更する
先程のプログラム更新を行いUnityに戻ります。ヒエラルキーのPlayerを選択してインスペクターを確認すると、下図のようになっているはずです。
このHorizontalSpeedという数字が入力できるところはメンバー変数と連動しています。また、プログラムで更新しない限りインスペクターの数字が優先されるという特性を持っています。プログラムでは初期化で3を代入してから変更していませんのでインスペクター上で数字を変えた場合、その数字が適応されます。
試しに大きくしたり小さくしたりしてプレイヤーにどのような変化があるか試してみてください。
コメント