低負荷でそっと風に吹かれて揺れるケーブル、ロープ、チェーンを追加する機能を使うと、Unreal Engine プロジェクトが生き生きとしたものになります。以下では、Cable コンポーネント プラグインを使って、ケーブルの外観を作成、セットアップ、制御し、レベル内のオブジェクトに反応し、衝突させる方法について説明します。
シミュレーションとレンダリング
実際のケーブルのシミュレーションには、ゲーム制作で知られている Verlet Integration (ベレの方法) という技術を使います。これはケーブルを 距離のコンストレイント を間に持つ一連のパーティクルとして表す考え方です。最後のパーティクルは 固定 され、アタッチされている任意のものと一緒に動きます。間にあるものは 自由 であり、重力で落ちていきます。各ステップで、各パーティクルのベロシティと位置を更新し、コンストレイントに従い移動します。ケーブルの 剛性 は、コンストレイント (各ステップ) を強化するためのイタレーションの回数でコントロールします。
クリックしてフルサイズ表示
チェーン状になった一連のパーティクルがバウンスします。これをレンダリングする必要があります。ケーブルをレンダリングするために、FCableSceneProxy というクラスが作成されて、ケーブルのレンダリングをします。Sim パーティクルの位置の各端は (TickComponent 内のメイン スレッドで行われる)、SendRenderDynamicData_Concurrent 関数経由でこのプロキシに渡されます。次に、更新はレンダリング スレッドで自動追跡され、次にインデックスと頂点バッファが更新されます。その結果、tube メッシュが作られます。このチューブ メッシュの各頂点で、位置、テクスチャ UV、および 3 つのタンジェントベースのベクターを計算する必要があります。これを行う場合、X はケーブルに沿ってポイントし、Z はケーブルから真っ直ぐポイントし (法線)、Y は X と Z に対して垂直になります。こうしたプロパティはコンポーネントに公開されて、面の数、チューブの半径、およびケーブルにそって UV が何回タイリングされるかを制御する機能があります。
クリックしてフルサイズ表示
プラグインを有効にする
Cable コンポーネントのプラグインはデフォルトで有効になっています。有効になっていない場合は、メイン ツールバーで、[Edit] > [Plugins] の順に選択します。次にプラグインのリストから、[Rendering] に進み、[Cable Component] の [Enabled] の隣にあるボックスにチェックを入れるようにします。
クリックしてフルサイズ表示
Cable コンポーネントを使用する
プロジェクトのレベルに Cable コンポーネントを追加するには、2 種類の方法があります。次のセクションでは、こうした方法について説明します。
Place Actors パネルから Cable コンポーネントを使用する
[Place Actors (アクタを配置)] パネルから Cable コンポーネントを使用するには、以下の手順に従います。
-
メイン ツールバー で [Create] をクリックして [Place Actors Panel] を選択します。
-
検索ボックスに「
Cable
」と入力します。ケーブル アクタ をレベルにドラッグします。クリックしてフルサイズ表示
-
Cable アクタを配置、回転、スケーリングしてレベルのニーズに合わせます。
ブループリントで Cable コンポーネントを使用する
ブループリントで Cable コンポーネントを使用するには、新しいブループリント クラスを作成します。
-
コンテンツ ドロワー / コンテンツ ブラウザ を 右クリック して ブループリント クラス を選択します。
-
アクタ をブループリントの親クラスとして選択します。
-
ブループリントの名前を「BP_Cable」に変更します。変更したらダブルクリックして ブループリント エディタ の中で開きます。
-
[Components] タブで [Add (追加)] ボタンをクリックします。リストの中から Cable コンポーネントを探して選択します。
-
Cable コンポーネントが追加され、コンポーネント リストで Cable コンポーネントを選択すると、[Details] パネルでプロパティを調整できるようになります。ここでは、エディタを閉じる前に、すべてをデフォルトのままにして、必ずブループリントを コンパイル および 保存 するようにしてください。
ケーブルのいずれかの端が落ちるようにするには、ケーブル コンポーネントの [Details ] パネルで、[Attach Start] または [Attach End] のいずれかのオプションのチェックを外します。エフェクトに合せるためにゲームの実行中に切り替えることも可能です。
-
コンテンツ ドロワー内で BP_Cable を選択し、レベル内にドラッグします。必要に応じて移動および回転させます。
ケーブル終端にオブジェクトをアタッチする
ケーブルのいずれかの端にオブジェクトをアタッチして、ケーブルと一緒にオブジェクトをスイングさせることもできます。割り当ては以下のように行います。
-
[Actor] パネルで キューブ アクタ をレベルへドラッグします。以前追加した BP_Cable の横に動かします。
-
キューブの [Mobility] を [Moveable] に設定するようにします。
クリックしてフルサイズ表示
-
ワールド アウトライナー で Cable アクタの端にアタッチするキューブを探して、それを Cable アクタの上にドラッグします。キューブを Cable アクタの上にドラッグします。これを行うと、次のようなダイアログ ウィンドウが開きます。
-
[Cable End] を選ぶと、ビューポートでキューブが Cable アクタの端にスナップしているのがわかります。
-
レベル ビューポートで Cable アクタを選択します。次に [Details] パネルの [Cable] セクションで [Attach End] オプションを無効にします。
ケーブルをアクタにアタッチするには、Attach Start と Attach End のオプション以外も使用することができます。アタッチメント ポイントとして使用可能なソケットを指定することもできます。
-
Attach End を無効にすると、ビューポートはケーブルを自由にスイングします。
ランタイム時に Attach Start オプションと Attach End オプションを動的に切り替えることができます。そうすることで面白いエフェクトを作ることができます。
コリジョンと剛性
コリジョンと剛性を有効にすると、Cable アクタの負荷が大幅に増えます。ケーブルがワールドで何かと衝突しなければならない場合や、エフェクトの見た目をよくするために剛性が必要な場合に限り、こうした機能を有効にしてください。こうした機能が不要ならば、パフォーマンスを上げるために無効にするとよいでしょう。
Cable コンポーネントには、ケーブルがどれくらい剛性を持っているかを制御しながら、ワールドでケーブルを衝突させるオプションがあります。ここの機能を有効にするには、以下の手順を行います。
-
ブループリント エディタで、Cable Component の [Details (詳細)] パネルへ移動します。[Cable] セクションを探して [Advanced] オプションを展開します。
クリックしてフルサイズ表示
-
[Enable Stiffness] と [Enable Collision] の両方のオプションを有効にします。
-
Cable アクタを動かす、またはオブジェクトが衝突すると、Cable アクタすなわちケーブルが接触するオブジェクトと衝突します。
Cable コンポーネント プロパティのリファレンス
ここでは、Cable コンポーネントの各プロパティの参考情報を記載します。
Cable

