7-3. ModelのTransform制御

ModelのTransform制御

ModelのTransform概要

RobloxにおけるModelはゲームのエンティティを構成する基本単位です。しかし、Model自体は明示的なPositionやRotationプロパティを持たず、Model全体のTransformは基準点となるPivotを移動することによって行われます。このため、Pivotの理解と操作が重要になります。また、ModelはScaleパラメータを持ち、モデル単位でのスケール変更が可能です。

ModelのPivotとPrimaryPart

Modelの基準点となる「Pivot」は、次のルールに基づいて決まります
  1. Model作成時のバウンディングボックスの中心点。
  1. PrimaryPartが指定されている場合、その位置。
Model化した直後はPivotはその時点でのバウンディングボックスの中心になります。これはModel化時点で決まることには注意が必要です。その後Modelにパーツ等を追加してもPivotは変わりませんので、基準点が中心にはないといった状態にもなり得ます。これを修正するには、以下のPrimaryPart設定を使うか、後述のEditPivot機能による調整を行います。
PrimaryPartを設定すれば、明示的にそのパーツを基準点とすることができます。PrimaryPartを設定することで基準点が明確に定まり、特に回転、スケールの変換において任意の望ましい変換を可能とできます。
通常、背景オブジェクトなどの座標変換しない静的なオブジェクトであれば、PrimaryPartがなくても問題ありませんが、キャラクターなどゲーム内で動的な挙動をするModelに関してはPrimaryPartの設定が推奨されます。これは座標変換のみでなく、物理制御やアニメーション制御などの一部機能でもPrimaryPartが必要となることからも推奨されます。

Pivotの編集

PivotはStudioのModelタブの「Edit Pivot」メニューから編集が可能です。ResetPivotをすることでバウンディングボックスの中心に取り直すことが可能です(PrimaryPart指定がない場合)。
Pivotに自由にオフセットをかけるといった調整も可能です。特に回転軸を変えたい場合などに利用すると、状況に合わせたModelの座標変換操作を可能とします。(例:ドアの場合Pivotをヒンジ付近に移動して回転する、など)

Script上でのModelのTransform

上述の通り、ModelはPivotが基準点となっており、座標変換においてもPivotを取り扱うのが基本的な考え方となります。一般的なゲームエンジンで用いるといったメソッドで操作するイメージとは異なるため、注意して把握する必要があります。

Pivot操作

Pivotの操作は、メソッドを使用して制御します。Modelの座標変換ではPivot操作が基本となり、このメソッドは実装上最も利用するメソッドの1つともいえる、基本的な座標変換インターフェースとなります。PivotoはCFrame型によって制御されます。CFrameについては次項でも解説しています。

移動量を与える

移動量のみを与える場合は、メソッドが使用できます。指定した移動量分Positionが移動します。

コリジョンありの位置指定

位置指定には、メソッドが使用できます。メソッドは移動先のコリジョンを考慮してめり込みを避けた位置取りをする挙動をとることに注意が必要です。

スケール操作

Model全体のスケール変更にはメソッドを使用します。スケールはCFrameに含まれないため、単独メソッドで制御することを覚えておきましょう。

ModelのTransformの注意点

PrimaryPartの直接操作は避ける

PrimaryPartが設定されている場合、PrimaryPartのCFrame、さらにはPositionやOrientationプロパティを直接操作することも可能ですが、これは通常、PrimaryPartのみの移動を意味し、Model全体のTransformとは異なります。Modelの適切な制御には、専用のAPIを通じた操作をすることが重要となります。
PrimaryPartの操作をラップするというメソッドがありますが現在は非推奨となり、代わりにを使用するように、公式ドキュメントで明記されています。(公式ドキュメント Model:SetPrimaryPartCFrame)すなわち、Pivotで座標変換するのが公式としても推奨されるModelのTransform適用方法といえます。

Part操作を含めてPivotToでの操作に統一

メソッドはModelクラス、BasePartクラス両方のベースクラスとなるPVInstanceのメソッドであるため、Part、Model両方で利用することができます。すなわち、そのオブジェクトがPartかModelかにかかわらず、を用いた座標変換適用が可能ということです。結論としては、ゲームオブジェクトへの座標変換は、メソッドで統一的に利用していくことが可能です(も同様)。

ModelのTransform把握の重要性とまとめ

RobloxにおいてModelはゲームエンティティを構成する基本的かつ重要な要素ながら、そのTransform操作には他のゲームエンジン等に比べて注意が必要な点があります。Pivotの操作方法、PrimaryPartの設定、そして適切なAPIの使用方法を理解して、Modelを効果的に配置し動かせるようになりましょう。

参照すべき情報