低負荷でそっと風に吹かれて揺れるケーブル、ロープ、チェーンを追加する機能を使うと、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 コンポーネントを使用する
次のセクションでは、こうした方法について説明します。
Place Actors パネルから Cable コンポーネントを使用する
[Place Actors (アクタを配置)] パネルから Cable コンポーネントを使用するには、以下の手順に従います。
メイン ツールバー から [Create (作成)] ボタンをクリックして Place Actors Panel を選択します。
検索ボックスで、「Cable」を検索します。Cable Actor をレベルにドラッグします。
画像をクリックするとフルサイズで表示されます。
Cable アクタを移動、回転、スケーリングしてレベルのニーズに合わせます。
ブループリントで Cable コンポーネントを使用する
ブループリントで Cable コンポーネントを使用するには、以下の手順に従います。
まず、新しいブループリントを作成します。コンテンツ ドロワー で Blueprint Class (ブループリント クラス) を選択します。
画像をクリックするとフルサイズで表示されます。
Actor を新しいブループリントの親クラスとして選択し、BP_Cable ブループリントの [Components] セクションから、[Add Component] ボタンをクリックして、リストで 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 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 Name |
ケーブルをアタッチするコンポーネントのプロパティ名です。 |
Attach End To Socket Name |
アタッチする AttachEndTo コンポーネントのソケットの名前です。 |
End Location |
ケーブルの終端。指定した場合は、AttachEndTo (または AttachEndToSocketName) に相対的で、そうでなければ Cable コンポーネントに相対的になります。 |
Cable Length |
静止したケーブルの長さです。 |
Num Segments |
ケーブルがいくつセグメントを持っているかです。 |
Solver Iterations |
ケーブルがどれくらい剛性を持つかを制御するソルバー イタレーションの数です。 |
Substep Time |
ケーブルのシミュレーション サブステップの時間を制御します。 |
Use Substepping |
falseの場合、更新前に Substep Time の経過を待ちますが、蓄積されたシミュレーション時間をすべて使ってケーブル シミュレーションを 1 回だけ実行します。 |
Enable Stiffness |
剛性コンストレイントをケーブルに追加します。 |
Enable Collision |
各サブステップで各ケーブル パーティクルをスイープし、ワールドとのコリジョンを回避します。このコンポーネントで Collision Preset を使って何を衝突させるかを決めます。これによりケーブルのシミュレーションの負荷が大幅に高くなります。 これは現在、実験的な機能です。 |
Collision Friction |
Collision が有効な場合、このオプションはケーブルの接触時の滑り摩擦度合を制御します。 |
Cable Forces
プロパティ名 |
説明 |
---|---|
Cable Forces |
ケーブルのすべてのパーティクルに適用される Force ベクター (ワールド空間) です。 |
Cable Gravity Scale |
このケーブルに影響を与えるワールドの重力に適用されるスケーリングです。 |
ケーブルのレンダリング
プロパティ名 |
説明 |
---|---|
Cable Width |
ケーブル ジオメトリがどれくらいの幅であるかです。 |
Num Sides |
ケーブル ジオメトリの面の数です。 |
Tile Material |
ケーブルの長手方向に沿ってマテリアルを何回繰り返すかです。 |