原カバンは鞄のお店ではありません。

Unityを使ったゲーム制作のあれこれを綴っていきます。

【アセット紹介】Rope Toolkitを使ってロープを作ろう

クーラー風邪

エアコンで室内を冷やしすぎて風邪をひいた免疫力弱目な皆さんこんにちは。梅雨なのに真夏ような暑さが訪れて、辛抱たまらずエアコンのスイッチをONにしたのですが、その所為か朝起きたら喉と鼻を痛めてました、あと体もだるいし。日本の季節って本当に夏と冬だけになったのかもしれない。

 

ロープを作ろう

Untiyで3Dの曲線を作ろうと思うと、Unity標準SplneのSpline Extrudeを用いて線を描画するか、Spline沿ってLineRendererで描画するか、の手法が考えられるかと思いますが、どちらも描画後に曲線を変形させようとすると実装に骨が折れます。
例えば電柱をつなぐ電線やブランコの鎖など、風やその他の影響で自然に変形するような3D曲線を作ろうと思えばアセットの力を借りるのが手っ取り早い、とうわけで今回は手軽にロープが作れるRope Toolkitのご紹介

Unityでロープを作るアセットと言えばObiRopeが有名なんですが、Rope ToolkitはBurstコンパイラを使用しており、より高速な処理が望める為、スマホ等のモバイルデバイスでの使用も可能との事。丁度アセットストアで2$セールの対象となっていたので興味本位に購入してみました。

 

準備

前述のようにRope toolkitではBurstコンパイラを使用しているため、このアセットの導入前にPackageManagerからBurstをプロジェクト内にインストールしておく必要があります。

Rope Toolkitで生成されるロープはUnityエディタのゲーム実行時に生成される為、シーン内にはロープのオブジェクト(Prefab)を配置するのではなく、空のオブジェクトにRope生成用のコンポーネントをアタッチして、そこにロープを生成させるための設定を行うことでロープが作られます。

上の動画はアセットに含まれているデモシーンを実行した映像ですが、実行前は下の図ような感じでシーン内にはロープのオブジェクトは存在していません。


ロープの生成

Rope Toolkitでロープを定義するには最初にシーン内に空オブジェクトを生成し、そこに「Rope」コンポーネントをアタッチします。

シーン内にSpawnPointsのダイアログが表示されるので二回押下、これがロープの始点と終点になりますが、後でそれらの位置は変更できるので最初は適当な場所で構いません。

始点と終点の位置を変更するにはシーン内のナビゲーションコントロールからハンドアイコンを押下します。

Ropeコンポーネントにはほかにもロープの半径(Radius)やMaterialを設定する欄があるのでそちらも設定します。

 

ロープの動作定義

つぎにロープの始点と終点の動作を定義します。Ropeコンポーネントをアタッチしたゲームオブジェクトに始点と終点分のRopeConnectionコンポーネントを追加します。
これはつり橋のようにロープの両端が固定されている場合、振り子のようにロープの片側が固定されてもう片側は接続されたオブジェクトの動きに影響を受けるような場合等々、作成したいロープの動作をRopeConnectionコンポーネントで設定します。

設定できるタイプは以下の通り

  • Pin Rope to Transform:トランスフォームは自由に動き、ロープが追従する
  • Pin Transform to Rope:ロープは自由に動き、トランスフォームが追従する
  • Pull Rigidbody to Rope:ロープでリジッドボディを引っ張る
  • Two Way Coupling Between Rigidbody And Rope:ロープはリジッドボディに反応し、リジッドボディにフィードバックインパルスを返す

今回は両端が固定されたロープを定義するので、始点と終点のどちらにも「Pin Rope To Transform」を設定します。
そして、ロープを固定する始点と終点のGameObjectをシーン内に作成し、Tranform SettingsのTransformにそれぞれを設定します。


この時、始点側のRopeConnectionにはRope Locationには0を、終点側のRope Locationには1を設定します。

球が始点を固定するGameObject、Cubeが終点を固定

この状態でゲームを実行すると先ほど指定した始点、終点のゲームオブジェクトにつながったロープが生成されます。

 

ロープのカスタマイズ

例えばロープの中間点にロープをピン止めする定義を増やしたい場合、。RopeコンポーネントをアタッチしたゲームオブジェクトにRopeConnectionコンポーネントを追加します。
そして先ほどと同様に固定するためのGameObjectを作成してTranform SettingsのTransformに設定しますが、この時、タイプには「Pin Rope To Transform」を設定して、Rope Locationには0.5を指定します。

これを実行すると

中間点をピン止めしたロープが作られます。

 

これとは逆にロープの中間点に何か重い物がつけられているような動作としたい場合は、中間点のGamesObjectにRigidboyを追加し、RopeConnectionのタイプには「Two Way Coupling Between Rigidbody And Rope」を指定Rigidboy Settingsのbodyに中間点のGamesObjectを指定します。

これを実行すると

中間点が垂れ下がるような動作となります。

 

最後に

Rigidboy Settingsには「Stiffness(剛性)」や「Damping(減衰)」の項目があり、Rigdibodyに影響されるロープの挙動を調整できますが、思ったような挙動をさせるにはRopeConnectionだけでなく、Ropeコンポーネント側の「Stiffness(剛性)」や「Energy Loss」「Collisions」の項目をアレコレと調整して挙動を確認する必要があります。

例えば上のようにロープの終点側を固定せず振り子のような挙動をさせたい場合、終点側のRopeConnectionの設定を変えるだけでなくRope側の設定も色々変更して調整する必要がありました。

調整後のRopeパラメータ

幸いサンプルシーンには「つり橋」「ブランコ」「振り子」等のロープを使ったギミックの例を参照できるので、それらを確認しながらSettingを行ってい下さい。
一応英語ですがDocumentも付属しています。

 

◇プライバシーポリシー

●個人情報の利用目的

当ブログでは、メールでのお問い合わせ、メールマガジンへの登録などの際に、名前(ハンドルネーム)、メールアドレス等の個人情報をご登録いただく場合がございます。

これらの個人情報は質問に対する回答や必要な情報を電子メールなどをでご連絡する場合に利用させていただくものであり、個人情報をご提供いただく際の目的以外では利用いたしません。

●個人情報の第三者への開示

当サイトでは、個人情報は適切に管理し、以下に該当する場合を除いて第三者に開示することはありません。

・本人のご了解がある場合
・法令等への協力のため、開示が必要となる場合

個人情報の開示、訂正、追加、削除、利用停止
ご本人からの個人データの開示、訂正、追加、削除、利用停止のご希望の場合には、ご本人であることを確認させていただいた上、速やかに対応させていただきます。

アクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。

このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。このトラフィックデータは匿名で収集されており、個人を特定するものではありません。
この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。

●免責事項

当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。

当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。

当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。

●プライバシーポリシーの変更について

当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。

修正された最新のプライバシーポリシーは常に本ページにて開示されます。