1つには、ボールを打つはずのラケットがあり、ラケットはマウスによって直接制御されます。すなわち、バットはマウス軸を使ったマウスとtransform.translate()関数を使ってラケットを動かします。マウスで制御されたラケットで速く動くボールの衝突検出に問題がある
私はUnity3dの物理がマウスで直接ラケットの動きを正しく翻訳せず、ボールにそれに応じて影響を及ぼさないと思っていました。私はカスタムを書く必要があり、真実であることが判明しました。
しかし、ボールの衝突は、ラケットが動いているときに正しく検出されていません。それがまだ残っていれば、すべてがうまくいき、ボールが私のように振る舞います。
今私は、長さ0.6Fのレイ・キャスト4個をボールに付けて、複雑なベクトル計算をした後、ボールの速度を計算するカスタム・フィジックス・スクリプト(私はスクリプトのためにC#を使用しています)ラケットを打った後に、rigidbody.velocity = calculateVelocity()を使ってボールの速度に直接適用します。ラケットが動いていないときにはもう一度うまく動いていますが、ラケットを動かすときにはうまくいきません。
組み込み物理機能と衝突検出の使用:ラケットが動いているときに、ボールがラケットをまっすぐに通過することがありますが、時々速度が遅くなることがあります(信じられないほどのレベルまで)。
私のスクリプトを使用して速度を計算する:問題は同じですが、コライダー(ラケット)の法線を印刷するときに何が問題なのかを識別できます。時には右の法線を与え、時には法線ベクトルの負の値を与えます。つまり、上の面をまっすぐに通り、コライダー(ラケット)の底面でヒットを検出します。
私がしようとしているもの:
をコライダーのサイズを大きくする(それはラケットの広い箱コライダーで動作しますが、その後明らかにボールが離れたラケットからかなり離れた場所から移動し、私自身のスクリプトはここで働きますが、デフォルトの物理学はラケットが動かされたときに奇妙な結果を出します)、要するに私が望む現実は得られません。
固定タイムスタンプを0.001に減らすと、物事ははるかに改善されましたが、結果から非常に遠く離れています。また、ボールは再びボールの間違った面を頻繁に選んでいます。衝突検出を連続的な動的に変更すること。どちらも改善されませんでした。
そして間違った側に加えて、衝突時に選んだ、私が観察している別の問題ではラケットを跳ね返った後、ボールが移動しているが、ラケットを速く移動され、それは代わりの完全な円弧状に移動するということですボールの前に何とか表示され、結果として2ヒットとなる。目に見えるものに基づいた推測です。
また、Unity3dの組み込み物理によってラケットの「動き」の部分が読み取られておらず、マウスがボールを打つことでラケットが動いているときに奇妙な動作が発生することが明らかです。
私は立ち往生しています。どこから移動するのかわかりません。私が間違っていることを教えてください。
私はラケットとボールの両方に最高速度を設定しようとしましたが、おそらく環境全体のサイズを増やすことができます。これは、衝突者の右側を検出する可能性が高いかもしれません。私はJustin808のソリューションを実装し、すべてのサイズを増やします。 – SpeedBirdNine
このことはすごくうまくいって、私はすべてのサイズを2倍にしました。今は衝突がないわけではありません。私はまだジャスティン808が話している他の問題があります。一瞬でラケットがボールの前にあり、次のフレームがボールの後ろにありますが、少なくとも私はコードで扱うことができる2つの異なる衝突を見ています!どうもありがとう!私には2分しかかかりませんでした。今私は2つの衝突を解決するジャスティンのソリューションを実装するつもりです。この時間までに誰か他の説明があれば、それも共有してください! – SpeedBirdNine
問題を解決しました。ラケットのコライダーがボールを失っていないので、ボールの前と次の位置の間にレイキャストを配置する必要はありませんでした。他のものは、マウスによるラケットの動きがボールに加えられた追加の力に変換されないということです。私はこの部分を自分で書かなければならず、オリジナルの物理が干渉しないようにラケットコライダーにistriggerをtrueに設定しなければなりませんでした。しかし、今度は複数回打つという問題がありました。最初に打つと偽になり、1秒後に真実になり、ボールが別のオブジェクトに当たったときに、フラグを使って解決しました。これは動作します! – SpeedBirdNine