using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
using System;
public class Rota : MonoBehaviour
{
public GameObject player;
public GameObject prefab;
public GameObject other;
private void Start()
{
BeiSaiErMove();
}
public void BeiSaiErMove()
{
List<Vector3> list = new List<Vector3>();
//集合中第一个是其实位置,也是在即当前所在位置
list.Add(player.transform.position);
float ang = 2 * Mathf.PI / 10;
for (int i = 0; i < 20; i++)
{
float x = Mathf.Sin(i * ang) * (float)i / 2f;
float y = Mathf.Cos(i * ang) * (float)i / 2f;
float z = player.transform.position.z * (1 - (float)i / 40f) + other.transform.position.z * (i) / 40f;
list.Add(new Vector3(x, y, z));
}
for (int i = 0; i < 20; i++)
{
float x = Mathf.Sin(i * ang) * (float)(20 - i) / 2f;
float y = Mathf.Cos(i * ang) * (float)(20 - i) / 2f;
float z = player.transform.position.z * (1 - (float)(i + 20) / 40f) + other.transform.position.z * (i + 20) / 40f;
list.Add(new Vector3(x, y, z));
}
list.Add(other.transform.position);
GameObject ph0 = Instantiate(prefab);
Destroy(ph0, 5f);
DOTween.To((t) =>
{
ph0.transform.position = BesselCurve(list.ToArray(), t);
}, 0, 1, 3).OnComplete(() =>
{
print("打完了");
});
}
public Vector3 BesselCurve(Vector3[] pos, float t)
{
Vector3[] arr = new Vector3[pos.Length - 1];
for (int i = 0; i < arr.Length; i++)
{
arr[i] = pos[i] * (1 - t) + pos[i + 1] * t;
Debug.DrawLine(pos[i], pos[i + 1], Color.red, 10);
}
if (arr.Length == 1)
{
return arr[0];
}
else
{
return BesselCurve(arr, t);
}
}
}