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()}"); } }
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(); } }