クラス PhysicsScene

2D物理シミュレーションのシーン [詳細]

すべてのメンバ一覧

Public 型

enum  BroadOpType { Or, And }
 

collisionFilterとgroupFilterの組み合わせを変更する

[詳細]
enum  SleepAlgorithmType { BroadphaseBase, NarrowphaseBase }
 

スリープ状態をチェックする際のアルゴリズムをスイッチする

[詳細]

Public メソッド

bool RaycastHit (ref RayHit ray)
 レイキャストチェック
bool RaycastHit (ref RayHit ray, uint collisionFilter, uint groupFilter)
 レイキャストチェック
 PhysicsScene ()
  シーンコンストラクタ
void Simulate ()
 シミュレートする
void Simulate (int click_index, Vector2 click_pos, Vector2 diff_pos)
 シミュレートする
PhysicsShape AddSphereShape (float radius)
 シーンに球形状を追加する
PhysicsShape AddBoxShape (Vector2 width)
 シーンにボックス形状を追加する
PhysicsShape AddConvexShape (Vector2[] pos, int num)
 シーンに凸形状を追加する
PhysicsShape AddConvexHullShape (Vector2[] pos, int num)
 シーンにランダム頂点列による凸包形状を追加する
PhysicsShape AddLineChainShape (Vector2[] pos, int num)
 シーンに接続したライン形状生成を追加する
PhysicsBody AddBody (int shapeIndex, float mass)
 剛体をシーンに追加する
PhysicsBody AddBody (PhysicsShape shape, float mass)
 剛体をシーンに追加する
Vector2 MergeCompound (PhysicsBody[] bodyList, int num, bool flag=true)
 剛体のマージ
PhysicsJoint AddJoint (int bodyIndex1, int bodyIndex2, Vector2 anchorPos)
 ジョイントをシーンに追加する
PhysicsJoint AddJoint (PhysicsBody body1, PhysicsBody body2, Vector2 anchorPos)
 ジョイントをシーンに追加する
PhysicsSpring AddSpring (int bodyIndex1, int bodyIndex2, Vector2 anchorPos1, Vector2 anchorPos2)
 ジョイントをシーンに追加する
PhysicsSpring AddSpring (PhysicsBody body1, PhysicsBody body2, Vector2 anchorPos1, Vector2 anchorPos2)
 スプリングをシーンに追加する
int DeleteJoint (int index)
 ジョイント削除
int DeleteJoint (PhysicsJoint joint)
 ジョイント削除
int DeleteSpring (int index)
 スプリング削除
int DeleteSpring (PhysicsSpring spring)
 スプリング削除
int DeleteBody (int index)
 剛体削除
int DeleteBody (PhysicsBody body)
 剛体削除
bool QueryContact (uint index1, uint index2)
 2つの剛体の間に衝突があったかどうかの記録を調べる
bool QueryContact (PhysicsBody body1, PhysicsBody body2)
 2つの剛体の間に衝突があったかどうかの記録を調べる
int QueryContactTrigger (uint index, uint[] indexlist)
 トリガー剛体と他の剛体の間に衝突があったかチェックする
int GetShapeIndex (PhysicsShape shape)
 衝突形状のインデックスを調べる
int GetBodyIndex (PhysicsBody body)
 剛体のインデックスを調べる
int GetJointIndex (PhysicsJoint joint)
 ジョイントのインデックスを調べる
int GetSpringIndex (PhysicsSpring spring)
 スプリングのインデックスを調べる
PhysicsShape GetShape (int index)
 衝突形状を得る
PhysicsBody GetBody (int index)
 剛体を得る
PhysicsJoint GetJoint (int index)
 ジョイントを得る
PhysicsSpring GetSpring (int index)
 スプリングを得る
void AddIgnorePair (uint index1, uint index2)
 衝突を無視するペアをリストに加える
void AddIgnorePair (PhysicsBody body1, PhysicsBody body2)
 衝突を無視するペアをリストに加える
void RemoveIgnorePair (uint index1, uint index2)
 衝突を無視するペアをリストから削除する
void RemoveIgnorePair (PhysicsBody body1, PhysicsBody body2)
 衝突を無視するペアをリストから削除する
bool CheckOutOfBound (PhysicsBody body)
  シミュレーションエリアを出たかどうかをチェック、出ていたらシミュレーションに考慮されない
int CheckPicking (ref Vector2 click_pos, ref Vector2 diff_pos, bool rigorous_check)
 タッチポイントの下にある剛体を探す
