Vector3.Lerp()を使用するのはどうでしょう。
中間点と次の中間点との距離をあらかじめ計算してListに入れておき、Lerp()の第3引数をその距離で割ってやれば、等速の移動を実現できると思います。
public class Move : MonoBehaviour {
private Vector3[] Positions= { new Vector3(0,0,0),new Vector3(1,0,0),new Vector3(10,0,0),new Vector3(10,20,0),new Vector3(0,0,0)};
private List<float> Distances;//距離を入れるList
public int speed;//この値を変えれば移動速度を変えられます
private int count;
private float timer;
// Use this for initialization
void Start () {
Distances = new List<float>();
for(int x = 0; x < Positions.Length-1; x++)
{
var d = (Positions[x + 1] - Positions[x]).magnitude;
Distances.Add(d);//距離をDistancesに格納
}
}
// Update is called once per frame
void Update () {
MoveLerp();
}
public void MoveLerp()
{
if (count == Positions.Length-1)
{
return;//移動停止
}
transform.position = Vector3.Lerp(Positions[count], Positions[count + 1], timer);
timer += (speed * Time.deltaTime / Distances[count]);
if (transform.position == Positions[count + 1])
{
count++;
timer = 0;
}
}
}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/15 03:44