private GameObject ReplaceBuildingCube(GameObject buildingObj, SceneAssetInfo info) { GameObject buildingCube = null; { var boxCollider = CreateNewBoxCollider(buildingObj); var pos = buildingObj.transform.position; info.Position = pos + boxCollider.center; info.Center = boxCollider.center; var bSize = boxCollider.size; var scale = buildingObj.transform.localScale; var size = new Vector3(bSize.x * scale.x, bSize.y * scale.y, bSize.z * scale.z); info.Size = size; info.LoadDistance = GetMax(size.x, size.y, size.z) * loadDistanceBias; info.UnloadDistance = info.LoadDistance * unloadDistanceBias; buildingCube = GameObject.CreatePrimitive(PrimitiveType.Cube); buildingCube.name = info.ObjectName + "_Building"; //buildingCube.transform.position = pos; buildingCube.transform.position = pos + boxCollider.center; buildingCube.transform.localScale = size; buildingCube.transform.parent = buildingObj.transform.parent; CreateBuildingBox(buildingCube, info); } var buildingControllers = CopyBuildingComponents(buildingObj, buildingCube, false); if (buildingControllers.Count > 0) { var buildingController = buildingControllers[0]; { buildingController.ChildNodes = new List <DepNode>(); var floors = buildingObj.GetComponentsInChildren <FloorController>(); foreach (var floor in floors) { var floorObj = floor.gameObject; var boxCollider = CreateNewBoxCollider(floorObj); var bSize = boxCollider.size; var scale = floorObj.transform.localScale; var size = new Vector3(bSize.x * scale.x, bSize.y * scale.y, bSize.z * scale.z); var floorCube = GameObject.CreatePrimitive(PrimitiveType.Cube); floorCube.name = floorObj.name + "_Floor"; floorCube.transform.position = floorObj.transform.position; floorCube.transform.localScale = size; floorCube.transform.parent = buildingCube.transform; var floorController = EditorHelper.CopyComponent <FloorController>(floorObj, floorCube); buildingController.ChildNodes.Add(floorController); floorController.ParentNode = buildingController; var cubeCollider = floorCube.GetComponent <BoxCollider>(); cubeCollider.enabled = false; } } } return(buildingCube); }
private BuildingAssetInfo CreateBuildingAssetInfo(GameObject obj, SceneAssetInfo info) { BuildingAssetInfo box = obj.AddMissingComponent <BuildingAssetInfo>(); //box.info = info; box.SceneName = info.SceneName; box.AssetName = info.AssetName; return(box); }
private BuildingBox CreateBuildingBox(GameObject obj, SceneAssetInfo info) { BuildingBox box = obj.AddComponent <BuildingBox>(); box.info = info; box.SceneName = info.SceneName; box.AssetName = info.AssetName; CreateBuildingAssetInfo(obj, info); return(box); }
private SceneAssetInfo GetSceneAssetInfo(BuildingAssetInfo building) { var objName = building.gameObject.name; SceneAssetInfo info = null; if (infos.ContainsKey(objName)) { info = infos[objName]; } else { info = new SceneAssetInfo(building); infos[objName] = info; } return(info); }
private void ReplaceBuildingObject(GameObject obj, SceneAssetInfo info, string sceneName, GameObject selectedObj, string nameAfter) { if (selectedObj != null) { var path = AssetDatabase.GetAssetPath(selectedObj); info.ModelPath = path; GameObject newObj = GameObject.Instantiate(selectedObj); newObj.name = sceneName + nameAfter; newObj.transform.position = obj.transform.position; newObj.transform.parent = obj.transform.parent; var buildingControllers = obj.GetComponentsInChildren <BuildingController>(); if (buildingControllers.Length == 1) { var buildingControllersNew = CopyBuildingComponents(obj, newObj, true);//拷贝大楼控制脚本 CopyFloorControllers(obj, newObj, buildingControllersNew[0]); CreateBuildingBox(newObj, info); } else if (buildingControllers.Length > 1)//D1-D5,J6J11的情况 { foreach (var buildingController in buildingControllers) { var newController = newObj.transform.FindChildByName(buildingController.name); if (newController == null) { Debug.LogError("newController == null :" + buildingController.name); continue; } var buildingControllersNew = CopyBuildingComponents(buildingController.gameObject, newController.gameObject, true);//拷贝大楼控制脚本 CopyFloorControllers(buildingController.gameObject, newController.gameObject, buildingControllersNew[0]); BuildingBox box = CreateBuildingBox(newController.gameObject, info); box.IsPart = true; } } else { Debug.LogError("没有BuildingController:" + obj); } obj.SetActive(false); SelectObject(newObj); } else { Debug.LogError("selectedObj == null"); } }