unity繪制一條流動的弧線(貝塞爾線)
本文實例為大家分享了unity繪制一條流動弧線的具體代碼,供大家參考,具體內(nèi)容如下
最終效果
把下面腳本復(fù)制,直接拖上腳本,設(shè)置兩個點(物體)的位置
GameObject1是開始點的位置,GameObject2是結(jié)束點的位置
public Transform[] controlPoints; public LineRenderer lineRenderer; public float centerPoint =0.1f; private int layerOrder = 0; //生成弧線中間的點數(shù) private int _segmentNum = 20; //偏移 float m_offset; float m_speed = 0.5f; void Start() { if (!lineRenderer) { lineRenderer = GetComponent<LineRenderer>(); } lineRenderer.sortingLayerID = layerOrder; //調(diào)用畫貝斯?fàn)柧€ GetBeizerList(controlPoints[0].position, (controlPoints[0].position + controlPoints[1].position) * 0.5f + new Vector3(0, centerPoint, 0), controlPoints[1].transform.position, _segmentNum); } private void Update() { m_offset = m_offset - m_speed * Time.deltaTime; //控制offset使材質(zhì)移動 GetComponent<LineRenderer>().material.mainTextureOffset = new Vector2(m_offset, 0); } /// <summary> /// 根據(jù)T值,計算貝塞爾曲線上面相對應(yīng)的點 /// </summary> /// <param name="t"></param>T值 /// <param name="p0"></param>起始點 /// <param name="p1"></param>控制點 /// <param name="p2"></param>目標(biāo)點 /// <returns></returns>根據(jù)T值計算出來的貝賽爾曲線點 private static Vector3 CalculateCubicBezierPoint(float t, Vector3 p0, Vector3 p1, Vector3 p2) { float u = 1 - t; float tt = t * t; float uu = u * u; Vector3 p = uu * p0; p += 2 * u * t * p1; p += tt * p2; return p; } /// <summary> /// 獲取存儲貝塞爾曲線點的數(shù)組 /// </summary> /// <param name="startPoint"></param>起始點 /// <param name="controlPoint"></param>控制點 /// <param name="endPoint"></param>目標(biāo)點 /// <param name="segmentNum"></param>采樣點的數(shù)量 /// <returns></returns>存儲貝塞爾曲線點的數(shù)組 public Vector3[] GetBeizerList(Vector3 startPoint, Vector3 controlPoint, Vector3 endPoint, int segmentNum) { Vector3[] path = new Vector3[segmentNum]; for (int i = 1; i <= segmentNum; i++) { float t = i / (float)segmentNum; Vector3 pixel = CalculateCubicBezierPoint(t, startPoint, controlPoint, endPoint); //設(shè)置lineRenderer的control Points lineRenderer.positionCount = i; lineRenderer.SetPosition(i - 1, pixel); //存儲Point path[i - 1] = pixel; Debug.Log(path[i - 1]); } return path; }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#短時間內(nèi)產(chǎn)生大量不重復(fù)的隨機(jī)數(shù)
在C#編程中,經(jīng)常會碰到產(chǎn)生隨機(jī)數(shù)的情況,并且是在短時間內(nèi)產(chǎn)生一組隨機(jī)數(shù)。如果這組隨機(jī)數(shù)中有大量重復(fù)的,則達(dá)不到我們的要求2013-02-02Unity中協(xié)程IEnumerator的使用方法介紹詳解
本文主要介紹了Unity中協(xié)程IEnumerator的使用方法介紹詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06C#使用FtpWebRequest與FtpWebResponse完成FTP操作
這篇文章介紹了C#使用FtpWebRequest與FtpWebResponse完成FTP操作的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05C#使用SqlConnection連接到SQL Server的代碼示例
這篇文章主要介紹了C#使用SqlConnection連接到SQL Server的代碼示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03Winform窗體縮放下使用剪切板功能出現(xiàn)頁面閃動解決分析
這篇文章主要介紹了Winform窗體縮放下使用剪切板功能出現(xiàn)頁面閃動解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11C#?從字符串中分離文件路徑、文件名及擴(kuò)展名的操作
在C#中,處理文件時經(jīng)常需要分離文件路徑、文件名和擴(kuò)展名,通過使用Microsoft.Win32命名空間和字符串處理方法如Substring、IndexOf()和LastIndexOf(),可以有效地獲取和操作這些信息,本文介紹C#?字符串中分離文件路徑,感興趣的朋友一起看看2024-09-09