Joystick Packを導入してとりあえずJoystickの動きを以下のように使っていた。
「Unity – Joystickを使ってみる –」
this.transform.Translate(joystick.Horizontal, 0f, 0f);
joystick.Horizontal は -1~1 の値を返す。
壁で囲った範囲は-25~25なのにBarは画面から消えるほど遠くまで動く。
ここまで来てやっとtransform.Translateって何なのかを調べる。
移動したい距離を引数に与えるんだって。
だから、どんどん加算されて範囲を超えて移動する。
当たり前だな、使う前に調べよう。
で、方法はいくつかある。
そのままtransform.Translateを使うけど現在位置が-25~25から外れたら処理して留める方法。
Joystickの-1~1を-25~25に換算した後で位置そのものを指定する方法。
2つ目の方法が transform.position だ。
こっちをやってみる。
ここでこんなサンプルを見せていただいたので拝借する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// オブジェクトに紐付いている関数 public class MainCharacter : MonoBehaviour { // 更新用の関数 void Update() { // transformを取得 Transform myTransform = this.transform; // 座標を取得 Vector3 pos = myTransform.position; pos.x += 0.01f; // x座標へ0.01加算 pos.y += 0.01f; // y座標へ0.01加算 pos.z += 0.01f; // z座標へ0.01加算 myTransform.position = pos; // 座標を設定 } } |
上の一行の代わりに以下のようにした。
1 2 3 4 5 6 7 |
// transformを取得 Transform myTransform = this.transform; // 座標を取得・換算 Vector3 pos = myTransform.position; pos.x = joystick.Horizontal * 25; // 座標を設定 myTransform.position = pos; |
違いを動画で。