こどもから目指すゲーム開発者 #10『Unityでキャラを動かす1』

こんにちは。KTです。

今回はキャラクター下のように左右キーを使って動かせるようにします。

・←キーで左に動ける
・→キーで右に動ける

キャラクターを動かす

まずは下の図のようにAssetsで右クリックしてCreate>Folderを選択しましょう。
フォルダの名前は「Scripts」としてください。

・script:スクリプト。脚本。簡易なプログラムをそう呼ぶことが多い。

ScriptsフォルダができたらScriptsフォルダをダブルクリックしてください。
そして下の図のようにAssets>Scripts内で右クリックしてCreate>C# Scriptを選択してください。ファイルの名前は「Player」としてください。

スクリプトは絵の状態や動きをプログラミングするものです。
ここにプレイヤーキャラクターの動きをプログラミングしていきます。

まずはこのPlayerスクリプトとPlayerの絵を紐づけて「PlayerスクリプトはPlayerの絵を動かすスクリプトです」と設定します。

下の図のようにPlayerスクリプトをHierarchyのPlayerオブジェクトにドラッグアンドドロップしてください。
※赤い丸のPlayerスクリプトをクリックしながら移動して赤い四角で囲まれたPlayerに重ねてクリックを離してください。

PlayerオブジェクトのInspectorにPlayer(Script)というComponentが追加されてPlayerスクリプトが設定されました。

これでオブジェクト(絵)とスクリプト(動き)の紐づけができました。

ではPlayerスクリプトに動きをプログラミングしていきます。
Playerスクリプトをダブルクリックしてください。すると下のような画面が立ち上がると思います。

これはVisual Studio(ヴィジュアルスタジオ)という名前のプログラミングをするためのソフトウェアです。
Visual Studioはプログラミング言語であるC#(シーシャープ)に特化しているので今回はこれを使ってC#のプログラミングをしていきます。

ではスクリプトの中身を見ていきます。
下の図にざっくりとした説明を入れましたが、厳密には異なる説明が多々あります
詳しく知りたい方はプログラミングの専門書などで調べていただければ幸いです。

兎にも角にも重要なのはStart()Update()です。
ここに自分のやりたい(動かしたい)プログラムを書くだけです。
start:スタート。開始。
update:アップデート。更新。

今回やりたいことは下の二つです。
・←キーで左に動ける
・→キーで右に動ける

ここでScratchでやったことを思い出してほしいのですが、やはりここでも
「←キーを押されたとき左に動く」
「→キーを押されたとき右に動く」
とプログラミングするのです。

キーが押されたかどうかは常に見張っていないといけないのでUpdate()にプログラミングします。

注意:プログラムの書き方は千差万別でありますがプロのプログラマーであればプログラミングの最適化をするということは重々承知の上で、あくまで分かりやすいを最優先でプログラミングしていくことをご理解お願いいたします。m(_ _”m)