int CheckForcePicking (ref Vector2 click_pos, ref Vector2 diff_pos, bool rigorous_check)
 タッチポイントの下にある剛体を探す
virtual void InitScene ()
 シーンの初期化を定義する
virtual void ReleaseScene ()
 デバッグレンダリングリソースを含む、リソースの解放をここで定義する
virtual void KeyboardFunc (GamePadButtons ePad)
 ゲームパッドイベントの扱いを定義
virtual void UpdateFuncAfterSim ()
 ポストシミュレーション処理, 衝突情報に基づく処理などを定義する
virtual void UpdateFuncBeforeSim ()
 プレシミュレーション処理, 位置情報に基づき、外力を加えるなどの処理を定義する
virtual void DrawAllBody (ref GraphicsContext graphics, ref ShaderProgram program, Matrix4 rendering_scale, int click_index)
 レンダリングをユーザーが定義する
virtual void DrawAdditionalInfo (ref GraphicsContext graphics, ref ShaderProgram program, Matrix4 rendering_scale)
 デバッグレンダリングをユーザーが定義する

Public 変数

int numBody = 0
 シーン中の剛体数
int numJoint = 0
 シーン中のジョイント数
int numSpring = 0
 シーン中のスプリング数
int numShape = 0
 シーン中の形状数
int numBroadPair = 0
 broad phase衝突判定により衝突可能性のあるペア数
int numPhysicsSolverPair = 0
 narrow phase衝突判定により衝突するペア数
int numOldPhysicsSolverPair = 0
 前のnarrow phase衝突判定により衝突するペア数
PhysicsBody[] sceneBodies = new PhysicsBody[maxBody]
 シーン中の剛体リスト
PhysicsShape[] sceneShapes = new PhysicsShape[maxShape]
 シーン中の形状リスト
uint[] broadPair = new uint[maxContacts]
 シーン中のbroad phase衝突ペアリスト
PhysicsSolverPair[] solverPair = new PhysicsSolverPair[maxContacts]
 シーン中の衝突ペアリスト
PhysicsJoint[] sceneJoints = new PhysicsJoint[maxJoint]
 シーン中のジョイントリスト
PhysicsSpring[] sceneSprings = new PhysicsSpring[maxSpring]
 シーン中のスプリングリスト
uint[] compoundMap = new uint[maxBody]
  コンパウンド形状対応マップ
float simDt = 1.0f/60.0f
 シミュレーションのタイムステップ
Vector2 gravity = new Vector2(0, -9.8f)
 シーン中の重力加速度
Vector2 sceneMin = new Vector2(-1000.0f, -1000.0f)
 シミュレーションエリアの境界
Vector2 sceneMax = new Vector2(1000.0f, 1000.0f)
 シミュレーションエリアの境界
ulong sceneFrame = 0
 このシーンのシミュレーションが始まってからのフレーム数
string sceneName = "Scene made by Physics2DEngine"
 シミュレーションのシーン名
int numIgnorePair = 0
 シーン中の衝突を無視するペアの数
uint[] ignorePair = new uint[maxIgnore]
 シーン中の衝突を無視するペアリスト
bool printPerf = false
 シミュレーション中の各計算フェーズのパフォーマンスを出力する
bool uniqueProperty = true
 シーン特性にユニークな値を使うか
float penetrationRepulse = 0.2f
 めり込みに対する反発力の加速係数
float penetLimit = 0.03f
 めり込みに対する許容度
float tangentFriction = 0.3f
 反発に対する接線方向の摩擦係数
float restitutionCoeff = 0.0f
 反発に対する反発係数
SleepAlgorithmType sleepAlgorithm = SleepAlgorithmType.BroadphaseBase
 スリープアルゴリズムがブロードフェーズによるか、ナローフェーズによるか
BroadOpType filterOp
 filterOp

プロパティ

int NumBody [get, set]
 setter and getter of numBody
int NumJoint [get, set]
 setter and getter of numJoint
int NumSpring [get, set]
 setter and getter of numSpring
int NumShape [get, set]
 setter and getter of numShape
int NumBroadPair [get, set]
 setter and getter of numBroadPair
int NumPhysicsSolverPair [get, set]
 setter and getter of numPhysicsSolverPair
int NumOldPhysicsSolverPair [get, set]
 setter and getter of numOldPhysicsSolverPair
PhysicsBody[] SceneBodies [get, set]
 setter and getter of sceneBodies
PhysicsShape[] SceneShapes [get, set]
 setter and getter of sceneShapes
PhysicsJoint[] SceneJoints [get, set]
 setter and getter of sceneJoints
