using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Textsss : MonoBehaviour
{
public Transform fireTran;
public Transform middleTran1;
public Transform middleTran2;
public Transform middleTran3;
public Transform topTran;
List<Transform> lt = new List<Transform>();
void Start()
{
lt.Add(fireTran);
print(fireTran.position);
lt.Add(middleTran1);
lt.Add(middleTran2);
lt.Add(middleTran3);
lt.Add(topTran);
}
float t;
void Update()
{
RotaToEnd();
if (t < 1)
{
t += 0.03f;
Debug.Log(t);
fireTran.position = Bezier1(t, lt);
}
if (t>1)
{
fireTran.gameObject.SetActive(false);
}
// fireTran.position = Bezier1(t, lt);
}
// n阶曲线,递归实现
public Vector3 Bezier(float t, List<Vector3> p)
{
if (p.Count < 2)
return p[0];
List<Vector3> newp = new List<Vector3>();
for (int i = 0; i < p.Count - 1; i++)
{
Vector3 p0p1 = (1 - t) * p[i] + t * p[i + 1];
newp.Add(p0p1);
}
return Bezier(t, newp);
}
// transform转换为vector3,在调用参数为List<Vector3>的Bezier函数
public Vector3 Bezier1(float t, List<Transform> p)
{
if (p.Count < 2)
return p[0].position;
List<Vector3> newp = new List<Vector3>();
for (int i = 0; i < p.Count; i++)
{
newp.Add(p[i].position);
}
return Bezier(t, newp);
}
public void RotaToEnd()
{
Vector3 target_pos = topTran.position;
Vector3 my_pos = fireTran.transform.position;
Vector3 from = Vector3.up;
Vector3 to = target_pos - my_pos;
fireTran.transform.rotation = Quaternion.FromToRotation(from, to);
// Debug.Log(fireTran.transform.rotation);
}
}