ModelsUnderLocを ModelsUnderRayの代わりに使えるという話の前置きデモ。Locも Rayも返値は同じ、内部的な処理もおそらく同じ。与える変数が違うだけで基本的には同じコマンド。だから、ModelsUnderLocの代わりに ModelsUnderRayが使えるし、その逆もありなのではないかと。Locの代わりとしての Rayにそれほどの恩恵は無いかもしれないけど、色々と処理がかさばる Rayの代わりに Locが使える。今回は、RayとLocが本当に同じ値を返すかのテスト。
ソースは下記のイメージ。カメラの向いている方向に Rayを飛ばすのと、スプライトのセンターのLocを調べるのは同じはず。ただ、スプライトのサイズ(カメラの矩形)が真ん中を割り出せないと、RayとLocの値が同じにならない。だから奇数の長さじゃないと駄目です。すると、RayもLocもまったく同じ値が返ってくる。デモでは1秒ごとにレイを飛ばしてる。
次回は、Rayの代わりに Locがどれだけ使えるのか検証。次回がいつになるのかは分からないけど。。。(結末から言うと、RayもLocも基本的な処理速度はほとんど同じ。ただ、Rayで#modelsListを選んだりするとRayの処理がグッと重たくなる。Rayで判別したいモデルをmodelsListで選ぶよりも、カメラのRootNodeに入れて Locする方がウンと速くなるわけです。RayはデフォルトだとWorldにあるモデルにレイを飛ばす、#modelsListでモデルを選別することもできる。LocはカメラのRootNodeにあるモデルだけにレイを飛ばす。この違いが結構おもしろくて、使えるわけ。)
psp = sprite(me.spritenum)
pmem = psp.member
pcam = psp.camera(1)
t = pCam.getworldtransform()
r = pcam.rect
Ray = pMem. modelsUnderRay( t.position, -t.zAxis, 1, #detailed)
Loc = pcam. modelsUnderLoc( point(r.width /2, r.height/2), 1 , #detailed)