テストスクリプトを作ってみました。tamaneモデルは特別必要ありませんが、あるとイメージしやすいと思います。
「sample/hgimg4」にいれてやって見てください。
#include "hgimg4.as"
gpreset
setcls CLSMODE_SOLID, $404040
gpfloor id_floor, 30, 30, $aaaaaa // 床ノードを追加
setpos id_floor, 0, 0, 0
gppbind id_floor, 0 // [地面]の物理設定を行なう
;== [model_box_0] ================================================
gpbox model_box_0, 0.6, $ff0000 // [モデル]用 箱ノードを追加
setpos model_box_0, 0.0, 0.3, 0.0
// gpbox model_box_0, 1.0, $ff0000 // (大きさを変えてみる)
// setpos model_box_0, 0.0, 0.5, 0.0
setalpha model_box_0, 128
gppbind model_box_0, 1.0, 1.0 // 物理設定
setcoli model_box_0, 1, 1 // コリジョン設定
gpload id_model_0,"res/tamane" // モデル読み込み
setscale id_model_0, 0.004,0.004,0.004
setpos id_model_0, 0.0, 0.0, 0.0
;== [model_box_1] ================================================
gpbox model_box_1, 0.6, $ffff00 // [モデル]用 箱ノードを追加
setpos model_box_1, 0.0, 0.3, 5.0
setalpha model_box_1, 128
gppbind model_box_1, 1.0, 1.0 // 物理設定
setcoli model_box_1, 1, 1 // コリジョン設定
gpload id_model_1,"res/tamane" // モデル読み込み
setscale id_model_1, 0.004,0.004,0.004
setpos id_model_1, 5.0, 0.0, 0.0
;== [Mt_box_0] ================================================
gpbox Mt_box_0, 4.0, $0000ff // [山]用 箱ノードを追加
setpos Mt_box_0, -5.0, 2.0, 0.0
setalpha Mt_box_0, 128
gppbind Mt_box_0, 0 // 物理設定 = 不動でやってみる
// gppbind Mt_box_0, 1.0, 1.0 // (可動でやってみる)
setcoli Mt_box_0, 1, 1 // コリジョン設定
;== [Mt_box_1] ================================================
gpbox Mt_box_1, 2.0, $00ff00 // [山]用 箱ノードを追加
setpos Mt_box_1, 5.0, 1.0, 0.0
setalpha Mt_box_1, 128
gppbind Mt_box_1, 0 // 物理設定 = 不動でやってみる
// gppbind Mt_box_1, 1.0, 1.0 // (可動でやってみる)
setcoli Mt_box_1, 1, 1 // コリジョン設定
;== [Mt_box_2] ================================================
gpbox Mt_box_2, 1.2, $00ffff // [山]用 箱ノードを追加
setpos Mt_box_2, 0.0, 0.6, -5.0
setalpha Mt_box_2, 128
gppbind Mt_box_2, 0 // 物理設定 = 不動でやってみる
// gppbind Mt_box_2, 1.0, 1.0 // (可動でやってみる)
setcoli Mt_box_2, 1, 1 // コリジョン設定
;==================================================
setpos GPOBJ_CAMERA, 0, 5, 15 // カメラ位置を設定
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
*main_loop
stick key,15
if key&128 : end
redraw 0 // 描画開始
// タッチでカメラ位置を動かす
if dragmd { // ドラッグ中
getkey a,1
if a=1 {
dx=0.05*(mousex-dragx)+cx
dy=0.05*(mousey-dragy)+cy
setpos GPOBJ_CAMERA, dx,dy,cz
} else {
dragmd=0
}
} else { // ドラッグなし
getkey a,1
if a {
dragx=mousex : dragy=mousey
getpos GPOBJ_CAMERA, cx,cy,cz
dragmd=1
}
}
gplookat GPOBJ_CAMERA, 0, 1, 0 // カメラから指定した座標を見る
// カーソルキーで [model_box] を動かす
if key&1 : gppapply model_box_0, GPPAPPLY_IMPULSE, -0.2, 0.0, 0.0
if key&4 : gppapply model_box_0, GPPAPPLY_IMPULSE, 0.2, 0.0, 0.0
if key&2 : gppapply model_box_0, GPPAPPLY_IMPULSE, 0.0, 0.0, -0.2
if key&8 : gppapply model_box_0, GPPAPPLY_IMPULSE, 0.0, 0.0, 0.2
getpos model_box_0, x, y, z
setpos id_model_0, x, 0, z
getpos model_box_1, x, y, z
setpos id_model_1, x, 0, z
getcoli i, model_box_0, 1 // [model_box_0] が 接触したオブジェクトを調べる
if i=model_box_1 : obj_name="model_box_1"
if i=Mt_box_0 : obj_name="Mt_box_0"
if i=Mt_box_1 : obj_name="Mt_box_1"
if i=Mt_box_2 : obj_name="Mt_box_2"
if i=-1 : obj_name="NO"
gpdraw // シーンの描画
color 255,255,255
pos 8, 8 : mes "HGIMG4 sample"
pos 8, 50 : mes obj_name
redraw 1 // 描画終了
await 1000/60 // 待ち時間
goto *main_loop
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
方向キーで中央の[tamane箱]を動かして、手前の[tamane箱]や、左・右・奥の箱に衝突させて、比べて見てください。
左・右・奥の箱は、山を囲む[gppbind][setcoli]用の箱を想定しています。
私の環境では、手前の[tamane箱]と奥の箱のみ衝突検出し、左・右の箱は検出しません。