前提・実現したいこと
directx11でプレイヤーが斜めに傾いた壁との衝突時に、壁沿りベクトルを使って壁に沿って移動するようにしたいです。
現状ではプレイヤー(OBB)と斜めの壁(OBB)との衝突時に、プレイヤーの進行ベクトルに沿って動くようになったのですが、プレイヤーの進行ベクトルに沿って動くので壁を突き抜けてしまいます。
壁沿りベクトル関数内の計算を壁に沿うように変えたいです。
該当のソースコード
c++
1//壁沿りベクトル 2//front : 進行ベクトル 3//normal: 衝突点での法線ベクトル 4Vector3 CCollision::CalcWallScratchVector(Vector3& front, const Vector3& normal) 5{ 6 normal_n = GetMath()->Vector_Normalize(normal);//法線ベクトルを正規化 7 //進行ベクトルの逆ベクトルと法線ベクトルの内積 8 StaggeredNormal.x = -GetMath()->Dot3DX(front, normal_n); 9 StaggeredNormal.y = -GetMath()->Dot3DY(front, normal_n); 10 StaggeredNormal.z = -GetMath()->Dot3DZ(front, normal_n); 11 //進行ベクトルの方向 12 out.x = front.x + StaggeredNormal.x * normal.x; 13 out.y = front.y + StaggeredNormal.y * normal.y; 14 out.z = front.z + StaggeredNormal.z * normal.z; 15 return out; 16}
c++
1// 2//実行部分 3//プレイヤー(OBB)と斜めの壁(OBB)の当たり判定 4if (GetCollision()->CollisionOBB3D(GetModel()->GetPos(),//プレイヤーの位置 5 GetModel()->GetSize(),//プレイヤーの当たり判定のサイズ 6 GetModel()->GetRot(),//プレイヤーの向き 7 GetFenceOutSide()->GetPosOBBNo1(),//壁の位置 8 GetFenceOutSide()->GetSizeOBBNo1(),//壁の当たり判定のサイズ 9 GetFenceOutSide()->GetRotOBBNo1(),//壁の向き 10 &GetFenceOutSide()->GetFenceNormal[0]))//壁の法線ベクトル 11 { 12 PrintDebugProc("[FenceOutSideOBBHitPlayeOBB : No1 : Hit]\n"); 13 //壁沿りベクトル 14 //引数1 : プレイヤーの進行ベクトル(正面ベクトル) 15 //引数2 : 壁の衝突時の法線ベクトル(CollisionOBB3D関数の7つ目の引数に設定した法線ベクトルを格納したもの) 16 *GetModel()->GetPos() += GetCollision()->CalcWallScratchVector(GetModel()->vecForward, GetCollision()->Obj2_Normalvector); 17 }
試したこと
↓参考にしたサイト
http://marupeke296.com/COL_Basic_No5_WallVector.html
補足情報(FW/ツールのバージョンなど)
Visual Studio Community 2019
Windows10
DirectX11