[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回『カメラを動かす』前編』