入門6:当たり判定
コリジョン
種類は
① 直線とモデルの交点 ② モデルとモデルの重なり ③ 無料プラグインによる
直線とモデルの交点
レイ、光線と言われる方法です
直線の2点の座標を決めて、それを横切るモデルを検出します。
コマンドにより、線を厚みのある円にすることもある。
光線銃の当たり判定などに使う。
キャラから地面である下に向けて、地面との交点を求め、地面の高さを計算に使う。
NPCの視界として使う。
モデルとモデルの重なり
モデルとモデルが重なった時に、検出されます。
通常は、モデルのボンディングボックス(境界箱)を設定して、
それによって検出します。
接触判定に使う。
ワープポイントなどの場所に使う。
、
無料プラグインによる
標準の当たり判定以外に、オプションのプラグインがあり、高性能です。
標準のものの方が情報が多いから、
標準当たり判定コマンドに慣れてからプラグインにするのがよい。
おまけ
DBPには、いくつかのマップの種類がある。
マップの種類毎にコリジョンが違う。それぞれに専用のコリジョンを使う。
matrix Xファイル BSP Map FPSC Map
sample code
Rem INTERSECT OBJECT() Rem レイでポリゴンの上を歩く floor_object=1 `床-地形 make object box floor_object,500,10,500 position object floor_object,0,0,0 make object cube 3,50 zrotate object 3,30 perform csg union floor_object,3 delete object 3
player_object=2 `player make object cube player_object,10 color object player_object,rgb(255,0,0) position object player_object,0,55,0
position camera -100,50,-200 point camera 0,0,0
sync rate 30 : sync on do set cursor 0,0 print "use cursor-key"
x# = object position x( player_object ) y# = object position y( player_object ) z# = object position z( player_object )
if upkey()=1 then z#=z#+1 if downkey()=1 then z#=z#-1 if leftkey()=1 then x#=x#-1 if rightkey()=1 then x#=x#+1
gh# = INTERSECT OBJECT( floor_object, x#, 100, z#, x#, -100, z# ) ny# = 100 - gh#
position object player_object , x# , ny#+5 , z#
sync loop
rem OBJECT COLLISION() rem 重なり検出 make object cube 1,10 : color object 1,rgb(255,0,0) make object cube 2,5 make object cube 3,10 : color object 3,rgb(0,0,255) position object 1,30,0,50 position object 2,50,0,50 position object 3,70,0,50
make matrix 1,100,100,10,10 sync on : sync rate 30 do set cursor 0,0 print "use left/right-key" if 1=leftkey() then move object left 2,1 if 1=rightkey() then move object right 2,1 c=OBJECT COLLISION(2, 0) color object 2,rgb(0,c*80,0) print c sync loop