0 支持
54 閲覧

左クリックで弾を発射すると画面の右、左、真ん中付近と発射位置が変わってしまいます。
メインカメラに空のオブジェクトを子にして(当たり判定は発射する球体のコライダーがついていますが、トリガーにするをオンにしているので弾とぶつかることはないようにしています)そこから発射するようにしています。
何が原因で弾の発射位置が中心に固定されないのでしょうか?

視点と発射するオブジェクトの位置関係、コライダーは
https://youtu.be/sYj4ezr5Nsw
の動画のようになっています。

弾の発射位置の様子は
https://youtu.be/pTLDo3dh0wc
の動画のようになっています。
中盤から後半部分が良く分かるかと…。

全く今回は再起動しても解決できず、頭を抱えています。
お分かりになられる方、どうか、ご教授お願い申し上げます。

※追記します。
弾の出るスピードを落として実行した動画
https://youtu.be/FgUZXMoXSMg
と、別のスクリプトで発射速度を連射式にした動画
https://youtu.be/Se-EKwk-Cxs
インスペクターの画像

を追加しました。
インスペクター内のSphere Colliderをオフにしても、動画の左右にも分かれて出る現象は変わらなかったです。
スクリプトを変更しても発射球体からの挙動は同じだったので、どこを修正すればよいのか初心者には更に見当がつかなくなりました。
情報があればお願いしたいです。引き続きよろしくお願い致します。

■追記です。
あれから後、最小構成で新規にプロジェクトを作り直してみました。使っていたパーツはそのままです。やはり同現象は改善されませんでした。
以下のページにそのプロジェクトファイルをzipにしておいてあります。もし、見て頂ける方がおられましたらお願いします。
enter link description here

閉鎖
初心者 (220 ポイント)
閉鎖 | 54 閲覧

回答 1

+1 支持
ベストアンサー

解決はしていませんが、この辺に何かありそうというご報告です。

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 人称のプレイヤー制御に使用されます。
https://docs.unity3d.com/ja/2019.4/Manual/class-CharacterController.html

.

<CharacterControllerの問題点>
・rigidbodyとの併用が基本的に出来ない。
http://uwnskynet.blog.fc2.com/blog-entry-150.html

仕組みとしても、物理エンジンとは別の処理で動いてるCharacter Controllerに、物理エンジンからの力も加わったら、2つの処理が位置をそれぞれのルールで決めようとするので、おかしなことになるのも、そんなに違和感のある話じゃないと思います。

色々と検索した中で、併用した上でRigidbodyのIs Kinematic: trueにして、あくまで衝突検出の為に使うというのは、出来るらしいというのも見かけたので、Rigidbodyがダメというより、Character Controllerが位置をコントロールしてるところに、物理エンジンの力が作用するのがダメなのではと思い至りました。
前述の通り公式ドキュメントの中で併用できない事を明記したものは見つからなかったので、推測です。

一人前回答者 (1.5k ポイント)
選択
0
kanonji様。
とてもとても貴重な解析をありがとうございます!
「Character ControllerとRigidbodyの併用に原因」というのは、何となくですがありそうな気がします。
Character Controllerは、確かジャンプをする際にこれを使うと良いという解説サイトを見て取り入れたのですが、どこかで干渉しあっているんでしょうか。

因みに、この書き込みの後、一つ謎の現象を見つけまして、起動後に、Shootのスクリプトをon,offさせると正常に中央のみから発射させることができるようになりなました。
そこで、最初はoffで起動して、別のスクリプトからShootのスクリプトをonにすることで強制的に(?) 中央から弾を発射できるようにすることはできました。

ですが、やはり根本的な解決にはなっていなくて、また他でも同様のご質問をさせて頂いているのですが、どこからも「これ」という解決策も見つからず、モヤモヤしておりました。
しかし、kanonji様の今回のご回答はとてもグッとくる納得できる内容であり、やはり初心者レベルでは判断できかねる現象なんだなと。

ようやく解決に向けての糸口が見えたことはとても嬉しく、大感謝でございます。
本当に本当にありがとうございました!!

関連する質問

0 支持
0 回答
こがらし0917 初心者 (140 ポイント) 6/10 質問 | 86 閲覧
0 支持
1 回答
Fuktsu8 初心者 (120 ポイント) 5/10 質問 | 49 閲覧
0 支持
0 回答
0 支持
1 回答
玉カエル 初心者 (160 ポイント) 1/15 質問 | 250 閲覧
0 支持
1 回答
tensaku 初心者 (440 ポイント) 2020 10/24 質問 | 167 閲覧
2021-02-08 質問・回答をMarkdownで入力できるようにしました。
2020-09-03 新たなスパム対策を導入しました。

157 質問

153 回答

159 コメント

188 ユーザー