//绘制战斗格子,默认不显示 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); }
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(); } }