プロパティ名 | 説明 |
---|---|
Attach Start | ケーブルの始端を何かに修正するか、フリーのままにします。false の場合、コンポーネントのトランスフォームは、ケーブルの始まりの初期位置として使用されます。 |
Attach End | ケーブルの終端を何かに修正するか (AttachEndTo および EndLocation を使って)、フリーのままにします。false の場合、AttachEndTo と EndLocation がケーブル終端の初期位置に使われます。 |
Attach End To | ケーブルの終わりの位置を定義するアクタまたはコンポーネントです。 |
Component Property | ケーブルをアタッチするコンポーネントのプロパティ名です。 |
Attach End To Socket Name | アタッチする AttachEndTo コンポーネントのソケットの名前です。 |
End Location | ケーブルの終端。指定した場合は、AttachEndTo (または AttachEndToSocketName) に相対的で、そうでなければ Cable コンポーネントに相対的になります。 |
Num Segments | ケーブルがいくつセグメントを持っているかです。 |
Solver Iterations | ケーブルがどれくらい剛性を持つかを制御するソルバー イタレーションの数です。 |
Substep Time | ケーブルのシミュレーション サブステップの時間を制御します。 |
Enable Stiffness | 剛性コンストレイントをケーブルに追加します。 |
Use Substepping | falseの場合、更新前に Substep Time の経過を待ちますが、蓄積されたシミュレーション時間をすべて使ってケーブル シミュレーションを 1 回だけ実行します。 |
Enable Stiffness | ケーブルに剛性の制限を加えます。 |
Enable Collision | ワールドとの衝突を避けるため、各サブステップで各ケーブル粒子のスイープを実行します。コンポーネント上のコリジョン プリセットを使用して、衝突するものを決定します。そのため、ケーブル シミュレーションのコストが大幅に増加します。 |
Collision Friction | Collision が有効な場合、このオプションはケーブルの接触時の滑り摩擦度合を制御します。 |
Cable Forces

プロパティ名 | 説明 |
---|---|
Cable Forces | ケーブルのすべてのパーティクルに適用される Force ベクター (ワールド空間) です。 |
Cable Gravity Scale | このケーブルに影響を与えるワールドの重力に適用されるスケーリングです。 |
Cable Rendering

プロパティ名 | 説明 |
---|---|
Cable Width | ケーブル ジオメトリがどれくらいの幅であるかです。 |
Num Sides | ケーブル ジオメトリの面の数です。 |
Tile Material | ケーブルの長手方向に沿ってマテリアルを何回繰り返すかです。 |