PhysicsSpring[] SceneSprings [get, set]
 setter and getter of sceneSprings
float SimDt [get, set]
 setter and getter of simDt
Vector2 Gravity [get, set]
 setter and getter of gravity
Vector2 SceneMin [get, set]
 setter and getter of sceneMin
Vector2 SceneMax [get, set]
 setter and getter of sceneMax
ulong SceneFrame [get, set]
 setter and getter of sceneFrame
string SceneName [get, set]
 setter and getter of sceneName
int NumIgnorePair [get, set]
 setter and getter of numIgnorePair
uint[] IgnorePair [get, set]
 setter and getter of ignorePair
bool PrintPerf [get, set]
 setter and getter of printPerf
bool UniqueProperty [get, set]
 setter and getter of uniqueProperty
float PenetrationRepulse [get, set]
 setter and getter of penetrationRepulse
float PenetLimit [get, set]
 setter and getter of penetLimit
float TangentFriction [get, set]
 setter and getter of tangentFriction
float RestitutionCoeff [get, set]
 setter and getter of restitutionCoeff
BroadOpType FilterOp [get, set]
 setter and getter of filterOp
uint[] CompoundMap [get, set]
 setter and getter of compoundMap
PhysicsSolverPair[] SolverPair [get]
 getter of solverPair
uint[] BroadPair [get]
 getter of broadPair
SleepAlgorithmType SleepAlgorithm [get, set]
 setter and getter of sleepAlgorithm

説明

2D物理シミュレーションのシーン


列挙型

collisionFilterとgroupFilterの組み合わせを変更する

列挙型の値:
Or 

OR操作

And 

AND操作

スリープ状態をチェックする際のアルゴリズムをスイッチする

列挙型の値:
BroadphaseBase 

broadphase collisionに基づいて

NarrowphaseBase 

narrowphase collisionに基づいて


メソッド

PhysicsBody AddBody ( int  shapeIndex,
float  mass 
)

剛体をシーンに追加する

引数:
shapeIndex衝突形状のインデックス
mass質量
戻り値:
 剛体への参照

シーンの剛体数が自動的にインクリメントされる

PhysicsBody AddBody ( PhysicsShape  shape,
float  mass 
)

剛体をシーンに追加する

引数:
shape衝突形状へのリファレンス
mass質量
戻り値:
 剛体への参照

シーンの剛体数が自動的にインクリメントされる

PhysicsShape AddBoxShape ( Vector2  width)

シーンにボックス形状を追加する

引数:
widthボックスの半分の縦横長さ

縦横長さではなく、縦横半分の長さである
シーンの衝突形状数が自動的にインクリメントされる

PhysicsShape AddConvexHullShape ( Vector2[]  pos,
int  num 
)

シーンにランダム頂点列による凸包形状を追加する

引数:
posランダムな頂点列
num頂点数

頂点リストの数の最大は30個
シーンの衝突形状数が自動的にインクリメントされる

PhysicsShape AddConvexShape ( Vector2[]  pos,
int  num 
)

シーンに凸形状を追加する

引数:
pos凸形状の頂点リスト
num頂点リストの数

頂点リストの数の最大は30個
シーンの衝突形状数が自動的にインクリメントされる

void AddIgnorePair ( uint  index1,
uint  index2 
)

衝突を無視するペアをリストに加える

引数:
index1剛体ペアの一方
index2剛体ペアのもう一方
void AddIgnorePair ( PhysicsBody  body1,
PhysicsBody  body2 
)

衝突を無視するペアをリストに加える

引数:
body1剛体ペアの一方
body2剛体ペアのもう一方
PhysicsJoint AddJoint ( int  bodyIndex1,
int  bodyIndex2,
Vector2  anchorPos 
)

ジョイントをシーンに追加する

引数:
bodyIndex1剛体ペアの一方のインデックス
bodyIndex2剛体ペアのもう一方のインデックス
anchorPosジョイントのアンカーポイント
戻り値:
 ジョイントへの参照

シーンのジョイント数が自動的にインクリメントされる

PhysicsJoint AddJoint ( PhysicsBody  body1,
PhysicsBody  body2,
Vector2  anchorPos 
)

ジョイントをシーンに追加する

引数:
body1剛体ペアの一方のインデックス
body2剛体ペアのもう一方のインデックス
anchorPosジョイントのアンカーポイント
戻り値:
 ジョイントへの参照

シーンのジョイント数が自動的にインクリメントされる

PhysicsShape AddLineChainShape ( Vector2[]  pos,
int  num 
)

