using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using UnityEngine.AI; using System.IO; using System.Text; using System; public class SceneTool { [MenuItem("SceneTool/SetFloorMessage")]//添加FloorMessage脚本绑定楼层信息 public static void SetFloorMessage() { Transform neiParent = GameObject.Find("shinei").transform.GetChild(0); for (int i = 0; i < neiParent.childCount; i++) { //Debug.Log(neiParent.GetChild(i).name); if (!neiParent.GetChild(i).GetComponent()) { neiParent.GetChild(i).gameObject.AddComponent(); } FloorMessage msg = neiParent.GetChild(i).GetComponent(); msg.targetTrans = GetTarget(neiParent.GetChild(i)); msg.buildNum = neiParent.name; if (!neiParent.GetChild(i).name.ToLower().Contains("m")) { string floornum = neiParent.GetChild(i).name.Substring (neiParent.GetChild(i).name.ToLower().IndexOf("nei") + 3, neiParent.GetChild(i).name.Length - 3); msg.floorNum = int.Parse(floornum); msg.interlayerNum = 0; } else { msg.floorNum = int.Parse(neiParent.GetChild(i).name.Substring (neiParent.GetChild(i).name.ToLower().IndexOf("nei") + 3, neiParent.GetChild(i).name.ToLower().IndexOf("m") - neiParent.GetChild(i).name.ToLower().IndexOf("nei") - 3)); msg.interlayerNum = int.Parse(neiParent.GetChild(i).name.Substring (neiParent.GetChild(i).name.ToLower().IndexOf("m") + 1, neiParent.GetChild(i).name.Length - neiParent.GetChild(i).name.ToLower().IndexOf("m") - 1)); } } Transform waiParent = GameObject.Find("shiwai").transform.GetChild(0); for (int i = 0; i < waiParent.childCount; i++) { //Debug.Log(waiParent.GetChild(i).name); if (!waiParent.GetChild(i).GetComponent()) { waiParent.GetChild(i).gameObject.AddComponent(); } FloorMessage msg = waiParent.GetChild(i).GetComponent(); msg.buildNum = waiParent.name; if (!waiParent.GetChild(i).name.ToLower().Contains("m")) { string floornum = waiParent.GetChild(i).name.Substring (waiParent.GetChild(i).name.ToLower().IndexOf("wai") + 3, waiParent.GetChild(i).name.Length - 3); msg.floorNum = int.Parse(floornum); msg.interlayerNum = 0; } else { msg.floorNum = int.Parse(waiParent.GetChild(i).name.Substring (waiParent.GetChild(i).name.ToLower().IndexOf("wai") + 3, waiParent.GetChild(i).name.ToLower().IndexOf("m") - waiParent.GetChild(i).name.ToLower().IndexOf("wai") - 3)); msg.interlayerNum = int.Parse(waiParent.GetChild(i).name.Substring (waiParent.GetChild(i).name.ToLower().IndexOf("m") + 1, waiParent.GetChild(i).name.Length - waiParent.GetChild(i).name.ToLower().IndexOf("m") - 1)); } } } static Transform GetTarget(Transform parent) { for (int i = 0; i < parent.childCount; i++) { if (parent.GetChild(i).name.ToLower().Contains("_floor") || parent.GetChild(i).name.ToLower().Contains("-floor") ) { return parent.GetChild(i); } } return parent; } [MenuItem("SceneTool/Setshinei")]//添加寻路层(选中shinei对象设置,注:扶梯情况特殊没有包含) public static void SetShiNei() { Transform[] obj = Selection.GetTransforms(SelectionMode.Deep); for (int i = 0; i < obj.Length; i++) { if (obj[i].GetComponent()) { if ((obj[i].name.ToLower().Contains("floor") ||//地面 obj[i].name.ToLower().Contains("lt") || obj[i].name.ToLower().Contains("chedao") || obj[i].name.ToLower().Contains("ft")) && !obj[i].name.ToLower().Contains("ltcs")) { obj[i].gameObject.layer = LayerMask.NameToLayer("SoldierRoad"); if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } CloneEnumsHelp cloneEnumsHelp = obj[i].gameObject.GetComponent(); cloneEnumsHelp.cloneOnFloorType = CloneOnFloorType.ShiNeiMan; if (obj[i].GetComponentInParent()) { FloorMessage fmg = obj[i].GetComponentInParent(); obj[i].gameObject.GetComponent().gameObjType = CloneObjType.StaticGameObject; obj[i].gameObject.GetComponent().buildNum = fmg.buildNum; obj[i].gameObject.GetComponent().floorNum = fmg.floorNum; obj[i].gameObject.GetComponent().interlayerNum = fmg.interlayerNum; } } if (obj[i].name.ToLower().Contains("wall") ||//墙面 obj[i].name.ToLower().Contains("zhuzi")) { obj[i].gameObject.layer = LayerMask.NameToLayer("SoldierRoad"); if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } NavMeshModifier mod = obj[i].gameObject.GetComponent(); mod.overrideArea = true; mod.area = 1; if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } } } } } [MenuItem("SceneTool/SetshineiXHS")]//设置室内消火栓属性 public static void SetSNXHS() { Transform[] obj = Selection.GetTransforms(SelectionMode.Deep); for (int i = 0; i < obj.Length; i++) { if (obj[i].name.ToLower().Contains("xhs") && obj[i].GetComponent()) { if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } obj[i].gameObject.GetComponent().gameObjType = CloneObjType.IndoorFireHydrant; if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (obj[i].gameObject.GetComponent().gameObjID == 0) { long staticGameObjId = (long)GUID.NewGuid(1, 1); obj[i].gameObject.GetComponent().SetGameObjID(staticGameObjId); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } CloneEnumsHelp cloneEnumsHelp = obj[i].gameObject.GetComponent(); cloneEnumsHelp.cloneOnFloorType = CloneOnFloorType.ShiNeiXHS; if (obj[i].GetComponentInParent()) { FloorMessage fmg = obj[i].GetComponentInParent(); obj[i].gameObject.GetComponent().buildNum = fmg.buildNum; obj[i].gameObject.GetComponent().floorNum = fmg.floorNum; obj[i].gameObject.GetComponent().interlayerNum = fmg.interlayerNum; } } } } [MenuItem("SceneTool/DiXiaLouDing/CheNengZou")]//地面的楼顶(车能走),常见为地下建筑上的公路 public static void DiXiaLouDingCheNengZou() { Transform[] obj = Selection.GetTransforms(SelectionMode.Unfiltered); { for (int i = 0; i < obj.Length; i++) { if (obj[i].GetComponent()) { obj[i].gameObject.layer = LayerMask.NameToLayer("CarRoad"); if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } CloneEnumsHelp cloneEnumsHelp = obj[i].gameObject.GetComponent(); cloneEnumsHelp.cloneOnFloorType = CloneOnFloorType.ShiWaiCar; if (obj[i].GetComponentInParent()) { FloorMessage fmg = obj[i].GetComponentInParent(); obj[i].gameObject.GetComponent().gameObjType = CloneObjType.StaticGameObject; obj[i].gameObject.GetComponent().buildNum = fmg.buildNum; obj[i].gameObject.GetComponent().floorNum = fmg.floorNum; obj[i].gameObject.GetComponent().interlayerNum = fmg.interlayerNum; obj[i].gameObject.GetComponent().SpecialTag = "楼顶"; } } } } } [MenuItem("SceneTool/DiXiaLouDing/RenNengZou")]//地面的楼顶(人能走),常见为地下建筑上的小路 public static void DiXiaLouDingRenNengZou() { Transform[] obj = Selection.GetTransforms(SelectionMode.Unfiltered); { for (int i = 0; i < obj.Length; i++) { if (obj[i].GetComponent()) { obj[i].gameObject.layer = LayerMask.NameToLayer("SoldierRoad"); if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } CloneEnumsHelp cloneEnumsHelp = obj[i].gameObject.GetComponent(); cloneEnumsHelp.cloneOnFloorType = CloneOnFloorType.ShiWaiMan; if (obj[i].GetComponentInParent()) { FloorMessage fmg = obj[i].GetComponentInParent(); obj[i].gameObject.GetComponent().gameObjType = CloneObjType.StaticGameObject; obj[i].gameObject.GetComponent().buildNum = fmg.buildNum; obj[i].gameObject.GetComponent().floorNum = fmg.floorNum; obj[i].gameObject.GetComponent().interlayerNum = fmg.interlayerNum; obj[i].gameObject.GetComponent().SpecialTag = "楼顶"; } } } } } [MenuItem("SceneTool/DiXiaLouDing/DouBuZou")]//地面的楼顶(都不能走),常见为地下建筑上的花坛 public static void DiXiaLouDingDouBuZou() { Transform[] obj = Selection.GetTransforms(SelectionMode.Unfiltered); { for (int i = 0; i < obj.Length; i++) { if (obj[i].GetComponent()) { obj[i].gameObject.layer = LayerMask.NameToLayer("CarRoad"); if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } NavMeshModifier mod = obj[i].gameObject.GetComponent(); mod.overrideArea = true; mod.area = 1; } } } } [MenuItem("SceneTool/PuTongLouDing/RenNengZou")]//普通的楼顶(人能走),常见为地上建筑的楼顶地板 public static void PuTongLouDingRenNengZou() { Transform[] obj = Selection.GetTransforms(SelectionMode.Unfiltered); { for (int i = 0; i < obj.Length; i++) { if (obj[i].GetComponent()) { obj[i].gameObject.layer = LayerMask.NameToLayer("SoldierRoad"); if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } CloneEnumsHelp cloneEnumsHelp = obj[i].gameObject.GetComponent(); cloneEnumsHelp.cloneOnFloorType = CloneOnFloorType.LouDing; if (obj[i].GetComponentInParent()) { FloorMessage fmg = obj[i].GetComponentInParent(); obj[i].gameObject.GetComponent().gameObjType = CloneObjType.StaticGameObject; obj[i].gameObject.GetComponent().buildNum = fmg.buildNum; obj[i].gameObject.GetComponent().floorNum = fmg.floorNum; obj[i].gameObject.GetComponent().interlayerNum = fmg.interlayerNum; obj[i].gameObject.GetComponent().SpecialTag = "楼顶"; } } } } } [MenuItem("SceneTool/PuTongLouDing/DouBuZou")]//普通的楼顶(都不能走) public static void PuTongLouDingDouBuZou() { Transform[] obj = Selection.GetTransforms(SelectionMode.Unfiltered); { for (int i = 0; i < obj.Length; i++) { if (obj[i].GetComponent()) { obj[i].gameObject.layer = LayerMask.NameToLayer("SoldierRoad"); if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } NavMeshModifier mod = obj[i].gameObject.GetComponent(); mod.overrideArea = true; mod.area = 1; } } } } [MenuItem("SceneTool/ShiWai/CheNengZou")]//地面(车能走),常见为公路 public static void ShiWaiCheNengZou() { Transform[] obj = Selection.GetTransforms(SelectionMode.Unfiltered); { for (int i = 0; i < obj.Length; i++) { if (obj[i].GetComponent()) { obj[i].gameObject.layer = LayerMask.NameToLayer("CarRoad"); if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } CloneEnumsHelp cloneEnumsHelp = obj[i].gameObject.GetComponent(); cloneEnumsHelp.cloneOnFloorType = CloneOnFloorType.ShiWaiCar; } } } } [MenuItem("SceneTool/ShiWai/RenNengZou")]//地面(人能走),常见为小路 public static void ShiWaiRenNengZou() { Transform[] obj = Selection.GetTransforms(SelectionMode.Unfiltered); { for (int i = 0; i < obj.Length; i++) { if (obj[i].GetComponent()) { obj[i].gameObject.layer = LayerMask.NameToLayer("SoldierRoad"); if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } CloneEnumsHelp cloneEnumsHelp = obj[i].gameObject.GetComponent(); cloneEnumsHelp.cloneOnFloorType = CloneOnFloorType.ShiWaiMan; } } } } [MenuItem("SceneTool/ShiWai/DouBuZou")]//地面(都不能走),常见为花坛 public static void ShiWaiDouBuZou() { Transform[] obj = Selection.GetTransforms(SelectionMode.Unfiltered); { for (int i = 0; i < obj.Length; i++) { if (obj[i].GetComponent()) { obj[i].gameObject.layer = LayerMask.NameToLayer("CarRoad"); if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } NavMeshModifier mod = obj[i].gameObject.GetComponent(); mod.overrideArea = true; mod.area = 1; } } } } [MenuItem("SceneTool/TeShu/YouGuanDing")]//油罐顶 public static void YouGuanDing() { Transform[] obj = Selection.GetTransforms(SelectionMode.Unfiltered); { for (int i = 0; i < obj.Length; i++) { if (obj[i].GetComponent()) { if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } CloneEnumsHelp cloneEnumsHelp = obj[i].gameObject.GetComponent(); cloneEnumsHelp.cloneOnFloorType = CloneOnFloorType.YouGuanDing; } } } } [MenuItem("SceneTool/TeShu/YouGuanBi")]//油罐壁 public static void YouGuanBi() { Transform[] obj = Selection.GetTransforms(SelectionMode.Unfiltered); { for (int i = 0; i < obj.Length; i++) { if (obj[i].GetComponent()) { if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } CloneEnumsHelp cloneEnumsHelp = obj[i].gameObject.GetComponent(); cloneEnumsHelp.cloneOnFloorType = CloneOnFloorType.YouGuanBi; } } } } [MenuItem("SceneTool/TeShu/WeiXianPinYunShuChe")]//危险运输车 public static void WeiXianPinYunShuChe() { Transform[] obj = Selection.GetTransforms(SelectionMode.Unfiltered); { for (int i = 0; i < obj.Length; i++) { if (obj[i].GetComponent()) { if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } if (!obj[i].gameObject.GetComponent()) { obj[i].gameObject.AddComponent(); } CloneEnumsHelp cloneEnumsHelp = obj[i].gameObject.GetComponent(); cloneEnumsHelp.cloneOnFloorType = CloneOnFloorType.WeiXianPinYunShuChe; } } } } }