Obi Rope 教學

Obi Rope 是一套支援 Unity 遊戲引擎的繩索製作工具, 完全控制繩索的形狀與行為,繩索將可以跟場景的其他物件產生碰撞,也可以綁在任何剛體物件。Obi Rope 並不是以 rigid bodies 或 joints 為基礎而開發的,這是 Obi Rope 與其他繩索製作工具不同之處。它是以 Obi particles 為基礎,擁有程式輕巧、效果細緻,而且在執行上相當穩定。

 

Obi Rope 主要功能

- 使用 Spline 程序化建立平滑網格,並支援法線貼圖,不需要自行製作繩索模型。

- 即時可變繩索長度 - Tearable/cuttable rope. - Closed loops. - 繩索的兩端可以跟剛體物件相互作用。

- 模組化解算器 ( Modular solver ) 不會消耗資源,只會使用繩索需要的約束器 ( Constraints ) 。

- Bending constraints. 彎曲約束

- 每個粒子可以被約束器 ( Constraints ) 控制。

- 直接在 Unity 編輯器進行模擬預覽,並且支援 Unity 的所有碰撞器類型。

- 容易使用的粒子工具,提供筆刷選取、繪圖筆刷、 property smoothing...

- 攝影機自動遮擋功能,拍攝畫面外的繩索將不更新模擬,減少遊戲執行的消耗資源。

 

 

前往資源商店將 Obi Rope 下載到專案。

 

Obi Cloth 教學1、建立擺鐘的效果

建立一個新場景,執行 [ GameObject > 3D Object > Obi > Obi Rope (fully set up) ] 建立一個 Obi 繩索物件。

選取 Hierarchy場景瀏覽器中的Obi Rope物件,透過 Scene 視窗可以看到一條白色的線,線的兩邊用藍色的虛線接著。

假使想要看到繩索的樣子,可以在Inspector屬性編輯器中找到Obi Rope元件後,按下Initialize按鈕。

不過現在並沒有指定材質,找到Mesh Renderer元件後展開Materials後,按下Element0最右邊的圓圈,指定一個適當的材質。

因為我們要作鐘擺的效果,所以必須先讓Z軸旋轉-90度或270度(軸心在的地方是第一個點)。

我們可以先編輯繩子的粗細及讓顏色重複,在Inspector屬性編輯器中找到Obi Rope元件後,中間的部分有個Thickness form particles可以調整粗細,我希望細一點,所以調整到0.03後要再按下Initialize按鈕才會出現效果;接著下方有UV scale的項目,我想要讓顏色分段多一些,所以調整Y值,當然這些數值可以依照個人喜好來調整。

接著按下Edit particles編輯面板,我們可以看見繩索上面多了一些藍色的圓圈,這些是繩索的分段,分段密度可以在Obi Rope元件的Resolution來修改,數字越小越少,數字越大則越多,最大數值是1,最小數值是0.0001,可依個人需求調整,不過此處採用預設值0.5來操作,有做修改的話,需按下Initialize按鈕才可以看見變化。
.
此時可以先Play來測試,結果是繩索慢慢地往下掉,我們可以先將繩索的第一段釘在空氣中。
先將畫面拉近,點選繩索的第一個點(就是白色的那個),按下編輯面板中的圖釘圖像後,按下Play測試,會發現繩子有受到重力影響,但是像是被空氣釘住一樣,最上面那段不會移動,在Scene視圖可以試著對繩索進行移動。

現在已經有繩索的效果了,不過這次做製作的是鐘擺的效果,在建立一個3D Object中的Sphere球後,先縮放至適當大小,並且移動到繩索的正下方(可以稍微重疊到),並為它增加Rigidbody元件。

此時按下Play測試,沒意外的球掉了下去,現在需要將繩索的為後一段及球綁在一起。
我們再選取繩索物件,並開啟Edit particles編輯面板,選取最後一個點後(也是白色的),在Inspector屬性編輯器中找到Obi Pin Constraints元件後,按下Add Pin Constraint按鈕後,增加一個Pinned to的欄位可以放置物件,不過此物件需要Obi Collider元件才可以放上去。

所以我們點選球,並為它增加Obi Collider元件。

再次點回繩索的最後一段,此時已經可以將球拖曳到Pinned to 的欄位內了。

此時按下Play測試,發現球就綁在繩子上了,而且怎麼甩動都不會分離;而移動球也只能在固定範圍內移動。

不過發現這繩子的彈力實在太強了,我想將這繩子不要那麼有彈力。
點選繩子物件,在Inspector屬性編輯器中,找到Distance Constraint Parameters選項,將其展開後找到Iterations欄位,這是計算繩索遭受力時,其收縮的重複次數,當數值越低彈力越好;當數值越高,越沒有彈力,可以來測試各種的效果。

假使發現球一直移不進去繩子裡面,可以嘗試調整球物件的Obi Collider元件的Thickness數值,該數值越高會離其他物件越遠,假使是負的就會吃進去其他物件內,不過範圍只在-1~1之間。
附註:
可以選擇繩索的樣式,例如一般繩索、鎖鏈、2D繩索,由於一般繩索以及2D繩索製作方法類似不再贅述,比較特別的是鎖鏈。
首先也是先建立一個Obi Rope(fully set up)物件,再到Inspector屬性編輯器Obi Rope元件中,將Rendering變更為Chain後,將Link scale修改大一些(原本的預置物件並不大),Randimize links假使需要隨機鎖鏈的話就勾選,之後將Chain Links下的Size更改為2,並到Project專案瀏覽器Obi>Sample Scenes>SampleResources>Models中的ChainLinkRed及ChainLinkWhite拖入兩個Element中,而假使要調整鎖鏈間的距離,可以調整Thickness項目數字越大越散,數字越小越靠近。

