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