シーンに接続したライン形状生成を追加する

引数:
posライン形状の頂点リスト
num頂点リストの数

頂点リストの数の最大は30個であり、また、これによって作れるのは静的剛体のみです
シーンの衝突形状数が自動的にインクリメントされる

PhysicsShape AddSphereShape ( float  radius)

シーンに球形状を追加する

引数:
radius球の半径

シーンの衝突形状数が自動的にインクリメントされる

PhysicsSpring AddSpring ( PhysicsBody  body1,
PhysicsBody  body2,
Vector2  anchorPos1,
Vector2  anchorPos2 
)

スプリングをシーンに追加する

引数:
body1剛体ペアの一方のインデックス
body2剛体ペアのもう一方のインデックス
anchorPos1スプリングのアンカーポイントの1つ
anchorPos2スプリングのアンカーポイントのもう1つ
戻り値:
 スプリングへの参照

シーンのスプリング数が自動的にインクリメントされる

PhysicsSpring AddSpring ( int  bodyIndex1,
int  bodyIndex2,
Vector2  anchorPos1,
Vector2  anchorPos2 
)

ジョイントをシーンに追加する

引数:
bodyIndex1剛体ペアの一方のインデックス
bodyIndex2剛体ペアのもう一方のインデックス
anchorPosジョイントのアンカーポイント
戻り値:
 ジョイントへの参照

シーンのジョイント数が自動的にインクリメントされる

int CheckForcePicking ( ref Vector2  click_pos,
ref Vector2  diff_pos,
bool  rigorous_check 
)

タッチポイントの下にある剛体を探す

引数:
click_posタッチポイント
diff_pos剛体中心とタッチポイントの差
rigorous_check厳密なチェックを行うかどうか
戻り値:
タッチされている剛体があれば、そのインデックスをなければ-1を返す
剛体がStaticであってもピッキングデータを返すことに注意
bool CheckOutOfBound ( PhysicsBody  body)

 シミュレーションエリアを出たかどうかをチェック、出ていたらシミュレーションに考慮されない

引数:
body 剛体
戻り値:
シミュレーションエリア外なら真を返す
int CheckPicking ( ref Vector2  click_pos,
ref Vector2  diff_pos,
bool  rigorous_check 
)

タッチポイントの下にある剛体を探す

引数:
click_posタッチポイント
diff_pos剛体中心とタッチポイントの差
rigorous_check厳密なチェックを行うかどうか
戻り値:
タッチされている剛体があれば、そのインデックスをなければ-1を返す
int DeleteBody ( int  index)

剛体削除

引数:
index剛体インデックス
戻り値:
 剛体の総数

シミュレーション内で使用しているキャッシュデータの再構築が必要になるために計算負荷がかかります
同フレームで多くの剛体を削除する場合は注意が必要で、削除でなくシミュレーション領域外へ置くなどの方法も検討してください
Compound剛体を削除する場合は、compound剛体に関わる剛体が全て削除されます

int DeleteBody ( PhysicsBody  body)

剛体削除

引数:
body剛体への参照
戻り値:
 剛体の総数

シミュレーション内で使用しているキャッシュデータの再構築が必要になるために計算負荷がかかります
同フレームで多くの剛体を削除する場合は注意が必要で、削除でなくシミュレーション領域外へ置くなどの方法も検討してください
Compound剛体を削除する場合は、compound剛体に関わる剛体が全て削除されます

int DeleteJoint ( int  index)

ジョイント削除

引数:
indexジョイントのインデックス
戻り値:
 削除後のジョイントの総数
int DeleteJoint ( PhysicsJoint  joint)

ジョイント削除

引数:
jointジョイントへの参照
戻り値:
 削除後のジョイントの総数
int DeleteSpring ( PhysicsSpring  spring)

スプリング削除

引数:
springスプリングへの参照
戻り値:
 削除後のスプリングの総数
int DeleteSpring ( int  index)

スプリング削除

引数:
indexスプリングのインデックス
戻り値:
 削除後のスプリングの総数
virtual void DrawAdditionalInfo ( ref GraphicsContext  graphics,
ref ShaderProgram  program,
Matrix4  rendering_scale 
) [virtual]

デバッグレンダリングをユーザーが定義する

引数:
graphicsグラフィックスコンテキスト
programシェーダープログラム
rendering_scaleレンダリングスケール
virtual void DrawAllBody ( ref GraphicsContext  graphics,
ref ShaderProgram  program,
Matrix4  rendering_scale,
int  click_index 
) [virtual]

