Roll-a-ball の制作(7) C#でPlayerオブジェクトの動作を記述する

Unity公式サイトのチュートリアルに沿って、

Roll a ballというサンプルゲームを制作する7回目です。

前回は、Unityエディタでスクリプトを編集するための準備として、

C#開発環境Visual Studioのインストールおよび、UnityエディタとVisual Studioの連携を行いました。

今回はC#でPlayerオブジェクトの動作を記述していきます。

 

PlayerControllerについて

最初に前回作成したPlayerControllerを開いてください。

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

public class PlayerController : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

 スクリプトを起動したときに一度だけ実行されるのがStart() メソッド、
フレームごとに呼び出されるのがUpdate() メソッド

です。

次に、このソースコード以下のように修正します。

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

public class PlayerController : MonoBehaviour
{
    private Rigidbody rb;
    private float movementX;
    private float movementY;

    // Start is called before the first frame update
    void Start()
    {
        rb = GetComponent<Rigidbody>(); 
    }

    void OnMove(InputValue movementValue)
    {
        Vector2 movementVector = movementValue.Get<Vector2>();
        
        movementX = movementVector.x;
        movementY = movementVector.y;

    }

    private void FixedUpdate()
    {
        Vector3 movement = new Vector3(movementX, 0.0f, movementY);

        rb.AddForce(movement);
    }

}

上記のソースコードについて簡単に説明します。

最初にStrat()メソッドでは、

rd = GetComponent<RigidBody>();

としています。

これによって、以降変数rbを通じてRigidBodyのコンポーネントにアクセスできるようになります。

さて、Unityには、
何かアクションを起こしたときに呼び出されるイベントトリガーという機能があります。

OnMoveはこのUnityのイベントトリガーで呼び出される関数の1つで、Moveイベントが発生したとき、つまりオブジェクトが動いたときに呼び出される関数です。

OnMove()関数では、入力された値をmovementXとmovementYの変数にそれぞれ格納します。

 

デフォルトで用意されているUpdate()とFIxedUpdate()の違いは、

前者がフレームごとに呼び出されるのに対して、後者は一定時間ごとに呼び出されるというところです。

FixedUpdate()の中で、

rd.AddForce(movement);

としていますが、これはRigidbody に力を加える処理です。

このことによって、Playerオブジェクトは入力された値で動くようになります。

  

実際にPlayerオブジェクトを動かしてみる

実際にPlayerオブジェクトを動かしてみます。

Unityエディタの▶のボタンを押して再生モードにします。

f:id:Yamakawa-Yoshi:20200816232716j:plain

キーボードの矢印キーでPlayerが動いたでしょうか?

(注!)動かなかった人は、Input Systemでキーボードが通知されていない可能性があります。プロジェクト設定のInput System Packageでデバイスを追加しておくとキーボードがきくようになるかもです。

f:id:Yamakawa-Yoshi:20200816232801p:plain

 

今回はここまでにします。

次回はPlayerオブジェクトの移動スピードを変更していきます。

 

#Unity #ゲーム制作