プログラムの例を書きます。
※プログラム内の「//」はコメント(メモ)であり記述しても無視されます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour
{
    // RigidBody2Dが入るrbodyという記号を用意します。
    Rigidbody2D rbody;

    // Start is called before the first frame update 最初だけカッコ内のプログラムが流れます。
    void Start()
    {
        // プレイヤーキャラクターに設定したRigidBody2Dをrbodyに入れます。
        rbody = GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame 1フレームごとにカッコ内のプログラムが流れます。
    void Update()
    {
        // floatは後述の記号は数値しか入れられない意味。xに←キーが押されたら-1、→キーが押されたら1、何も押されてない場合は0が代入されます。
        float x = Input.GetAxisRaw("Horizontal");

        // float xのxです。キーが押されていない場合、カッコ内のプログラムが動きます。
        if (x == 0)
        {
            // キャラクターのx軸方向に0のスピードを加えます。(停止)
            rbody.velocity = new Vector2(0, rbody.velocity.y);
        }

        // float xのxです。←キーが押された場合、カッコ内のプログラムが動きます。
        if (x == -1)
        {
            // キャラクターのx軸方向に-5のスピードを加えます。(左に移動)
            rbody.velocity = new Vector2(-5, rbody.velocity.y);
            // キャラクターの絵を左向きにします。
            transform.localScale = new Vector2(-1, 1);
        }

        // float xのxです。→キーが押された場合、カッコ内のプログラムが動きます。
        if (x == 1)
        {
            // キャラクターのx軸方向に5のスピードを加えます。(右に移動)
            rbody.velocity = new Vector2(5, rbody.velocity.y);
            // キャラクターの絵を右向きにします。
            transform.localScale = new Vector2(1, 1);
        }
    }
}

大体の説明はプログラム内のコメントに記述しておきます。

次にプログラムを下の赤矢印が指すボタンを押してコピーしてください。

画像に alt 属性が指定されていません。ファイル名: image-18.png

スクリプトでCtrl+Aを押します。(全選択)

そしてCtrl+Vで貼り付けます。

PlayerオブジェクトとPlayerスクリプトはComponentで紐づいていることを思い出してください。
その上でプログラムを説明します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

すでにVisualStudioやUnityが用意したプログラム群を使います。

public class Player : MonoBehaviour
{
・・・
}

Playerクラス(という名前のまとまり)です。

Rigidbody2D rbody;
Rigidbody2Dを入れることができる記号「rbody」を宣言(プログラム内で使います)します。
記号の名前をrbodyと付けましたがなんでもいいです。
Start()やUpdate()で使うのでStart()やUpdate()の{}の外で宣言します。

void Start()
{
・・・
}

Update前の最初だけ{}内のプログラムが流れます。

rbody = GetComponent<Rigidbody2D>();
紐づいているオブジェクト(ここではPlayer)のRigidbody2Dを取得(GetComponent)してrbodyに入れます。

void Update()
{
・・・
}

毎フレームごとに{}内のプログラムが流れます。

float x = Input.GetAxisRaw(“Horizontal”);
floatは小数を含む数値が入るという意味の記号「x」を宣言します。
記号の名前をxと付けましたがなんでもいいです。
また、Horizontal(水平(左右))の入力(Input)の状態を取得(GetAxisRow)します。
つまり、xに←キーが押されたら「-1」、→キーが押されたら「1」、何も押されてない場合は「0」が入ります。

if (x == 0)
{
・・・
}
もし()内の条件であるならば{}内のプログラムが流れます。これはxが0の場合。
上で説明したようにxに←キーが押されたら「-1」、→キーが押されたら「1」、何も押されてない場合は「0」が入る場合があるのでif~が三つあります。

rbody.velocity = new Vector2(0, rbody.velocity.y);
rbodyにはPlayerオブジェクトのRigidbody2Dが入っています。
rbody.velocityはRigidbody2Dの速さ(velocity)です。
velocityに値を設定するにはVector2という形で入れなければなりません。
newはおまじないとしておきます(汗)。
x軸方向の速さに0、y軸方向の速さにもともとの速さrbody.velocity.yを設定します。
他のif~内も同様です。

transform.localScale = new Vector2(-1, 1);
transform.localScaleはUnity画面でPlayerオブジェクトのComponentにtransformという項目があり、Scaleという設定値があります。それと同じです。
transform.localScaleにVector2という形で左向きであればxを-1、yを1に設定します。
右向きであればxを1、yを1に設定します。

難しいですね。説明しづらくて申し訳ないですm(_ _”m)

とりあえずプログラムをそのままコピーして貼り付けていただければ大丈夫です。

プログラミングが終わりましたら下の赤枠の保存ボタンを押してください。

Unityの画面に戻ってゲームを実行してみてください。
方向キーの左右を押すとキャラクターが動くと思います。

UnityもVisualStudioも保存を忘れずに行ってください。
次回はジャンプについて説明したいと思います。
(こども向けとは(;’∀’))

タイトルとURLをコピーしました