- 新建一个GameObject,然后挂载脚本BezierPipe;
- 新建GameObject (1)和GameObject (2),position分别设置为(0,0,0)和(0,0,1);
- 将GameObject (1)和GameObject (2)拖入脚本BezierPipe中,如图所示;
- 勾选上Update;
- 场景中生成软管模型;
6. 创建材质球拖入MeshRenderer中;
using UnityEngine;
using System.Collections.Generic;
public struct BezierLineSegment
{
public Vector3 fromPoint;
public Vector3 toPoint;
public Vector3 controlPoint;
public Quaternion fromDir;
public Quaternion toDir;
public void CalculateDir()
{
fromDir = Quaternion.FromToRotation(Vector3.forward, controlPoint - fromPoint);
toDir = Quaternion.FromToRotation(Vector3.forward, toPoint - controlPoint);
}
public bool IsStraight()
{
return fromDir == toDir;
}
}
public class Bezier
{
public static Vector3 GetPoint(Vector3 p0, Vector3 p1, Vector3 p2, float t)
{
t = Mathf.Clamp01(t);
float oneMinusT = 1f - t;
return oneMinusT * oneMinusT * p0 + 2f * oneMinusT * t * p1 + t * t * p2;
}
}
/// <summary>
/// 软管处理
/// </summary>
[ExecuteInEditMode]
[RequireComponent(typeof(MeshRenderer))]
[RequireComponent(typeof(MeshFilter))]
public class BezierPipe : MonoBehaviour
{
public float cornerScale = 1f;
[Range(1, 100