レンダリングをユーザーが定義する

引数:
graphicsグラフィックスコンテキスト
programシェーダープログラム
rendering_scaleレンダリングスケール
click_indexクリックした剛体インデックス
PhysicsBody GetBody ( int  index)

剛体を得る

引数:
index剛体のインデックス
戻り値:
見つからない時はnullが返される
int GetBodyIndex ( PhysicsBody  body)

剛体のインデックスを調べる

引数:
body剛体
戻り値:
見つからない時は-1が返される
PhysicsJoint GetJoint ( int  index)

ジョイントを得る

引数:
indexジョイントのインデックス
戻り値:
見つからない時はnullが返される
int GetJointIndex ( PhysicsJoint  joint)

ジョイントのインデックスを調べる

引数:
jointジョイント
戻り値:
見つからない時は-1が返される
PhysicsShape GetShape ( int  index)

衝突形状を得る

引数:
index衝突形状のインデックス
戻り値:
見つからない時はnullが返される
int GetShapeIndex ( PhysicsShape  shape)

衝突形状のインデックスを調べる

引数:
shape衝突形状
戻り値:
見つからない時は-1が返される
PhysicsSpring GetSpring ( int  index)

スプリングを得る

引数:
indexスプリングのインデックス
戻り値:
見つからない時はnullが返される
int GetSpringIndex ( PhysicsSpring  spring)

スプリングのインデックスを調べる

引数:
springスプリング
戻り値:
見つからない時は-1が返される
virtual void KeyboardFunc ( GamePadButtons  ePad) [virtual]

ゲームパッドイベントの扱いを定義

引数:
ePadゲームパッド入力
Vector2 MergeCompound ( PhysicsBody[]  bodyList,
int  num,
bool  flag = true 
)

剛体のマージ

複数の剛体 (コンパウンド形状)をマージするために、インデックスが昇順で与えられている

引数:
bodyListシーンの剛体リスト
numマージするための剛体の数
flag剛体の位置をマージ後に再調整するかどうか
bool QueryContact ( uint  index1,
uint  index2 
)

2つの剛体の間に衝突があったかどうかの記録を調べる

引数:
index1剛体ペアの一方
index2剛体ペアのもう一方
戻り値:
 剛体ペアに衝突があった記録があれば真を返す
bool QueryContact ( PhysicsBody  body1,
PhysicsBody  body2 
)

2つの剛体の間に衝突があったかどうかの記録を調べる

引数:
body1剛体ペアの一方
body2剛体ペアのもう一方
戻り値:
 剛体ペアに衝突があった記録があれば真を返す
int QueryContactTrigger ( uint  index,
uint[]  indexlist 
)

トリガー剛体と他の剛体の間に衝突があったかチェックする

引数:
indexトリガー剛体のインデックス
indexlistトリガー剛体との衝突を検出された剛体インデックスが格納される
戻り値:
 トリガー剛体との衝突を検出された剛体の数
bool RaycastHit ( ref RayHit  ray,
uint  collisionFilter,
uint  groupFilter 
)

レイキャストチェック

引数:
rayレイキャスト用のレイ情報
collisionFilter通常の衝突判定と同様のコリジョンフィルター
groupFilter通常の衝突判定と同様のグループフィルター
戻り値:
レイの交差があるかないかを返す
bool RaycastHit ( ref RayHit  ray)

レイキャストチェック

引数:
rayレイキャスト用のレイ情報
戻り値:
レイの交差があるかないかを返す
void RemoveIgnorePair ( PhysicsBody  body1,
PhysicsBody  body2 
)

衝突を無視するペアをリストから削除する

引数:
body1剛体ペアの一方
body2剛体ペアのもう一方
void RemoveIgnorePair ( uint  index1,
uint  index2 
)

衝突を無視するペアをリストから削除する

引数:
index1剛体ペアの一方
index2剛体ペアのもう一方
void Simulate ( int  click_index,
Vector2  click_pos,
Vector2  diff_pos 
)

シミュレートする

引数:
click_indexクリックした剛体のインデックス
click_posクリックした位置
diff_posクリックした位置と剛体の中心の差

クリックによる影響を剛体に与えたい場合のシミュレート関数


変数

uint [] compoundMap = new uint[maxBody]

 コンパウンド形状対応マップ

internal use only

filterOp

ORとANDのcollision and group filter の組み合わせを変更する


プロパティ

uint [] BroadPair [get]

getter of broadPair

setter is not provided

PhysicsSolverPair [] SolverPair [get]

getter of solverPair

setter is not provided