Babylon.jsのチュートリアルをやってみるその15

これは

昨日に引き続きBabylon.jsのチュートリアルをやっていく記事です。
自分であとで思い返す用のメモでもあります。

今日の参照

https://doc.babylonjs.com/babylon101/raycasts

Raycastと述語関数

Raycastの続きです。
昨日はRayを使ってcubeを大きくするのをやりました。
たまたま一つしかcubeがなかったのでよかったのですが、 自分からは見えない奥のやつを取得したい場合困ったことになります。
こんな感じに。
f:id:torikizi:20190621231859g:plain

ではどうするかというと述語関数を使って 対象とするmeshを指定できるようにします。

// rayの情報を使って対象とするmeshを判定する
// 述語関数
// raycastが当たったmeshを受け取って、対象にしたいmeshだったらfalseを返す。
function predicate(mesh)
{
    if (mesh == box || mesh == box)
    {
        return false;
    }
   return true;
}

// 呼び出し
var hit = scene.pickWithRay(ray, predicate);

すると以下のように奥のcubeが大きくなるようになりました f:id:torikizi:20190621232500g:plain

scene.pickWithRayってなんだろと思ったので以下を参照しています。
doc.babylonjs.com

multiPickWithRay

対象を一つではなく複数にしたい場合はmultiPickWithRayを使います。

// 複数を対象にしたい場合はmultiPickを使います。
var hits = scene.multiPickWithRay(ray);
if (hits)
{
    for (var i=0; i<hits.length; i++)
    {
        hits[i].pickedMesh.scaling.y += 0.01;
    }
}

複数のcubeが大きくなるようになりました f:id:torikizi:20190621233716g:plain

RayHelperは昨日触ったので きょうはここまで。
明日はSpritesをやります。