1. 調査内容
ObjectManipulatorを利用するとCubeを自由に拡縮・移動・インタラクションを実装出来るがそれ以外にどういった機能があるのか。
または機能を制限する(拡縮は出来ないようにするなど)にはどうしたら良いのか。
2. 調査結果概要
ObjectManipulatorを利用すると、Cubeを回転させないようにしたり、特定の軸のみで回転させたり、コントローラーから飛ばしたレイではなく、Cubeに直接触れるときのみ操作させるなどの制限を設けることができます。
それぞれの制限は、Cubeに触れた時もしくは離れた時のイベント発生時に変更することができます。
3. ObjectManipulatorでできる制限の詳細
記載形式
Allowed Manipulations
移動/回転/拡縮のうち選択したものを許可する。
Allowed Interaction Types
コントローラーから遠くのオブジェクトへ飛ばしたレイで操作するのか、
コントローラーが直接オブジェクトに接触することで反応させるのかなど
インタラクションの種類を指定しそれを許可する。
Rotation Anchor Near/Far
コントローラーでオブジェクトを回転させるときのオブジェクトのアン
カーについて、オブジェクトの中心、またはオブジェクトとの接触点かを
選択する。
Physics
操作されたオブジェクトがリリースされたときに維持すべき物理的なプロパティを指定する。
Release Behavior
…memo:実際に試したが変化は見られなかった
[Keep Velocity]
オブジェクトがリリースされたときにその線速度を維持する。
[Keep Angular Velocity]
オブジェクトがリリースされたときにその角速度を維持する。
Use forces for near manipulation
trueはオブジェクトがはじかれるような動きになる。 既定値は false 。
Smoothing
Smoothing far
遠隔での対話式操作でフレームレートに依存しないスムージングを有効にするかどうかを指定する。規定は有効(true)。
Smoothing near
近接での対話式操作でフレームレートに依存しないスムージングを有効にするかどうかを指定する。手から "切断された" と認識される可能性があるため規定は無効(false)。
Move lerp time
移動に適用されるスムージングの量(0~1)。
Rotate lerp time
回転に適用されるスムージングの量(0~1)。
Scale lerp time
…memo:実際に試したが変化は見られなかった
拡大縮小に適用されるスムージングの量(0~1)。
上記3つの lerp time 共通の内容
値が大きいほど動かすのに時間がかかる(動かしづらい感覚)。0 は、スムージングを行わないことを意味し、最大値1は値が変化しないことを意味する。
ManipulationStarted
オブジェクトへの操作が開始されたときに発生し、対象オブジェクトの設定内容を変更できる。
ManipulationEnded
オブジェクトへの操作が終了したときに発生し、対象オブジェクトの設定内容を変更できる。
イベントの発生順序はStarted→Ended
4. Object ManipulatorのConstraintsプロパティ

