예제 #1
0
    //绘制战斗格子,默认不显示
    void DrawBattleBlock(Vector3 pos, Color c, int x, int y, Vector3 normal, BattleboxBlock boxBlock)
    {
        var parent = FindOrCreateBlocksParent();

        var block = Resources.Load <GameObject>("BattleboxBlock");
        var obj   = EasyDecal.Project(block, pos, Quaternion.identity);

        obj.Quality  = 2;
        obj.Distance = 0.05f;
        obj.transform.SetParent(parent.transform, false);

        var bPos = new BattleBlockVector(x, y);
        var bbd  = new BattleBlockData();

        bbd.BattlePos  = bPos;
        bbd.WorldPos   = pos;
        bbd.gameObject = obj.gameObject;
        bbd.BoxBlock   = boxBlock;
        battleBlocks.Add(bbd);
    }
예제 #2
0
    public void CreateDataset()
    {
        m_Dataset = null;
        InitCollider();
        if (m_colliders == null || m_colliders.Length == 0)
        {
            Debug.LogError($"没有找到子碰撞盒,无法初始化战斗盒子");
            return;
        }

        var bound     = GetBounds();
        var sceneName = SceneManager.GetActiveScene().name;
        var objName   = gameObject.name;
        var length    = bound.size.x;
        var width     = bound.size.z;
        var minx      = bound.min.x;
        var miny      = bound.min.z;

        m_Dataset = new BattleboxDataset(sceneName, objName, length, width, minx, miny);
        Debug.Log($"重新生成格子,x轴格子数{m_Dataset.CountX}, y轴格子数{m_Dataset.CountY},理论总格子数目{m_Dataset.GetSizeCount()}");

        var height    = bound.size.y;
        var maxHeight = bound.min.y + height;

        for (int i = 0; i < m_Dataset.CountX; i++)
        {
            for (int j = 0; j < m_Dataset.CountY; j++)
            {
                //计算格子的x和z坐标
                var tempPos = m_Dataset.CalcPos(i, j);
                //该格子在box顶层的投影点
                var topProj = new Vector3(tempPos.X, maxHeight, tempPos.Y);

                Vector3 pos, normal;
                var     bFlag = JudgeCoord(topProj, height, out pos, out normal);
                if (bFlag)
                {
                    //该格子有效,存入dataset
                    var block = new BattleboxBlock
                    {
                        XIndex    = i,
                        YIndex    = j,
                        WorldPosX = pos.x,
                        WorldPosY = pos.y,
                        WorldPosZ = pos.z,
                        NormalX   = normal.x,
                        NormalY   = normal.y,
                        NormalZ   = normal.z,
                        IsValid   = true,
                    };
                    m_Dataset.Blocks.Add(block);
                }
            }
        }
        Debug.Log($"重新生成格子结束:一共生成了{m_Dataset.GetCount()}个格子");

        if (Application.isEditor)
        {
            SaveToFile();
        }
    }