背景オブジェクトをキャラクターオブジェクトにちょうど立たせます。

この左画面でクリックすれば以下の赤字のスクリプトがコピーされるので、右プログラミング画面で赤矢印の右側へ貼り付けてください。

	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」でオブジェクトをちょうどいい位置に移動します。

ホームへ戻ってください。