今回はUnityで指の動き(ドラッグ)に応じて動くオブジェクトについてです。
需要高そうですが、あまり記事が無いため記述します。
今回は、横のみの移動の実装方法を記述するので、縦もやりたい方は自由に応用してください。
色々方法あると思いますが、自分は以下の方法で実装しました。
#実装方法
以下のスクリプト(DragMove.cs)を作成して、動かしたいオブジェクトにアタッチしてください。
using UnityEngine;
public class DragMove : MonoBehaviour {
[SerializeField] private float slideSpeed = 2f; //横移動のスピード。Inspector等で設定
private void Update () {
PlayerInput ();
}
private void PlayerInput () {
//もし入力がなかったらreturnする
if (Input.touchCount <= 0) return;
if (Input.GetTouch (0).phase == TouchPhase.Moved) {
Vector2 touchPosition = Input.GetTouch (0).deltaPosition;
transform.Translate (touchPosition.x * slideSpeed * Time.deltaTime, 0, 0);
}
}
}
これで実装できます。
##移動範囲に制限を設けたい場合
移動範囲に制限を設けたい場合は
using UnityEngine;
public class DragMove : MonoBehaviour {
[SerializeField] private float slideSpeed = 2f; //横移動のスピード
private const float limitPos = 5f; //横幅の制限
private void Update () {
PlayerInput ();
}
private void PlayerInput () {
//もし入力がなかったらreturnする
if (Input.touchCount <= 0) return;
if (Input.GetTouch (0).phase == TouchPhase.Moved) {
Vector2 touchPosition = Input.GetTouch (0).deltaPosition;
transform.Translate (touchPosition.x * slideSpeed * Time.deltaTime, 0, 0);
}
//Clamp関数で制限する
transform.position = new Vector3 (Mathf.Clamp (transform.position.x, -limitPos, limitPos), transform.position.y, transform.position.z);
}
}
Mathf.Clamp関数が便利です。
こんな感じで制限できます。
#実際に確認
このコードはPC上では確認できないと思うので、
ビルドして確認するか、お手軽UnityRemoteで動作確認してください。
PCでも動くようにするには、
touchPositionの部分をInput.mousePositionにすれば動作すると思います。
こんな感じになればOKです!!