オブジェクトを滑らかに追随させる
指で画面をスライドしたら追随するようにしたい
こんな感じ
とりあえず考えてみる
タップ中の処理だからUpdate関数内でInput.GetMouseButton(0)がtrueのときに処理させれば良さそう。
毎フレームごとにVector3.Lerp( )で線形補完すればいい感じ()で滑らかになるのでは??ということでコード
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BallMove : MonoBehaviour { Vector3 startPos; Vector3 endPos; Vector3 tapPos; public float speed; void Update() { if(Input.GetMouseButton(0)) { startPos = transform.position; tapPos = Input.mousePosition; tapPos.z = 10.0f; // スクリーン座標からワールド座標に変換 endPos = Camera.main.ScreenToWorldPoint(tapPos); // 線形補完的に移動させる transform.position = Vector3.Lerp(startPos, endPos, speed * Time.deltaTime); } } }
とすると上のgifのような動きになった。(speedは良い感じに調整してください)
startPosにそのフレーム時点でのオブジェクトの位置、endPosをスマホでタップした位置としてその間をVector3.Lerp( )で移動させた感じ。Input.mousePositionでタップした位置を受け取れるがこれはスクリーン座標なのでScreenToWorldPointでワールド座標に変換してから使おう
せっかくなのでこれをボール転がしに使ってみる
移動制限を追加したコード
if(Input.GetMouseButton(0)) { startPos = transform.position; tapPos = Input.mousePosition; tapPos.z = 10.0f; // スクリーン座標からワールド座標に変換 endPos = Camera.main.ScreenToWorldPoint(tapPos); // 移動制限 endPos.x = Mathf.Clamp(endPos.x, -4.5f, 4.5f); endPos.y = 1; // 線形補完的に移動させる transform.position = Vector3.Lerp(startPos, endPos, speed * Time.deltaTime); }
Mathf.Clamp( )は
範囲内に収めたい値 = Mathf.Clamp(範囲内に指定したい値,最小値,最大値);
的な感じで使う(多分)
今回はボールがステージから飛び出さないようX座標を-4.5~+4.5に収めるために使った。シンプルな避けゲーに使えそう