![見出し画像](https://assets.st-note.com/production/uploads/images/143491641/rectangle_large_type_2_d7743cbb3f7caf682302cdd1a8bf7768.jpeg?width=1200)
Resoniteでモノがユーザーや特定の方向を向くやうにする方法【LookAt・LookAtUser・AutoLookAtUser・AxisRotationAligner】
どうも、萬朶櫻です。
ゲームなどでは、常にプレイヤーの方を向き續ける物體なんかがあると思ひます。
Resoniteでもそれを再現できることが判つたので、やり方を書いていきます。
「自分」に向かせる
2通りの方法がある。
その場に居る全ての「自分」に向かせる
特定の「自分」だけに向かせる
前提の説明
VRの仕樣による特有の擧動のため、理解が難しいかもしれない。そのため、以下の状態を例として説明する。
![](https://assets.st-note.com/img/1717402304947-4YQxQji5OH.jpg?width=1200)
オブジェは正面の扉を向いてゐて、どちらのユーザーにも向いてゐない
【その場に居る全ての「自分」に向かせる】とは、以下のやうな状態である。
ユーザーAから見たら、オブジェはユーザーAを向いてゐる
ユーザーBから見たら、オブジェはユーザーBを向いてゐる
![](https://assets.st-note.com/img/1717403198923-9c8QOHa1aT.jpg?width=1200)
2つの状態が同時に存在してゐる
むりやり客觀的に表現するとこんな感じ。現實ではあり得ない擧動ができる。
【特定の自分だけに向かせる】とは、以下のやうな状態である。
ユーザーAから見たら、オブジェはユーザーAを向いてゐる
ユーザーBから見たら、オブジェはユーザーAを向いてゐる
![](https://assets.st-note.com/img/1717402922317-Kp4YPPnMpC.jpg?width=1200)
こちらは現實に即した状態である。
その場に居る全ての「自分」に向かせる(LookAtUser)
LookAtUserコンポーネントを用ゐる。LookAtUserの場所は以下の通り。
![](https://assets.st-note.com/img/1717402879091-z1RdT6TV7O.png?width=1200)
LookAtUserを充てた状態。
![](https://assets.st-note.com/img/1717403627663-tK4mFps6AH.png?width=1200)
このコンポーネントは、そのままでは機能せず、「誰に對して向くのか」を指定しなければならない。
TargetAtLocalUserにチェックを入れると、各自の方向に向くやうになる。
![](https://assets.st-note.com/img/1717403847702-7d8KeXlba4.png)
特定の「自分」だけに「常に」向かせる(LookAtUser・AutoLookAtUser)
![](https://assets.st-note.com/img/1717404654488-5z4vo9hxvz.jpg?width=1200)
途中で他のユーザーに注目を切り替へない
LookAtUserの場合、「TargetUser」のnullになってゐる領域に、向かせたいユーザーのIDを入れて、「TargetAtLocalUser」のチェックを外す。
![](https://assets.st-note.com/img/1717403997254-xDhoqvoIRp.png?width=1200)
後述のAutoLookAtUserでも同樣の動きができる。
「TagetedUser」のnullになってゐる領域に、向かせたいユーザーのIDを入れて、「AutoTarget」のチェックを外す。
![](https://assets.st-note.com/img/1717404965919-jmUEzxHlEg.png?width=1200)
特定のユーザーのIDを狙って取得する方法はよく解らなかった。
そのため筆者は、一旦「AutoTarget」にチェックを入れて距離を調整し、目的のユーザーにTargetが定まったのを見計らって「AutoTarget」のチェックを外す。といふやり方をしてゐる。
「一番近い」特定の「自分」だけに向かせる(AutoLookAtUser)
AutoLookAtUserを用ゐる。AutoLookAtUserは、LookAtUserと同じ階層にある。
![](https://assets.st-note.com/img/1717407885016-aY4H5v4TbY.png?width=1200)
このコンポーネントは、充てた瞬間から動作する。このコンポーネントの初期値での動き方は以下の通り。
「RetargetDistance(注視對象の再設定をする距離)」で決めた距離(デフォルトでは0.5メートル)の中にゐる、最も近いユーザーを注視する
注視中のユーザーがRetargetDistance内に居るうちは、そのユーザーを注視しつづける
注視してゐるユーザーがRetargetDistanceよりも遠くに行ったら、もう一度、誰を注視するかを決め直す
また「AutoTarget」のチェックを外すと、RetargetDistanceに關係なく、そのユーザーに注視が固定される。
「特定の物體など」に向かせる(LookAt)
片方がもう片方を注視する
LookAtを用ゐる。LookAtは、LookAtUserなどと同じ階層にある。
![](https://assets.st-note.com/img/1717423691416-zHvIT8EVDN.png?width=1200)
このコンポーネントは、そのままでは機能せず、「何に對して向くのか」を指定しなければならない。
以下のやうに向かせたい對象の物體(この場合は「Cone - Parent」)を右クリックで摑んでLookAtの「Target」のnullになってゐる所に持っていき、離す。
![](https://assets.st-note.com/img/1717491359681-z5opgyIjkm.png?width=1200)
成功すると、以下の通り、「輕」のオブジェが白いコーンを注視するやうになる。
コーンを動かしてもオブジェはコーンに向き續ける。
![](https://assets.st-note.com/img/1717491629174-6moFknLtXR.png?width=1200)
輕いオブジェ(右)がLookAtを入れた物體
雙方が向かひ合ふ
雙方向、つまり「2つの物體が互ひに向かひ合ふ」状態を作りたい時、雙方にLookAtを充てて、互ひの階層をTargetにすれば良い。
![](https://assets.st-note.com/img/1717492022242-U4MtmCCbg3.png?width=1200)
しかし、同じ階層にGrabbable系のコンポーネントがあると、うまく動かないことがある。
具體的には、摑んだり離したりする度に、摑んでゐた物體の向きがコロコロ變はる。と云った動きである。
それを防ぐには、以下の通りに親子化して、親の階層にGrabbableを充てると良い
![](https://assets.st-note.com/img/1717492298569-1p7yvMAI7L.png?width=1200)
![](https://assets.st-note.com/img/1717492312608-0FNlQEpbJd.png?width=1200)
かうすることで、摑んでもスムーズに向きを制禦できるやうになる。
![](https://assets.st-note.com/img/1717492411654-lh8dq29kBf.png?width=1200)
コーンの向きは、尖った方を正面にするために子のrotationを弄ってゐる
特定の座標に向かせる(LookAt)
ワールド座標の任意の座標
特定の物體から○○メートル離れた座標
これら抽象的な場所も注視させることができる。
ワールド座標の任意の座標
「Target」と「LocalSpace」を「null」にしておく(nullでない場合は右の「∅」を押す)。
「Default」を「WorldRoot」にする
「TargetPoint」に好きな値を入力する
![](https://assets.st-note.com/img/1718701006810-3NrIYbVwtB.png?width=1200)
ワールド座標の「0,0,0」を指定すると、スポーンポイントの中心を注視してゐる。
![](https://assets.st-note.com/img/1718701188591-nPbZj9EtXB.png?width=1200)
特定の物體から○○メートル離れた座標
「Target」を「null」にしておく(nullでない場合は右の「∅」を押す)
「LocalSpace」に基準とするスロット(物體)を入れる
「Default」は何でも良い。デフォルトでは「WorldRoot」
「TargetPoint」に好きな値を入力する
![](https://assets.st-note.com/img/1718701464744-4nyenXhIeJ.png?width=1200)
以下はLocalSpaceを「LookAt Test」を指定し、TargetPointに「0,0,0」とした樣子。
「LookAt Test」の原點(カラフルな矢印がある所)を注視してゐる。
![](https://assets.st-note.com/img/1718701574708-XjfopTXOTp.png?width=1200)
特定の軸に沿って向きを固定する(AxisRotationAligner)
「LookAt」は特定の座標を注視するため、その物體が移動すると角度も一緒に變はってしまふ。
![](https://assets.st-note.com/img/1719132054496-ddtexReyMy.jpg?width=1200)
現在、コーンは上を向いてゐるが……
![](https://assets.st-note.com/img/1719132057942-Rw5POJdBh8.jpg?width=1200)
これを防ぐことができるコンポーネントが「AxisRotationAligner」である。「AxisRotationAligner」の階層は以下。
![](https://assets.st-note.com/img/1719131817439-KkxpjalouM.png?width=1200)
![](https://assets.st-note.com/img/1719132274895-bhp0Rb9SPu.png?width=1200)
初期設定では、Y軸(高さ方向)が固定される。
「LocalDirection」や「TargetDirection」を變更することで、固定する向きを變へることが出來る。
![](https://assets.st-note.com/img/1719132392489-2q1CP7zqzU.jpg?width=1200)
![](https://assets.st-note.com/img/1719132392523-BoRBsZRyeS.jpg?width=1200)
寫眞では分かりづらいが、手首をひねってコーンを横倒しにしようとしても、コーンの向きは上を向いたままになる。
これに關連して、「○○Aligner」と名の付くコンポーネントの紹介記事も書いてます。
摑むと暴れ囘る原因と對策
例へば以下のやうな階層構造で、「Grabbable」コンポーネントを付けてゐるスロットを「Target」や「LocalSpace」に指定すると、摑んだ時に暴れ囘る。
![](https://assets.st-note.com/img/1718702028684-Hpjwtw09TH.png?width=1200)
對策としては、それ以外のスロットを指定すると良い。上記畫像で言へば、「LookAt Test」や「Box」である。
各コンポーネントの項目について
MaxSwingやMaxTwistと云った項目は、以前紹介したJointコンポーネントと共通するものであるから、そちらも參照されたい。
LookAt
![](https://assets.st-note.com/img/1717423691416-zHvIT8EVDN.png?width=1200)
persistent: このコンポーネントが付いたモノを保存する時、このコンポーネントも一緒に保存するかどうか
UpdateOrder: このコンポーネントの更新順序
Enabled: このコンポーネントを有效・無效
Target: 注視する對象を指定
【より細かく注視先を決める項目】
※以下の項目を弄るときは、↑にある「Target」をnullにしておく。
![](https://assets.st-note.com/img/1718700287979-1CO8EUhC5T.png?width=1200)
TargetPoint: ここで指定した座標を注視する
TargetPointSpace: どの座標系を使用するか
LocalSpace: 基準となる注視對象を指定する。nullだと「Default」の項目が參照される
UseParentSpace:
チェックを入れない: LocalSpaceで指定したスロット(物體)を注視
チェックを入れる: LocalSpaceで指定したスロットの親スロットを注視。(なので、WorldRoot直下の物をLocalSpaceにしてゐると事實上WorldRootを參照する)
Default: LocalSpaceが「null」の時、どこを參照するか。
WorldRoot: ワールドの座標
LocalUserSpace: (不明)
LocalUserRoot: ユーザーのローカル座標
OverrideRootSpace: 直譯すると「ルートスペースを優先する」だが、意味は不明
[Use Global Space]: 押すと、自動でLocalSpaceが「null」になり、UseParentSpaceのチェックが外れる
[Use Local Space]: 押すと、自動でLocalSpaceに「このコンポーネントを充てた物體の階層」が割り當てられ、UseParentSpaceのチェックが外れる
[Use Parent Space]: 押すと、自動でLocalSpaceに「このコンポーネントを充てた物體の階層」が割り當てられ、UseParentSpaceのチェックが入る
【どんな風に向かせるか】
![](https://assets.st-note.com/img/1718700299467-THwBr3c0XI.png?width=1200)
Up: 對象に注目する時、どの軸を上にするか
RotationOffset: その物體の向きを何度ずらすか
SwingReference: どの軸でSwingするか。複數の軸を組み合はせて斜めにもできる
TwistReference: どの軸でTwistするか。複數の軸を組み合はせて斜めにもできる
MaxSwing: 3Dスティック風の動きをさせる時の最大角。角度を數値で指定。角度を數値で指定。0で固定。90よりも大きい數値を入れても無意味。
MaxTwist: ターンテーブル風の動きをさせる時の最大角。角度を數値で指定。0で固定。180よりも大きい數値を入れても無意味。
_target: このコンポーネントで算出した數値をどの物體の囘轉に適用するか。初期値はそのコンポーネントを充てた物體の囘轉が自動で割り當てられる
[Set Swing Reference from current rotation]: 押すと、自動でSwingReferenceとTwistReferenceとの値がよく解らない數値になる。何の意味があるのかは謎
LookAtUser
![](https://assets.st-note.com/img/1717403627663-tK4mFps6AH.png?width=1200)
persistent: このコンポーネントが付いたモノを保存する時、このコンポーネントも一緒に保存するかどうか
UpdateOrder: このコンポーネントの更新順序
Enabled: このコンポーネントを有效・無效
TargetUser: 注視するユーザーを指定
TargetAtLocalUser: 全てのユーザーを注視する
SourcePositionOffset: (恐らく)注視對象から何メートル視點をずらすか
Invert: 反轉。チェックを入れると逆を向く
RotationOffset: その物體の向きを何度ずらすか
PositionSource: ユーザーのどの部分を注視するか。「Head(頭)・View(目の位置)・Root(腰または足元)」の3つから選べる
AroundAxis: 「Axis」で決めた軸で固定。
Axis: 「AroundAxis」で固定する軸。例へば「x=0, y=1, z=0」だと左右にしか動かなくなる
_rotationDrive: このコンポーネントで算出した數値をどの物體の囘轉に適用するか。初期値はそのコンポーネントを充てた物體の囘轉が自動で割り當てられる
AutoLookAtUser
![](https://assets.st-note.com/img/1717407885016-aY4H5v4TbY.png?width=1200)
persistent: このコンポーネントが付いたモノを保存する時、このコンポーネントも一緒に保存するかどうか
UpdateOrder: このコンポーネントの更新順序
Enabled: このコンポーネントを有效・無效
RetargetDistance: 注視對象が切り替はる距離(メートル)。
LerpSpeed: 追從する速度。値が大きいほど素早く追從する。
TargetedUser: 注視するユーザーを指定
AutoTarget: チェックを入れると、「RetargetDistance」で決めた距離に基づいて注視するユーザーを自動で切り替へる。
ExcludeActiveUser: 直譯すると「アクティブユーザーを除外」だが、意味はよく解らない。
SwingReference: どの軸でSwingするか。複數の軸を組み合はせて斜めにもできる
TwistReference: どの軸でTwistするか。複數の軸を組み合はせて斜めにもできる
MaxSwing: 3Dスティック風の動きをさせる時の最大角。角度を數値で指定。角度を數値で指定。0で固定。90よりも大きい數値を入れても無意味。
MaxTwist: ターンテーブル風の動きをさせる時の最大角。角度を數値で指定。0で固定。180よりも大きい數値を入れても無意味。
_rotation: このコンポーネントで算出した數値をどの物體の囘轉に適用するか。初期値はそのコンポーネントを充てた物體の囘轉が自動で割り當てられる
AxisRotationAligner
![](https://assets.st-note.com/img/1719132274895-bhp0Rb9SPu.png?width=1200)
Persistent: このコンポーネントを充てられてゐる物をインベントリなどに保存する時に、このコンポーネントも一緒に保存するかどうか
UpdateOrder: このコンポーネントの更新順序
Enabled: このコンポーネントを有效・無效
LocalDirection:
TargetDirection:
向きを決める項目。この2つの違ひはよく解らなかった。
![](https://assets.st-note.com/img/1719132599361-GVZzR4Nlo2.png?width=1200)
これらの項目は「LookAt」を參照。
![](https://assets.st-note.com/img/1719132599178-OESQgK9NQI.png?width=1200)
LocalRotation: 現在のローカル座標における角度。あまり氣にしなくてよい。
_rotation: どの囘轉角度をこのコンポーネントで制禦するか。初期設定ではこのコンポーネントを充てたスロット(物體)のRotationが自動で充てられる。
この記事が気に入ったらサポートをしてみませんか?