質問: 画面中央から弾を飛ばしたい。 左クリックで弾を発射すると画面の右、左、真ん中付近と発射位置が変わってしまいます。 メインカメラに空のオブジェクトを子にして(当たり判定は発射する球体のコライダーがついていますが、トリガーにするをオンにしているので弾とぶつかることはないようにしています)そこから発射するようにしています。 何が原因で弾の発射位置が中心に固定されないのでしょうか? 視点と発射するオブジェクトの位置関係、コライダーは の動画のようになっています。 弾の発射位置の様子は の動画のようになっています。 中盤から後半部分が良く分かるかと...。 全く今回は再起動しても解決できず、頭を抱えています。 お分かりになられる方、どうか、ご教授お願い申し上げます。 ※追記します。 弾の出るスピードを落として実行した動画 と、別のスクリプトで発射速度を連射式にした動画 インスペクターの画像 ! を追加しました。 インスペクター内のSphere Colliderをオフにしても、動画の左右にも分かれて出る現象は変わらなかったです。 スクリプトを変更しても発射球体からの挙動は同じだったので、どこを修正すればよいのか初心者には更に見当がつかなくなりました。 情報があればお願いしたいです。引き続きよろしくお願い致します。 ■追記です。 あれから後、最小構成で新規にプロジェクトを作り直してみました。使っていたパーツはそのままです。やはり同現象は改善されませんでした。 以下のページにそのプロジェクトファイルをzipにしておいてあります。もし、見て頂ける方がおられましたらお願いします。 enter link description here
回答: 解決はしていませんが、この辺に何かありそうというご報告です。 CameraController.Update()の1行目に `Debug.Log(this.transform.position);` を仕込んで実行してみた所、キーボード・マウスから手を離し一切移動してないにも関わらず、Main Cameraの位置はほぼ毎フレーム変動していました。 不思議と、Scene/Game viewでは、位置が変わってる様子は確認できませんが、このフレーム毎にpositionが変動しているのが、弾の発生場所が変わってしまう理由かと思います。 ```characterController.Move(Velocity); //characterControllerをVelocity動かす``` ```characterController.Move(Velocity *Time.deltaTime); //characterControllerをVelocity* 時間の経過分動かす``` CameraController.Update()内のこの2行をコメントアウトした場合、もしくはMain CameraのRigidbodyをdisableにした場合、Main Cameraのpositionの変動は止まりました。 ここからは推測ですが、Character ControllerとRigidbodyの併用に原因があるかもしれません。 公式のドキュメントでこの2つの併用を禁止すると明記された記述は発見出来ませんでしたが、併用出来ないと解説してるブログがありました。 > Character Controller は、主に Rigidbody による物理特性を使用しない、1 人称や 3 人称のプレイヤー制御に使用されます。 > > > > > . > <CharacterControllerの問題点> > > ・rigidbodyとの併用が基本的に出来ない。 > > > > > 仕組みとしても、物理エンジンとは別の処理で動いてるCharacter Controllerに、物理エンジンからの力も加わったら、2つの処理が位置をそれぞれのルールで決めようとするので、おかしなことになるのも、そんなに違和感のある話じゃないと思います。 色々と検索した中で、併用した上でRigidbodyのIs Kinematic: trueにして、あくまで衝突検出の為に使うというのは、出来るらしいというのも見かけたので、Rigidbodyがダメというより、Character Controllerが位置をコントロールしてるところに、物理エンジンの力が作用するのがダメなのではと思い至りました。 前述の通り公式ドキュメントの中で併用できない事を明記したものは見つからなかったので、推測です。