private void _剛体を作成する(List <剛体> 剛体リスト) { _剛体キャッシュリスト = new List <剛体キャッシュ>(剛体リスト.Count); _Bulletの剛体リスト = new List <RigidBody>(剛体リスト.Count); foreach (var 剛体 in 剛体リスト) { var 一時剛体 = new 剛体キャッシュ(剛体); var 初期行列 = 一時剛体.初期姿勢行列; _剛体キャッシュリスト.Add(一時剛体); CollisionShape bullet形状; switch (剛体.形状) { case 剛体.剛体形状.球: bullet形状 = new SphereShape(剛体.サイズ.X); break; case 剛体.剛体形状.箱: bullet形状 = new BoxShape(剛体.サイズ.X, 剛体.サイズ.Y, 剛体.サイズ.Z); break; case 剛体.剛体形状.カプセル: bullet形状 = new CapsuleShape(剛体.サイズ.X, 剛体.サイズ.Y); break; default: throw new System.Exception("Invalid rigid body data"); } var 剛体プロパティ = new 剛体物性(剛体.質量, 剛体.反発力, 剛体.摩擦力, 剛体.移動減衰, 剛体.回転減衰); var 超越プロパティ = new 物理演算を超越した特性( 物理演算の影響を受けないKinematic剛体である: (剛体.物理演算 == 剛体.剛体の物理演算.ボーン追従), 自身の衝突グループ番号: (CollisionFilterGroups)(1 << 剛体.グループ), 自身と衝突する他の衝突グループ番号: (CollisionFilterGroups)剛体.非衝突グループフラグ); var bullet剛体 = _Bullet管理.剛体を作成する(bullet形状, 初期行列, 剛体プロパティ, 超越プロパティ); _Bulletの剛体リスト.Add(bullet剛体); } }
public RigidBody 剛体を作成して返す(CollisionShape 剛体の形, Matrix 剛体のワールド変換行列, 剛体物性 剛体の物性, 物理演算を超越した特性 物理演算を超越した特性) { var mass = (物理演算を超越した特性.物理演算の影響を受けないKinematic剛体である) ? 0 : 剛体の物性.質量; _collisionShapes.Add(剛体の形); var localInertia = new BulletSharp.Math.Vector3(0, 0, 0); if (mass != 0) { 剛体の形.CalculateLocalInertia(mass, out localInertia); } var motionState = new DefaultMotionState(剛体のワールド変換行列.ToBulletSharp()); var rbInfo = new RigidBodyConstructionInfo(mass, motionState, 剛体の形, localInertia); var body = new RigidBody(rbInfo) { Restitution = 剛体の物性.反発係数, Friction = 剛体の物性.摩擦係数, }; body.SetDamping(剛体の物性.移動減衰係数, 剛体の物性.回転減衰係数); float linearDamp = body.LinearDamping; float angularDamp = body.AngularDamping; if (物理演算を超越した特性.物理演算の影響を受けないKinematic剛体である) { body.CollisionFlags = body.CollisionFlags | CollisionFlags.KinematicObject; } body.ActivationState = ActivationState.DisableDeactivation; _dynamicsWorld.AddRigidBody(body, 物理演算を超越した特性.自身の衝突グループ番号, 物理演算を超越した特性.自身と衝突する他の衝突グループ番号); return(body); }
public RigidBody 剛体を作成する(CollisionShape 剛体の形, Matrix 剛体のワールド行列, 剛体物性 剛体の物性, 物理演算を超越した特性 物理演算を超越した特性) { return(_剛体ファクトリ.剛体を作成して返す(剛体の形, 剛体のワールド行列, 剛体の物性, 物理演算を超越した特性)); }