[unity3d日本語チュートリアル]玉転がしの作り方 第9回『スクリプトによるキャラクターの移動』後編

前回のチュートリアル

前回のチュートリアルでは矢印キーの入力機能を実装しました。

まだ読んでいない方はこちらからどうぞ『玉転がしの作り方 第8回『スクリプトによるキャラクターの移動』後編

今回やること

今回は入力された方向に玉が動くようにしていきます。

具体的にやることは、

1.力を加えて玉を動かす
2.スピード調整


この二つです。

それでは実際にやっていきましょう!

力を加えて玉を動かす

前回までのコード

前回のチュートリアルで作成した玉のオブジェクトに結びつけたコードは下記のようになっています。

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

public class PlayerController : MonoBehaviour {

    //一秒間に一定の回数呼ばれる
    void FixedUpdate()
    {
        // 入力をxとzに代入
        float x = Input.GetAxis("Horizontal");
        float z = Input.GetAxis("Vertical");
    }
}

Rigidbodyを取得

玉に力を加えて動かすためには、玉に付いているcomponentである『Rigidbody』を取得する必要があります。

なぜかというと、Rigidbodyに力を加えることで玉を動かすからです。

やり方としてはRIgidbody型の変数を作り、そこに玉オブジェクトに付いているRigidbodyを格納します。

実際にコードをみてみましょう。

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

public class PlayerController : MonoBehaviour {

    //一秒間に一定の回数呼ばれる
    void FixedUpdate()
    {
        // 入力をxとzに代入
        float x = Input.GetAxis("Horizontal");
        float z = Input.GetAxis("Vertical");

        //今回追加する
        Rigidbody rb = GetComponent<Rigidbody>();
    }
}

簡単に説明をすると、GetComponent()という関数はスクリプトが付いているオブジェクトのcomponentを取得します。

GetComponentの後ろにある『<>』はcomponentの種類を表しています。

ですので、GetComponent<Rigidbody>()はRigidbodyの取得という意味です。

今回は

Rigidbody rb = GetComponent<Rigidbody>();

ですので、Rigidbodyを取得してRigidbody型の変数『rb』に格納しています。

変数『rb』は適当に決めたものですので、なんでも構いません。

玉に力を加える

玉に力を加えて動かしていきます。

そのためにAddForceという関数を使います。

実際に力を加える記述をしてみます。

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

public class PlayerController : MonoBehaviour {

    //一秒間に一定の回数呼ばれる
    void FixedUpdate()
    {
        // 入力をxとzに代入
        float x = Input.GetAxis("Horizontal");
        float z = Input.GetAxis("Vertical");
        
        Rigidbody rb = GetComponent<Rigidbody>();
        //今回追加する
        rb.AddForce(x, 0, z);
    }
}

再生結果は、

スピード調整

動くようになりましたが、少し遅いですね。

加える力を増やしてみましょう。

力を増やすには、AddForceのxとzの数値を増やすことで玉に加わる力が増えます。

今回はどちらにも10を掛けることで数値を増やします。

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

public class PlayerController : MonoBehaviour {

    //一秒間に一定の回数呼ばれる
    void FixedUpdate()
    {
        // 入力をxとzに代入
        float x = Input.GetAxis("Horizontal");
        float z = Input.GetAxis("Vertical");
        
        Rigidbody rb = GetComponent<Rigidbody>();
        //今回追加する
        rb.AddForce(x*10, 0, z*10);
    }
}

再生結果は、

いい感じになりましたね!

まとめ

今回は玉に力を加えることとスピード調整をやりました。

次回はカメラ操作について扱っていきます!

次のチュートリアル

次のチュートリアルはこちらからどうぞ『玉転がしの作り方 第10回『カメラを動かす』前編