【Unity(C#)】最強のロープアセット、Obi Ropeの使い方

##Obi Rope

このアセットはマジで最強です。→[【Obi Rope】](https://assetstore.unity.com/packages/tools/physics/obi-rope-55579)
このアセットを使うまではロープの表現をLineRendererで表現してました。
使いこなすまではしんどいですが、簡単なロープの挙動を実装する程度であれば
かなりコスパの良いアセットです。

今回は長縄跳びっぽいものを再現しながら使い方をメモしていきます。

実際に再現したものがこちらです。
![Obi.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/0cc972d6-49e4-a2d0-bf51-934f2cf8a978.gif)



使用したアニメーションが太極拳みたいなモーションなので
長縄跳びとしては意味不明な回し方ですが、
ロープの挙動としてはばっちりです。

##作成デモ

では実際に作っていきます。

アセットをインポートしたら大量にエラーが出ますがシカトしましょう。
だいたいプレイボタン押したら消えます。

完了すると`3D Object`の欄に`Obi Rope`作成欄が出現するので`fully set up`を選択します。
![ObiCreate.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/d37a2f3e-2bff-8a79-eb61-56513f75dcb4.png)


次に`Initialize`を押してロープを生成します。
![ObiInitiarize.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/a33a603c-0884-113b-b9e9-bf24862b1ff3.png)

次に`Edit curve`を押して
白い丸を動かしていい感じの位置にロープのポイントを設置します。

![ObiC.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/dd4af2c7-74a0-93bf-b128-2e77abe0eba4.png)

今回はヒューマノイドの左手付近にポイントを移動させました。
移動させた後は、再度`Initialize`を押してあげると画像のように新しい位置に
ロープが生成されます。
![ObiEditCurve.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/c5bc115b-c609-0e95-248b-733afece1d30.png)

次に、ロープの末端を手の位置に固定し、手の動きに追従するように設定します。
`Edit Particles`を押すと画像のように青い点が大量に画面に表示されます。
![ObiEditParticles.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/069b917c-72aa-1ec1-41fa-340b86e663e1.png)

この1つ1つの点はそれぞれ選択することができます。
![ObiEdit.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/477143c2-d801-3930-b381-5d8f2802899d.gif)

末端の青い点を選択した状態で
`Obi Pin Constrains`の`Add Pin Constrains`を押します。

![ObiPin.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/168bf631-0e30-4dcb-195c-a2b11b758a87.png)

そうすると設定画面が表示されます。
`Pinned to`に固定させたい座標を持ったオブジェクトをアタッチします。

ただし、アタッチするオブジェクトにはObiコライダーが必要です。
さらに、Obiコライダーアタッチ時に該当するオブジェクトに通常のコライダーが無い場合、
下記のように怒られます。
![ObiErrorPin.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/105c2fe0-ca28-c3e6-ae53-91db4dd48766.png)

ここまで準備ができたらもうロープの挙動はある程度完成です。
![ObiMen.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/189f04c8-f5d5-fdd1-f1b2-a4523335559a.gif)



※`Initialize`を押すと、警告も出ますがPinの設定などが外れてしまいます。
　 なので、Pinの設定後にカーブをいじって、
　 カーブの設定をEditor上に反映させるために`Initialize`を押す。。。
　 などをやってしまうとPinの設定は吹き飛びます。

##見た目の設定

Materialは通常通り`Mesh Renderer`に設定すれば`Initialize`せずとも反映されます。
Uv Scaleなどもパラメータとして用意されているので簡単にきれいなループ模様が再現できます。
太さは`Section Thickness Scale`で変更可能です。
![ObiMesh.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/b5a73f54-bf65-3b61-e3e4-eb3baed1fe49.png)


`Section`というパラメータを開けば、
ロープの形状もGUIから変更可能です。(これすごいですよね)
![ObiSection.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/106d8f61-8d90-e632-91b8-bb780ac46313.gif)

実際に三角形のロープを作成したデモです。
![ObiSectionTriangle.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/89a21287-63b3-5a4c-f342-8244620f2b4d.gif)

##挙動の設定

パラメータが山盛りなのでよく使うものだけメモします。
また新しい便利機能発見したら更新します。

####Distance
文字通り長さが変わります。
![ObiConstration.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/4c670fd9-d4a9-cd4b-815f-fd0ba00342c1.gif)


####Gravity
文字通り重力が変わります。
![ObiGravity.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/302ef30c-336f-9ad9-b1f7-b796cae7f69e.gif)


####物理判定
ロープと接触させたいオブジェクトにObiコライダーをアタッチすればOKです。
![ObiCol.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/5dd5f577-aada-1021-68ba-232da5809dd7.gif)


---
2011/11/29　追記

だいぶ変更されてたのでメモします。
v6.3時点のメモとなります。

まず[BluePrint](http://obi.virtualmethodstudio.com/manual/6.3/ropesetup.html)という項目が増えています。
BluePrintでロープの簡単な性質を設定できるようです。
今回はサンプル用シーンのBluePrintを使って検証してみました。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/1f5507f1-ac6d-2fe4-4c9e-0f42e3baf916.png)

ObiRopeにBluePrintを設定するとEditPathの押下が可能になります。
PathEditorでPassを選択して動かしたり、消したり追加したりできます。
1つのPassを動かすと、ロープの末端のPass以外は画像のように3つの矢印が出てきます。
UnityのAnimationCurveのように湾曲の角度を調整するために用意されているようです。

![キャプチャ1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/bd59d8fe-1334-0982-2ad1-6601670ca0b4.png)

ロープの固定には`Obi Particle Attachment`を使用します。
先ほどのPathEditorでPathを選択するとNameという項目が表示されていたと思います。
そのNameを`Particle group`で指定することで何に追従させるか、固定するかなどを設定できます。

![キャプチャ2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/59fa6386-8ad7-8d24-602e-6fdea5743e1f.png)

Sphereにロープの末端を追従させてみたサンプルです。
![test2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/d17f81d6-43a8-d0c3-75fa-78360df08261.gif)


##まとめ
Obi Ropeはいいぞ。