foreach hsid if ( hsid(cnt) == null ):continue E3DChkConfGround hsid(cnt), ghsid(0), 1, 1000.0, -5000.0, result1, adjustx1, adjusty1, adjustz1, nx1, ny1, nz1 if ( result1 != 0 ) : E3DSetPos hsid(cnt), adjustx1, adjusty1, adjustz1 loop
「foreach hsid」〜「loop」の間を、hsid配列の要素があるだけ繰り返します。
「if ( hsid(cnt) == null )」でオブジェクトの配列の要素が存在しない場合「continue」で次の要素にループします。
「E3DChkConfGround p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12」でオブジェクトと地面の当たり判定を調べしました。
[p1]移動する形状データを識別するid
[p2]E3DLoadGroundBMP、または、E3DLoadMQOFileAsGroundで作成した形状データを識別するid
[p3]0を指定すると、飛ぶモード1を指定すると、地面を這うモード
[p4]一度の移動で登ることが出来る高さの最大値を指定してください。
[p5]groundhsidで識別されるデータの一番低いY座標の値
[p6]あたり判定の結果が代入されます。
[p7][p8][p9]result != 0 のときに、mode == 0のときは、ぶつかった座標mode == 1のときは、地面の座標が(adjustx, adjusty, adjustz)に代入されます。
[p10][p11][p12]result != 0 のときに、mode == 0のときは、ぶつかったポリゴン。mode == 1のときは、地面のポリゴンの法線ベクトルが、(nx ny, nz)に代入されます。
「if ( result1 != 0 )」で衝突していた場合「E3DSetPos hsid(cnt), adjustx1, adjusty1, adjustz1」でオブジェクトをちょうどいい位置に移動します。