Example #1
0
    public void InitFromFile()
    {
        var filePath = GetFilePath();
        var bs       = ResourceLoader.LoadAsset <TextAsset>(filePath);

        if (bs == null || string.IsNullOrEmpty(bs.text))
        {
            return;
        }

        var obj = bs.bytes.Deserialize <BattleboxDataset>();

        m_Dataset = obj;

        if (m_Dataset != null)
        {
            Debug.Log($"载入文件结束:{m_Dataset.GetCount()}个格子中,一共有多少格子有效:{m_Dataset.GetValidCount()}");
        }
    }
Example #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();
        }
    }