Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
public class Spline : MonoBehaviour {
public Transform start,mid,end;
public float t=0.1f;
private LineRenderer lr;
private int j=0;
private float tmp;
public Transform rot;
private Vector3[] v3;
public float speed=0.001f;
// Use this for initialization
void Start () {
j = int.Parse((1/t).ToString());
lr=(LineRenderer)GetComponent("LineRenderer") as LineRenderer;
lr.SetWidth(0.5f,0.5f);
lr.SetColors(Color.white,Color.white);
lr.SetVertexCount(j);
tmp=t;
v3=new Vector3[100];
rot.position=start.position;
}
// Update is called once per frame
void Update () {
if(Input.GetKeyDown(KeyCode.F))
go();
}
void go()
{
for(int i = 0; i<j; i++)
{
Vector3 temp = Mathf.Pow((1-tmp),2)*start.position+2*tmp*(1-tmp)*mid.position+Mathf.Pow(tmp,2)*end.position;
v3[i]=temp;
tmp+=t;
}
tmp=t;
StartCoroutine(move());
}
IEnumerator move()
{
for(int i = 0; i<j;i++)
{
rot.position=Vector3.Lerp(rot.position,v3[i],1);
lr.SetPosition(i,v3[i]);
yield return new WaitForSeconds(speed);
}
}
}
using System.Collections;
public class Spline : MonoBehaviour {
public Transform start,mid,end;
public float t=0.1f;
private LineRenderer lr;
private int j=0;
private float tmp;
public Transform rot;
private Vector3[] v3;
public float speed=0.001f;
// Use this for initialization
void Start () {
j = int.Parse((1/t).ToString());
lr=(LineRenderer)GetComponent("LineRenderer") as LineRenderer;
lr.SetWidth(0.5f,0.5f);
lr.SetColors(Color.white,Color.white);
lr.SetVertexCount(j);
tmp=t;
v3=new Vector3[100];
rot.position=start.position;
}
// Update is called once per frame
void Update () {
if(Input.GetKeyDown(KeyCode.F))
go();
}
void go()
{
for(int i = 0; i<j; i++)
{
Vector3 temp = Mathf.Pow((1-tmp),2)*start.position+2*tmp*(1-tmp)*mid.position+Mathf.Pow(tmp,2)*end.position;
v3[i]=temp;
tmp+=t;
}
tmp=t;
StartCoroutine(move());
}
IEnumerator move()
{
for(int i = 0; i<j;i++)
{
rot.position=Vector3.Lerp(rot.position,v3[i],1);
lr.SetPosition(i,v3[i]);
yield return new WaitForSeconds(speed);
}
}
}
в сцене 3 кубика, 1 сфера и 1 объект с LineRenderer. В скрипте рассчитывается кривая по формуле квадратичной кривой Безье. Точек на этой кривой я поставил 100, после расчета всех точки заносятся в массив, а после этого в IEnumerator move() мне хотелось бы отрисовывать линию и двигать сферу по точкам кривой с определенной скоростью, но минимальная пауза в WaitForSeconds по-ходу = 0.01, и если у меня 100 точек, то линия отрисовываться должна 1 секунду, но это как-то медленно, а быстрее сделать хз как, ибо если поставить 0.001, то скорость не меняется =\