スクリプトがアタッチ出来たのでいよいよスクリプトを編集したいと思います。編集するツールはUnity初めてであればVisual Studioがオススメですよ。
スクリプト編集の準備
スクリプトファイルはしょっしゅう開く機会があります。また編集するためのツールの設定も重要になります。しっかり設定してからスクリプト編集に臨みましょう。
スクリプトエディターの設定
スクリプトを編集するエディターを設定するためにはPreferenceエディタを開く必要があります。Windowsの場合はEdit/PreferenceからPreferenceエディタを開きます。
エディタでは左側にExternal Toolsを選択してExternal Script Editorから好きなエディタを選択することが出来ます。オススメは「Visual Studio系」がオススメです。
Visual Studiioがインストール出来てない場合は?
UnityHubからAdd Modulesを利用することでインストールすることが出来ます。
Unityエディタからスクリプトを編集するエディタを開く
スクリプトを開く方法はいくつかあります。自分がUnityで作業中によく利用するスクリプトを開く方法は3つあります。
プロジェクトビューからスクリプトファイルをダブルクリック
多分最初に利用する&一番直感的な方法がこちらだと思います。連続でファイルを編集したりする場合はこちらの方法が扱いやすいですね。
インスペクターのスクリプト名をダブルクリック
一部のスクリプトを除いてインスペクターからスクリプトを開くことが出来ます。この方法の良いところは注目していたインスペクターの表示を崩すことなくスクリプトを開くことが出来るという点です。
下図の赤く表示されたところをダブルクリックすることで対象のスクリプトを開くことが出来ます。
コンソールビューから開く
コンソールビューはエラー表示やログの表示を行ってくれるビューですが、そのログをダブルクリックすることで対象のファイルを開くことも出来ます。デバッグ時にはプログラムが処理を行ったかどうかを検出するためにログを仕込むことがしばしばあります。Unityの場合もDebug.Log(string)にてログを表示することが可能です。コンソールビューに表示されたログをダブルクリックすると該当行を指定した状態でエディタが開きます。
特にエラーログなどは開発中に非常に助けられるでしょう。
PlayerControllerを編集してプレイヤーを動かしてみる
ツールの設定や、開くための方法はバッチリでしょうか?問題なければ作成したPlayerContrllerを編集してみましょう
PlayerControllerの編集
スクリプトが編集できるようになったら、以下のように編集してください。
using UnityEngine;
public class PlayerController : MonoBehaviour
{
private Rigidbody2D m_rigidbody;
private float m_fAxisHorizontal;
private float m_fHorizontalSpeed = 3f;
void Start()
{
m_rigidbody = GetComponent<Rigidbody2D>();
}
void Update()
{
m_fAxisHorizontal = Input.GetAxisRaw("Horizontal");
}
private void FixedUpdate()
{
m_rigidbody.velocity = new Vector2(
m_fAxisHorizontal * m_fHorizontalSpeed,
m_rigidbody.velocity.y);
}
}
動作確認をしてみましょう
編集が済んだら、いざゲームを動かしてみましょう。動かす場合は画面上部の再生ボタンからプレーすることが出来ます。
ゲームが動くと左右ボタンやA/Dキーを押すことでキャラクターが左右に移動します。
ソースファイルの部分解説
ソースファイルの中身をいくつか説明したいと思います。
メンバー変数の宣言
PlayerControllerクラスのメンバー変数を宣言している部分は以下
private Rigidbody2D m_rigidbody;
private float m_fAxisHorizontal;
private float m_fHorizontalSpeed = 3f;
変数の宣言は
(アクセス修飾子) 変数の型 変数名;
という形式で宣言されます。アクセス修飾子は3種類あります。省略も可能ですが、その場合はprivateになります。
アクセス修飾子 | 備考 |
---|---|
private | 外部のスクリプトからアクセス出来ない 継承先からのアクセスも出来ません インスペクターに公開されない 省略した場合は主にこれ。 環境によって変わる可能性があるので注意 |
protected | 外部のスクリプトからアクセス出来ない 継承先からのアクセスは可能 インスペクターに公開されない |
public | 外部のスクリプトからアクセス可能 インスペクターに公開される |
プログラムを覚えたてのときはpublicで作った方がすぐにアクセス出来て便利じゃんと思うことが多いかも知れませんが、実際にはアクセス出来すぎるということは他のプログラムとの接触場所が増えて、バグを引き起こしやすい原因になることが少なくありません。なので必要最小限にpublicを使うというのが良いでしょう。(と言いつつも、便利なことには変わりないんで今回のゲーム作りではある程度使っていきます)
メソッドについて
現在のスクリプトでは3つのメソッドが作られています。いずれもUnityのライフサイクルと呼ばれるメソッドで、Unity実行時に特定のタイミングで呼ばれるものです。
メソッド | 呼ばれるタイミング |
---|---|
Start | はじめてUpdateが呼ばれる直前 |
Update | Unityのライフサイクルで毎フレーム呼ばれる 非アクティブ状態だと呼ばれません |
FixedUpdate | ライフサイクルとは別で一定間隔ごとに呼ばれる (間隔は固定の時間) 非アクティブ状態だと呼ばれません |
入力値を受け取っているところ
左右キーやADキーでキャラが水平方向に移動する入力値を受け取っている部分は以下
m_fAxisHorizontal = Input.GetAxisRaw("Horizontal");
Input.GetAxisRaw(“Horizontal”)で水平方向の入力を監視しています。詳しい設定に関しては「Edit/ProjectSettings」からウインドを開き、InputManagerタブを選択するとHorizontalでの入力がどのように決められているか確認出来ます。
プレイヤーを動かしているところ
プレイヤーキャラクターを動かしている部分はFixedUpdateです。Updateで受け取った水平方向の入力を反映しています。
private void FixedUpdate()
{
m_rigidbody.velocity = new Vector2(
m_fAxisHorizontal * m_fHorizontalSpeed,
m_rigidbody.velocity.y);
}
書き方の注意点!
上記のようなプログラムを書くと、改行まで同じ様にする人がいますが、以下のようなプログラムでもプログラムとしては同じ処理内容が実行されます。
private void FixedUpdate()
{
m_rigidbody.velocity = new Vector2(m_fAxisHorizontal * m_fHorizontalSpeed,m_rigidbody.velocity.y);
}
ソースコードはスペースで区切られたりする部分は改行を入れたり、タブでもっと間隔を開けたりしても変化しません。上記プログラムでは1画面で見やすくするために改行をしていました。しかし、プログラムのパターンによっては1行で表示しておいた方が見やすいこともあります。いずれにおいても見やすくするためにプログラムに改行を入れるなどの変更は出来るということを知っておいてください。来たるべきときに使い分けられるようになりましょう。
コメント