説明
Object Manipulatorを追加するとConstraint Managerコンポーネントも同時に追加されます。
このConstraint Managerでは細かな制約コンポーネントを作成したり管理します。
これらの細かな制限すべてを有効にするかどうかを指定するプロパティです。
Enable Constraints
trueの場合、ConstraintManagerで設定したコンポーネントを有効にします。
概要図
5.Constraint Managerコンポーネント
(1) [AutoConstraintSelection]か[ManualConstraintSelection]のどちらかを選びます。
(2) いずれもコンポーネントリストに表示している制約コンポーネントを有効にします。
(初めはコンポーネントリストには何も表示されません)
(3) 追加できるコンポーネントは以下。各コンポーネントの詳細は下記6.参照。
FaceUserConstraint
オブジェクトが常にユーザーの方を向くように回転を制限する。
fixed distance Constraint
操作されるオブジェクトと別のオブジェクト変換との間の、操作開始時の距離を固定する。
操作されるオブジェクトからヘッド変換までの距離を固定するなどの動作に役立つ。
FixedRotationToUserConstraint
操作中に、ユーザーと操作されるオブジェクトの間の相対的な回転を固定する。
操作されるオブジェクトが操作開始時と同じ面を常にユーザーに向けるようにするので、スレートやパネルに便利。
FixedRotationToWorldConstraint
操作されるオブジェクトの操作中にグローバルな回転を固定する。
操作によって回転を与えないようにすることが必要な場合に役立つ。
MaintainApparentSizeConstraint
オブジェクトがユーザーからどれだけ離れていても、ユーザーに対して見かけでは同じサイズが維持される
(つまり、ユーザーの視野において同じ割合を占める)。
MinMaxScaleConstraint
拡縮の最小最大値を制限する。
MoveAxisConstraint
移動方向をXYZ軸で制限する。
RotationAxisConstraint
回転方向をXYZ軸で制限する。
(4) 制約コンポーネントの追加と削除方法
① AutoConstraintSelectionを選択した場合
A. 追加するには
・ Add Constraint to GameObjectボタンクリックしてリストからコンポーネントを選ぶ
(リストへ追加するのと同時に、Inspectorビューの末尾に該当のコンポーネントが追加される)
B. 削除するには
・ 該当の制約コンポーネントの右上の縦…(3点)からRemoveComponentを選択する
② ManualConstraintSelectionを選択した場合
A. 追加するには:2通り
・ Add Entryボタンをクリックして、AutoConstraintSelection側で追加済みのコンポーネントから選ぶ
・ Add New Constraintボタンクリックしてリストからコンポーネントを選び新しく追加する
B. 削除するには
・ コンポーネントリスト上の該当の制約コンポーネントの右にあるRemoveEntryをクリックする
6. 各制約コンポーネントの詳細
共通プロパティ
Hand Type
制約を片手/両手/両方のどの種類の操作に使用するかを指定する。
[One handed] 片手操作時に制約を使用する。
[Two handed] 両手操作時に制約を使用する。
Proximity Type
制約を近く/遠く/両方のどの種類の操作に使用するかを指定する。
[Near] 近くの操作時に制約を使用する。
[Far] 遠くの操作時に制約を使用する。
Execution Order
優先順位。複数の制約コンポーネントがあるとき小さい数の方を先に実行する。
異なる順序で結合されると異なる動作をするものがあるため、適切に順序を調整すること。
FaceUserConstraint コンポーネント
オブジェクトが常にユーザーの方を向くように回転を制限する。
FaceAway
trueのときはユーザーの反対側を向くように制限する
GravityAlign
trueのときはオブジェクトを垂直に保つ。傾かない。
Fixed distance Constraint コンポーネント
操作されるオブジェクトと別のオブジェクト変換との間の、操作開始時の距離を固定する。
操作されるオブジェクトからヘッド変換までの距離を固定するなどの動作に役立つ。
ConstraintTransform
別のオブジェクトをアタッチする
FixedRotationToUserConstraint コンポーネント
操作中に、ユーザーと操作されるオブジェクトの間の相対的な回転を固定する。
操作されるオブジェクトが操作開始時と同じ面を常にユーザーに向けるようにするので、スレートやパネルに便利。
FixedRotationToWorldConstraint コンポーネント
操作されるオブジェクトの操作中にグローバルな回転を固定する。
操作によって回転を与えないようにすることが必要な場合に役立つ。
MaintainApparentSizeConstraint コンポーネント
オブジェクトがユーザーからどれだけ離れていても、ユーザーに対して
(つまり、ユーザーの視野において同じ割合を占める)。
MinMaxScaleConstraint コンポーネント
拡縮の最小最大値を制限する。
Scale minimum
操作中の最小スケール値。
Scale maximum
操作中の最大スケール値。
Relative to initial state
true の場合、上記の値はオブジェクトの初期スケールに対する相対値として解釈される。それ以外の場合は、絶対スケール値として解釈される。
MoveAxisConstraint コンポーネント
移動方向をXYZ軸で制限する。
ConstraintOnMovement
X 軸: 選択すると、x 軸に沿った移動に制限する。
Y 軸: 選択すると、y 軸に沿った移動に制限する。
Z 軸: 選択すると、z 軸に沿った移動に制限する。
UseLocalSpaceForConstraint
true:操作するオブジェクトのローカル変換軸に相対的に制約する。
既定では false 。
RotationAxisConstraint コンポーネント
回転方向をXYZ軸で制限する。
ConstraintOnRotation
X 軸: 選択すると、x 軸を中心にした回転に制限する。
Y 軸: 選択すると、y 軸を中心にした回転に制限する。
Z 軸: 選択すると、z 軸を中心にした回転に制限する。
UseLocalSpaceForConstraint
true:操作するオブジェクトのローカル変換軸に相対的に制約する。
既定では false 。
7. 参考
最後までご覧いただきありがとうございました。以上、お疲れ様でした!