プールされたオブジェクトに相対力を適用することに問題があります。新しい力を追加する前にリジッドボディから以前の力を取り除く
私はすべての私の弾丸が再利用の準備ができているオブジェクトプールを持っています。弾丸は使用されていないときは無効になっています。
プレイヤーは自分の武器を撮影するとき、弾丸がobjectpoolから引っ張られ、次の弾丸で行われ、この順序で:
- のsetActive(真)
- transform.position = bulletSpawnPosition
- transform.rotation =ガンの回転/バレル
- RigidBody.AddRelativeForce(Vector3.forward倍速、ForceMode.Impulse)
これは1人のプレイヤーにのみ正しく動作します。私はオブジェクトプールから弾丸を引っ張る別のプレイヤーがいるとき、弾丸は前のプレイヤーの回転を維持するように見えるので、力は間違った方向に加えられます。
私ができることの1つは、回転の設定と相対的な力の適用との間に次のフレームを待つことですが、それは間違っています。 何か不足していますか?下のコードは少し修正されていますが、何が起こっているかを絞り込んでいます。
function Shoot() {
GameObject poolObject = GetObjectFromPool();
poolObject.SetActive(true);
poolObject.transform.position = transform.position;
poolObject .transform.rotation = transform.rotation;
if (poolObject != null)
{
//add force
Rigidbody rBody = poolObject.GetComponent<Rigidbody>();
rBody.AddRelativeForce(Vector3.forward * ProjectileSpeed.Value, ForceMode.Impulse);
}
}
私はそれをして、この問題とは関係がありませんでした。弾丸が無効にされ、再使用のためにマークされたとき、velocityとangularVelocityをリセットします。コードは、リセットではなく弾丸の使用を示しています。新しいポジションとローテーションを設定することはリセット時にやりたいことではありません – Marijn