private void TestJ6J11() { /* * * 排队卸载模型 :buildings_J6J11 * 加载模型 :buildings_S3 * 排队卸载模型 :buildings_S3 * 实际卸载模型 :buildings_S3 * 排队卸载模型 :buildings_J6J11 * 加载模型 :buildings_S3 * 加载模型 :buildings_H4 * 实际卸载模型 :buildings_J6J11 * 加载模型 :buildings_J6J11 * 排队卸载模型 :buildings_S3 * 实际卸载模型 :buildings_S3 * 排队卸载模型 :buildings_H4 * 实际卸载模型 :buildings_H4 */ var b1 = GetBuildingBox("buildings_J6J11"); InBuildings.Add(b1); if (b1.IsLoaded)//已加载 { if (b1.IsLoaded) { var b2 = b1.UnloadAsset("卸载");//卸载 //b2.Tag = "第一次加载的"; b1.LoadBuilding((node) => { if (node != null) { node.Tag = "第二次加载"; } });//加载 } } else { b1.LoadBuilding((node) =>//加载 { if (b1.IsLoaded) { b1.UnloadAsset("第一次加载的"); //卸载 b1.LoadBuilding(); //加载 } }); } }
private void LoadBuildingByDistance() { //Log.Info("LoadBuildingByDistance"); if (GetSubject() == false) { return; //获取判断距离的参考物体 } DoLoad = GetIsInPark(); //判断当前是否应该加载模型 CheckIsInViewSimple(); //获取在视图中的建筑模型 if (DoLoad == false) { //Debug.Log("DoLoad == false"); } if (PersonSubsystemManage.Instance != null && PersonSubsystemManage.Instance.IsHistorical) { if (LocationHistoryManager.Instance.IsFocus) //历史轨迹的对焦模式和漫游模式加载行为类似 { isRoam = true; //漫游和非漫游判断距离的方式、参数是不一样的 } else { //不对焦的透明状态,不用加载详细模型 return; } } InBuildings.Clear(); foreach (BuildingBox item in buildingBox) { if (!isRoam) { if (!item.gameObject.activeInHierarchy && item.IsLoaded == false) { continue; } //非漫游是,还没加载模型并且隐藏了的不管,对应双击拉近模型时的问题。 } if (item.IsInDistance(subject, isRoam))//漫游和非漫游判断距离的方式、参数是不一样的 { InBuildings.Add(item); if (DoLoad == false) { continue; //测试模型不加载模型 } if (isRoam //漫游模式 //历史轨迹模式 ) { if (J1 && J1.IsInBounds(subject)) //2019_05_23_cww:特殊处理在主厂房内漫游时不加载外部的建筑。 { if (J1_F2 && J1_F2.IsInBounds(subject)) //在二楼,要去集控楼 所以 { if (item.SceneName == "J4") //要去集控楼 { //加载集控楼建筑 } else { continue;//不加载外面建筑 } } else { continue;//不加载外面建筑 } } } //if (isRoam) { if (item.IsLoaded)//2019_05_15_cww:处理漫游进入主厂房后,走着走着加载主厂房外面的建筑导致把主厂房卸载了的问题。 { if (unloadBoxList.Contains(item)) { unloadBoxList.Remove(item); } } else { if (OnlyLoadInView) //2019_05_21_cww:只加载在视野中的建筑 处理因为摄像头自动控制距离导致的问题 { if (item.IsInBounds(subject)) //靠的太近时无法用物体边缘的点判断是否在视野内 { } else if (!IsInViewEx(item)) //建筑不在视野中 { continue; //不加载模型,处理对接一个人员时,摄像头拉远,后面的建筑被加载;导致前面的建筑被卸载,刚好前面的建筑又正好有点远。 } } } } bool isBusyOrLoad = !item.LoadBuilding((nNode) => { if (DevSubsystemManage.Instance) { if (nNode != null) { DevSubsystemManage.Instance.EnlargeBuildingDoorCollider(nNode.gameObject);//调大门的碰撞体 } else { //Debug.LogError("LoadBuilding.LoadBuildingInRoam nNode ==null"); } } }, false);//漫游进入建筑 if (isBusyOrLoad) { //Debug.Log(" isBusyOrLoad :"+item); } else { WriteLog("加载模型 :" + item.AssetName); } } else { if (DoLoad == false) { continue; } if (item.IsLoaded) { item.SetUnload(false); } } } //EnableRoamLoad = false; }