附註:
將Obi Rope套件中常用的元件列出來。
我們創建一個繩索後,會幫我們生成的元件有很多樣,並不會一一介紹,而是會只介紹常使用的。

1. Obi Distance Constraints:節點距離約束
Stretching Scale節點距離(類似Obi Rope元件下的Resolution值
Stiffness:彈性(範圍為0~1,和Obi Solverm元件中的Iterations類似)
Slack:各節點可以被壓縮的距離(為0時不可被擠壓),

2. Obi Bending Constraints:彎曲約束
Max Bending最大彎曲值,當值為0時最難彎曲,數字越大越容易被彎曲。
Stiffness:彈性,和Obi Distance Constraints元件中的類似。

3. 鎖鏈約束:
主要是能調整節點之間的影響力,可以使動作更真實。
Tether Scale:各節點能影響到的距離。

4. 綁定約束:
先前用來綁住其他物件的元件,不再贅述。

5. 繩索元件:
用來調整繩索的各項數值,包括長度、寬度、節點距離、最大承受力量、繩索的平滑度等等。

6. Obi Catmull Rom Curve及 Obi Bezier Curve:
主要功能為增加節點,兩種元件功能相同,只是做法上有差異。
假使需要兩個以上或更多的節點可以在此兩種功能擇一種來使用。

7. Obi Solver:算是Obi Rope的核心元件,此元件在計算繩索的物理學,我們常調整的只有Distance Constraint Parameters下的Iterations數值。


繩子受力而斷裂
我們先利用前面的方法,製作一個簡易的場地,創建兩個方塊並增加Rigidbody和Obi Collider元件,並把Rigidbody元件中的Is Kinematic選項勾選。
然後創建四個繩子,頭尾兩端使用Obi Tether Constaints元件進行連接。
最後再放一塊Plane當作地板,如覺得白色太亮的話可以換上別的顏色。

我們想要將繩子可以被破壞,首先先點選全部的繩子元件,在Inspector下找到Obi Rope元件後,將Tearable選項勾選後,再將Tear Resistance Multplier給予一個數字,此數字決定扯斷繩子需要多少個力,接著再將Project專案瀏覽器Obi>Sample Scenes>SampleResources>Models中的SparksEmitte預置物件放入Tear Prefab中。

為了方便測試,我們將其中一塊方塊增加Object Dragger(此元件是範例場景中,拖動方塊以扯斷繩子的移動方塊元件),並且按下Play拖動方塊以扯斷繩子。
測試後發現,繩子受到一定程度的力會被扯斷,假使將Tearable取消勾選,會繩子將會無法被扯斷。

而我們有時候也需要一個無形的力將繩索拖住,可以開啟Edit particles粒子編輯器,對需要的點增加Handle物件。
選取需要被支撐的點後,點選粒子編輯器的手掌標誌,在Scene將會在被選取的點上出現一個手掌圖示,再案係Play測試,會發現被選取的部分將被無形的力支撐住。


製作簡單的動畫
在Obi Rope中,可以在繩索上創建動畫後,再幫我們算出繩索應該要有的移動軌跡。
首先建立新場景,創建數個繩索並固定在空中。

再建立一個空物件,命名為Animation動畫,並將繩索放入空物件中(此處是由Obi Handle來進行固定,所以Obi Handle也應放入)。

接著在上方工具列,點擊Window > Animation開啟動畫面板。

 

選擇imation物件,在Animation動畫面板按下Create創建動畫,並給予適當的名稱。

我們簡單的錄製20秒的動畫,在8秒時讓繩索往上移動到最上方,12秒時繩索才開始往下移動至起點,按下動畫面板的錄影按鈕,之後先在0:00時先將物件移動,再移回來原座標,這樣才會記錄到一開始的位置。
接著將時間軸拖曳至8秒處,將Animation物件往上移動後,再將時間軸拖曳到12秒處,為了記錄到原來的地點需要先移動到別處再移動回原座標,之後在20秒處移動到原座標後,動畫錄影就完成了。
我們按下Play測試,會發現繩索會上下移動,並且有物理的效果。


將兩個繩索連在一起
在Obi Rope中有讓繩索相連在一起的原件,我們先在場地上建立兩條繩索,並讓要連接的兩端盡量貼近,並將預備被接合的其中一條繩索兩端固定在空中。

完成之後創建一個空物件,名稱為Stitcher縫合,再到Inspector屬性編輯器新增Obi Stitcher元件並將繩索和Handle放入Stitcher中。

再點選Stitcher物件,到Inspector屬性編輯器中,將預備縫合的兩條繩索放入欄位中,會看到一則錯誤訊息,上面是告訴我們兩個繩索必須共用一個Obi Solver元件。

此處選擇要縫合到其他繩索的繩索,將其Obi Solver元件移除。

移除後場上只會有一個擁有Obi Solver元件的物件,將那個物件放置於Obi Rope元件下的Solver欄位中。

修改好之後,回到Stitcher物件,在Inspector屬性編輯器中,將會發現Obi Stitcher元件的錯誤訊息已消失,之後按下下方的Edit按鈕開啟編輯器。

我們需要將物件最靠近的兩端進行縫合,先保持在點選Stitcher物件並開啟Edit編輯器的狀態中(可暫時將Inspector鎖定),在Scene視圖,向Stitcher物件的所在位置拉近。
會發現有一條白色的線,並且有兩個控制點(會重疊在繩索上,要注意觀察)。

兩個控制點需要在兩個繩索上,如圖所示,調整好之後到控制面板中按下Add Stitch來連結繩索。

共做好兩條後,在Obi Stitcher元件中會顯示Stitch count:2,表示已經縫合完畢,可以按下Play測試,會發現兩個繩索已經成功的縫合在一起了。