Utility
/**
* 床のマウス座標(2D座標)から3D座標を求める
* 用途: マウスカーソルに追随する床の目印など
*/
public function get3DcoordsFrom2D():Vector3D
{
if (!isNaN(mouseX) && !isNaN(mouseY)){
var pico:PickingCollisionVO = view.mousePicker.getViewCollision(mouseX, mouseY, view);
if (pico){
return new Vector3D(pico.localPosition.x, pico.localPosition.y, pico.localPosition.z);
}
}
return null;
}
/**
* メッシュの3D座標からスクリーン2D座標を求める
* 用途: キャラクターの頭上に表示する2Dのインジケータなど
*/
public function get2DcoordsFromMesh(mesh:Mesh):Point
{
var pos2D:Vector3D = view.project(mesh.sceneTransform.position);
return new Point(pos2D.x, pos2D.y);
}
準備
view.mousePickerに反応させるためには、床オブジェクトに対して以下の操作が必要です。
floor.mouseEnabled = true;
使い方
enterframe内
var vec:Vector3D = get3DcoordsFrom2D();
if(vec){
mesh.x = vec.x;
mesh.z = vec.z;
}
var p:Point = get2DcoordsFromMesh(mesh);
square.x = p.x - square.width/2;
square.y = p.y - square.height; //高さに調整必要
view.render();
その他
- 実際に使う際はreturn で newさせるのではなくお好みで値を設定させるなどしてください
- キャラの頭に設定したいときは、インジケータ用ダミーのMeshを頭に設定するときれいにハマります