1. 程式人生 > >使用第三方外掛Curvy為unity場景快速生成運動軌跡與賽道

使用第三方外掛Curvy為unity場景快速生成運動軌跡與賽道

原文連結:http://blog.csdn.net/cordova/article/details/52215079
Curvy是一個非常強大的第三方外掛,用於在unity中快速生成遊戲軌道,關於此外掛的教程網上幾乎找不到,官方的視訊教程是一個講法式英語的人講的,不但視訊模糊讓人聽的簡直爆炸,我反正聽了一半差點砸電腦了,最後主要還是靠折騰demo結合視訊把主要的用法弄明白了。這裡結合官方demo中的幾個介紹這個外掛的用法,其實很簡單,學會後可以輕鬆拖出一條甚至多條複雜的軌跡,然後可以讓物體沿著軌跡運動,更強大的是可以在軌跡上動態生成相應的賽道和軌道,可以控制剛體在軌道上自由運動。

先上幾張官方demo炫酷效果的高清截圖:
這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述
(1) 第一張圖是官方demo的第一個SplineController.sence,展示了飛行器擾簡單的圓軌跡迴圈運動;
(2) 第二張圖展示了生成軌跡並聲稱軌跡對應的軌道,飛行器沿軌跡在軌道內穿梭;
(3) 第三張圖展示了生成軌跡軌道,並控制一個剛體在軌道上自由滾動;

一、匯入外掛

在工程中選擇custom package,匯入curvy外掛,我這裡有個v2.0.2版本的curvy外掛供下載,這是個付費外掛,還挺貴的,免費送大家:https://pan.baidu.com/s/1i4SYJHV 如果下載不了請回復郵箱地址我發給您。
這裡寫圖片描述
匯入外掛後可看到一個packages的資料夾裡面有以下內容,其中有很多demo場景:
這裡寫圖片描述


可以執行demo看一下可以實現那些效果,還是很炫酷的。

二、製作Spline運動軌跡

1.新建一個場景,會發現匯入外掛後工程中的場景scene窗口出現一些操作按鈕:
這裡寫圖片描述
2.生成軌跡

最快的方法就是直接點選scene場景中上面按鈕的最後一個Draw Spline按鈕,然後選擇軌跡的方向,一般選擇第二個y軸朝上。選擇後會有提示通過按住control鍵然後在scene場景中新增控制點,可以新增多個控制點,可以拖動控制點改變生成軌跡的形狀,與此同時會發現project面板中已經生成了相應的元素:軌跡和軌跡下的控制點;
這裡寫圖片描述
控制點之間的插值有三種選擇,linear線性插值就是控制點之間用直線連結,另外還有兩種曲線插值必入塞北爾曲線,根據需要進行選擇;

控制點生成的曲線軌跡可以選擇閉合或不閉合;
這裡寫圖片描述
3.新增沿軌跡運動的遊戲物體

軌跡製作好後現在新增沿軌跡運動的遊戲物體,比如最簡單的新增一個圓球。外掛demo中提供了一個繫結物體和spline軌跡物件的指令碼,在project面板搜尋splinecontroller指令碼,拖動到圓球物體上,然後將上面製作好的curvy spline拖動賦給splinecontroller中的變數進行繫結,同時設定一下運動速度speed,預設是0看不到效果,然後執行一下就可以看到圓球沿著軌跡開始移動了。當然這個指令碼的功能是可以自定義的,繼承自curvycontroller指令碼。
這裡寫圖片描述

三、根據Spline軌跡生成封閉運動軌道(重點來了,generator的使用!)

上面只是利用spline軌跡控制物體運動,但實際上有了這條軌跡資料,我們可以生成相應的跑道,賽道等等,甚至可以利用這條軌跡資料生成任何想要的軌跡形狀的物體場景。

軌道的生成此外掛提供了一個generator編輯器,在spline軌跡提供形狀資料的基礎上,新增材質資料模組,軌道橫截面編輯模組來自由控制賽道的形狀狀態和材質。

1.新建generator元件

