void ShootRay(Vector3 mousePos)
    {
        Vector3 from, clickWorldPoint, normalDir;

        GeometryTool.GetShootingRay(mousePos, out from, out clickWorldPoint, out normalDir);

        //debug用
        voxelBuilder.SetClickPointOnRay(clickWorldPoint);
        voxelBuilder.SetClickNormalDir(normalDir);

        int nowFloor, nowY, nowX;
        //mahjongMap的平面朝向是固定的,所以不作座標變換
        bool isHit = voxelBuilder.DoClick(from, normalDir, out nowFloor, out nowY, out nowX);

        if (!isHit)
        {
            return;
        }

        var funptr = DoWhat();

        for (var y = 0; y < voxelBuilder.GetAddCountY(); ++y)
        {
            for (var x = 0; x < voxelBuilder.GetAddCountX(); ++x)
            {
                var node = voxelBuilder.GetVoxel(nowFloor, nowY + 2 * y, nowX + 2 * x);
                if (node == null)
                {
                    continue;
                }

                voxelBuilder.DoOperation(node, funptr);
            }
        }
    }