質問: Vector3.zero; rigidbody.AddForce(moveForceMultiplier * (moveVector - rigidbody.velocity)); } } ``` 上記コードを機体のオブジェクトにアタッチし、カメラの子オブジェクトに機体オブジェクトをセットしてグループ化しました。 カメラの位置は機体の後方に配置し、機体に向いています。 ・質問1。 グループ化すると、機体が動くと、カメラもそれに追従するような動きになる、 つまり、カメラは常に一定の機体の後方だけを移すような挙動になるのかと思ったのですが、 カメラは固定されているような状態でした。 グループ化すると、常にグループ化したオブジェクトは一体となって動くと思っていたのですが、 一体化して動かないのは何故なのでしょうか? ・質問2。 下記コードがどういった処理をしているのかわかりません。 ``` rigidbody.AddForce(moveForceMultiplier * (moveVector - rigidbody.velocity)); ``` 上記コードをコメントアウトするのとしないのとでゲームを実行してみたいのですが、その違いもわかりませんでした。 moveVectorはVector3.zeroを入れているみたいですが、用途によっては、他のベクトルを入れることもあるのでしょうか? (moveVector - rigidbody.velocity)が何を意味しているのか、 また、書いている途中で気づいたのですが、moveForceMultiplierは宣言だけされていて、0みたいですね。 結果的に、rigidbody.AddForce(0);が実行されているように思えるのですが、このコードは不要ですか? ・質問3。 カメラや機体のトランスフォームのRotationを(0,0,0)に設定していて、カメラも機体もワールドのZ軸方向を向くようにしているのですが、 ゲームを実行して、しばらく機体を左右上下に動かす操作をすると、 だんだん機体がカメラに近づいて(機体が後方に動いてくる)のは何故でしょうか? Z軸方向への移動処理は行っていないはずなのですが。
回答: **質問1について** 単なる思い違いではないでしょうかね? ご質問文によると、「機体をカメラの子にした」のですよね?でしたら、子である機体の`Transform`が`Rigidbody`の作用によって移動したとしても、親であるカメラの`Transform`に影響は及ばないかと思います。 逆に「カメラを機体の子にした」のであればカメラの位置が親である機体の座標系の運動に影響され、おっしゃるように常に機体後方に追従するかと思います。 **質問2について** この行はインスペクター上で`moveForceMultiplier`に0より大きな値をセットすると有効に作用してくるでしょう。引数に`rigidbody.velocity`を使った項がありますが、これにより機体に「`moveForceMultiplier`×現在の機体の速さ」の大きさを持つ力が運動方向と逆向きに加わります。この力の成分はちょうど空気抵抗のように作用し、プレイヤーが一方向にキー入力を続けても速度が際限なく大きくなってしまうのを防ぐとともに、キー入力をやめると次第に減速していく動きをさせることができるはずです。 dragを調整するのでも同様に運動に対する抵抗を発生させられるでしょうが、どちらを選ぶかは好みの問題でしょうかね...?もし今後、抵抗力のかかり方を複雑に制御するつもりでしたら`AddForce`の方がコードを読んだときに作用が明解になっていいかもしれません。 `moveVector`の項については、詳しい事情は0skskskさんにおうかがいしないとわかりませんが、おそらく製作途中で動きを検討している段階であるために、まだコードが整理されていないだけではないでしょうか。 現状では常に`moveVector`がゼロなので無駄な記述になっていますが、想像しますに初期のコードでは`moveVector`にプレイヤーの入力を入れていたのだろうと思います。そこからプレイヤーの入力だけ一旦別の`AddForce`に切り出して検討し、仕様が固まってきたところで再度整理するご予定なのかもしれません。 **質問3について** この現象については、すみませんがちょっと試したかぎりでは再現せず、よくわかりません... おっしゃる通りZ軸方向に力は加えていませんので、理屈上はZ方向に移動することはないはずです。ですが`rigidbody`はこのコードだけからは読み取れない別のオブジェクトから力を受ける可能性があり、もし上記のような抵抗力やconstraintsによる運動制限がなければ、予期しない力積が加わった結果がいつまでも残って次第に移動してしまう...といったことが起こるかもしれません。 機体がカメラに寄ってくる速さはどの程度でしょうか?小数点以下何桁...のようなわずかなものでしたらシミュレーション上の誤差の可能性もありますね。さもなければ何か`rigidbody`に作用する要因がありそうです。