首先右鍵(最好就在curvy spline下新建作為子物體了) –>curvy –> generaotr新建一個generaotr物件,當然也可以點選sence視窗中的按鈕新建,此時generator下是空的,滑鼠選中generator後,會發現sense窗口出現了edit按鈕,點選edit開啟generaotr編輯視窗;
這裡寫圖片描述
由於generator還是空的,所以編輯視窗空空如也,此時右鍵新增一個基本的shape extrusion模板,會發現編輯窗口出現了五個邏輯連線的小視窗,同時會到hierarchy視窗會發現generator物件下出現了相應的子物體,現在就可以進行編輯軌道了;
這裡寫圖片描述
2.軌道的軌跡形狀繫結

新建模板後會發現從input spline path連結出來的視窗標題是紅色的,那是因為後面的三個視窗都用到了第一個視窗的path軌跡資料來生成軌道,由於還沒有繫結軌跡所以紅色警告。將之前做好的spline軌跡物件拖到input spline path面板對應的引用上即可,
這裡寫圖片描述
也可以在hierarchy視窗拖入繫結,兩邊可以相互結合對應來設定調整;

3.軌道橫截面設定

有了軌跡資料後便有了製作軌道的軌跡形狀,現在通過input spline shape來製作軌道的橫截面。橫截面的製作方法和spline的軌跡類似,可以是閉合的中空曲線截面,也可以是開放的。橫截面可以選擇已有的規則形狀,比如:圓形,矩形等等,設定相應的控制點個數,半徑大小等等,也可以選中freedom來通過多個控制點來製作自由曲線橫截面;
這裡寫圖片描述
通過移動橫截面控制點的位置來調整橫截面的形狀,控制點可以通過contrl+d來複制新增,橫截面是一個平面圖形,所以一般在2d模式下設定,
這裡寫圖片描述
編輯時最好在show gizmos打勾顯示橫截面形狀方便編輯:
這裡寫圖片描述
注意:橫截面曲線只有它的形狀對軌跡起作用,其位置在哪裡無任何影響。

4.軌道材質設定

軌道的材質通過volme mesh物件來設定,可以新增多個材質,選中mat0,更改材質即可:
這裡寫圖片描述
注意:上面的設定改變後不會立刻看到效果,需要執行工程或者輕微調整spline軌跡的控制點來出發軌道的更新顯示。

如下圖是一個橫截面閉合的簡單管道型的中空軌道:
這裡寫圖片描述
@擴充套件:實際上可以利用一條spline軌跡,在同一個generator下新增其下的多個模板組建,通過多個橫截面組合更復雜的軌道橫截面形狀。

四、生成開放軌道和自由運動的剛體

這裡只做一個開放的軌道,並製作一個可以自由運動的剛體在開放軌道上自由活動,也就是文章開始截圖三足球在軌道上滾動的效果,外掛中rigidbody demo提供了展示。

這時需要將橫截面做成一個凹槽狀,從而只做一個凹槽軌道,另外可以通過還沒有用過的其他兩個面板來調整軌道的形態,而不是寬度始終一致粗細均勻,可以讓軌道歲曲線粗細變化顯得更自然。然後新增一個自由運動的剛體測試軌道。
這裡寫圖片描述

五.實時計算物體與spline軌跡最近的點座標

外掛提供函式用來計算場景中spline軌跡上離某個物體最近的點,通過這個點可以計算物體偏離軌道的程度。比如競速遊戲可以實現實時計算賽車偏離軌道的距離,還可以通過軌道上最近的點座標對賽車進行復位,使其回到軌道上。此功能外掛的NearestPoint的demo中有展示。

實時獲取最近點的方法如下:

    public CurvySpline Spline; // spline軌跡物件  
    public transform target; //計算偏離的物體,比如賽車  

    if (Spline && Spline.IsInitialized && target) //保證spline和target存在  
    {  

        // 將target的座標轉換到spline所在的本地座標系  
        var targetPos = Spline.transform.InverseTransformPoint(target.position);  
        // 獲得target在spline上的最近點的TF值  
        float nearestTF=Spline.GetNearestPointTF(targetPos);  
        // 轉換到世界座標系的spline上最近點的座標值  
        var nearestPos = Spline.transform.TransformPoint(Spline.Interpolate(nearestTF));  
    }  

記得在指令碼中新增curvy的namespace。 重點內容