using UnityEngine;
using System.Collections;
//using Vectrosity;
using System.Collections.Generic;
public class DrawCurveTest : MonoBehaviour
{
public Material lineMat;
public int segment=20;
//VectorLine line;
public Transform[] poss = new Transform[3];
List m_points3;
public GameObject cubePrefab;
public LineRenderer lineRenderer;
public Color c1 = Color.yellow;
public Color c2 = Color.red;
// Use this for initialization
void Start()
{
lineRenderer = GetComponent();
lineRenderer.material = lineMat;
lineRenderer.SetColors(c1, c2);
lineRenderer.SetWidth(0.5F, 0.5F);
lineRenderer.SetVertexCount(segment);
}
void CmakeCurve(Vector3 anchor1, Vector3 control1, Vector3 anchor2, Vector3 control2, int segments)
{
m_points3 = new List(segment);
for (int i = 0; i < segment; i++)
{
Vector3 pp= GetBezierPoint3D(ref anchor1, ref control1, ref anchor2, ref control2, (float)i / segments, cubePrefab);
m_points3.Add(pp);
}
}
private static Vector3 GetBezierPoint3D(ref Vector3 anchor1, ref Vector3 control1, ref Vector3 anchor2, ref Vector3 control2, float t,GameObject go)
{
float cx = 3 * (control1.x - anchor1.x);
float bx = 3 * (control2.x - control1.x) - cx;
float ax = anchor2.x - anchor1.x - cx - bx;
float cy = 3 * (control1.y - anchor1.y);
float by = 3 * (control2.y - control1.y) - cy;
float ay = anchor2.y - anchor1.y - cy - by;
float cz = 3 * (control1.z - anchor1.z);
float bz = 3 * (control2.z - control1.z) - cz;
float az = anchor2.z - anchor1.z - cz - bz;
// Vector3 pop=new Vector3((ax * (t * t * t)) + (bx * (t * t)) + (cx * t) + anchor1.x,
// (ay * (t * t * t)) + (by * (t * t)) + (cy * t) + anchor1.y,
// (az * (t * t * t)) + (bz * (t * t)) + (cz * t) + anchor1.z);
// Instantiate(go, pop, Quaternion.identity);
//return pop;
return new Vector3((ax * (t * t * t)) + (bx * (t * t)) + (cx * t) + anchor1.x,
(ay * (t * t * t)) + (by * (t * t)) + (cy * t) + anchor1.y,
(az * (t * t * t)) + (bz * (t * t)) + (cz * t) + anchor1.z);
}
// Update is called once per frame
void Update()
{
CmakeCurve(poss[0].position, poss[1].position, poss[2].position, poss[2].position, segment);
int i = 0;
while (i < m_points3.Count)
{
//Vector3 pos = new Vector3(i * 0.5F, Mathf.Sin(i + Time.time), 0);
lineRenderer.SetPosition(i, m_points3[i]);
i++;
}
}
}
Unityは、ベジェ曲線の3つのスクリプトを生成し、
おすすめ
転載: blog.csdn.net/gcj2450/article/details/51829628
おすすめ
ランキング