private IEnumerator SpawnerCollider() { EditorColliderArea[] arealist = m_ColliderData.areaList; if (arealist != null && arealist.Length > 0) { for (int iArea = 0; iArea < arealist.Length; iArea++) { EditorColliderArea editorArea = arealist[iArea]; if (editorArea == null) { continue; } GameObject areaObj = new GameObject(editorArea.areaId.ToString()); areaObj.transform.SetParent(transform); areaObj.transform.localPosition = Vector3.zero; areaObj.transform.localRotation = Quaternion.identity; areaObj.transform.localScale = Vector3.one; EditorDecorate[] decorate_list = editorArea.decorateList; if (decorate_list != null && decorate_list.Length > 0) { for (int iDecorate = 0; iDecorate < decorate_list.Length; iDecorate++) { EditorDecorate decorate = decorate_list[iDecorate]; CreateColliderObj(decorate, areaObj.transform); yield return(null); } } } yield return(null); GameObject commonObj = new GameObject("DontExport"); commonObj.transform.SetParent(transform); commonObj.transform.localPosition = Vector3.zero; commonObj.transform.localRotation = Quaternion.identity; commonObj.transform.localScale = Vector3.one; EditorDecorate[] commonDecorate_list = m_ColliderData.commondecorateList; if (commonDecorate_list != null && commonDecorate_list.Length > 0) { for (int iDecorate = 0; iDecorate < commonDecorate_list.Length; iDecorate++) { EditorDecorate decorate = commonDecorate_list[iDecorate]; CreateColliderObj(decorate, commonObj.transform); yield return(null); } } } yield return(null); }
private IEnumerator GenerateResidentDecorate(List <EditorDecorate> editorDecorateList) { DontDestroyAtExport residentRoot = UnityEngine.Object.FindObjectOfType <DontDestroyAtExport>(); if (residentRoot != null) { List <Transform> colliderRoots = MapEditorUtility.FindChilds <Transform>(residentRoot.transform, "Collider"); if (colliderRoots == null || colliderRoots.Count <= 0) { yield break; } for (int iRoot = 0; iRoot < colliderRoots.Count; iRoot++) { Transform colliderRoot = colliderRoots[iRoot]; if (colliderRoot != null) { Collider[] colliders = colliderRoot.GetComponentsInChildren <Collider>(); if (colliders != null && colliders.Length > 0) { for (int iCollider = 0; iCollider < colliders.Length; iCollider++) { EditorGamingMapData.CorrectCollider(colliders[iCollider]); yield return(null); yield return(null); Quaternion rot = colliders[iCollider].transform.rotation; colliders[iCollider].transform.rotation = Quaternion.identity; yield return(null); EditorDecorate decorate = EditorGamingMapData.SaveColliderData(colliders[iCollider], rot); yield return(null); colliders[iCollider].transform.rotation = rot; if (decorate != null) { decorate.id = m_AutoId++; editorDecorateList.Add(decorate); } CheckColliderLayer(colliders[iCollider]); } } } } } yield return(null); }
private IEnumerator ExportUpdate() { ConfigVO <ModelVO> .Instance.GetList(); yield return(null); ConfigVO <ModShipDecorateVO> .Instance.GetList(); ConfigVO <ModShipDecorateVO> .Instance.ResetData(); yield return(null); List <ModelVO> shipModelList = new List <ModelVO>(); List <ModelVO> modelList = ConfigVO <ModelVO> .Instance.GetList(); if (modelList != null && modelList.Count > 0) { for (int iModel = 0; iModel < modelList.Count; iModel++) { ModelVO modelVo = modelList[iModel]; if (modelVo.type == (int)EditorGamingMapData.ModelType.WarShip) { shipModelList.Add(modelVo); } } } yield return(null); if (shipModelList != null && shipModelList.Count > 0) { for (int iShip = 0; iShip < shipModelList.Count; iShip++) { ModelVO modelVo = shipModelList[iShip]; string assetName = modelVo.assetName; if (!string.IsNullOrEmpty(assetName)) { string[] resAssets = AssetDatabase.FindAssets(string.Format("{0} t:Prefab", assetName)); if (resAssets != null && resAssets.Length > 0) { for (int iRes = 0; iRes < resAssets.Length; iRes++) { assetName = AssetDatabase.GUIDToAssetPath(resAssets[iRes]); string[] assetSplit = assetName.Split('/'); if (assetSplit != null && assetSplit.Length > 0) { if (assetSplit[assetSplit.Length - 1].Equals(string.Format("{0}.prefab", modelVo.assetName))) { break; } } } GameObject assetObj = AssetDatabase.LoadAssetAtPath <GameObject>(assetName); if (assetObj != null) { GameObject shipObj = GameObject.Instantiate(assetObj); JudegeShipCollider(shipObj); shipObj.transform.SetParent(transform); shipObj.transform.localPosition = Vector3.zero; CapsuleCollider shipCollider = EditorGamingMapData.CalculateCapsuleCollider(shipObj); EditorGamingMapData.CorrectCollider(shipCollider); yield return(null); yield return(null); Quaternion shipRot = shipCollider.transform.rotation; shipCollider.transform.rotation = Quaternion.identity; yield return(null); EditorDecorate decorate = EditorGamingMapData.SaveColliderData(shipCollider, shipRot); yield return(null); shipCollider.transform.rotation = shipRot; ModShipDecorateVO shipDecorateVo = ConfigVO <ModShipDecorateVO> .Instance.GetData(modelVo.ID); if (shipDecorateVo != null) { shipDecorateVo.colliderMax = decorate.dirMax; shipDecorateVo.colliderMin = decorate.dirMin; // shipDecorateVo.colliderMax = new float[3] { CalcuateRound(decorate.dirmax.x, 3), CalcuateRound(decorate.dirmax.y, 3), CalcuateRound(decorate.dirmax.z, 3) }; // shipDecorateVo.colliderMin = new float[3] { CalcuateRound(decorate.dirmin.x, 3), CalcuateRound(decorate.dirmin.y, 3), CalcuateRound(decorate.dirmin.z, 3) }; } else { ModShipDecorateVO decorateVo = new ModShipDecorateVO(); decorateVo.ID = modelVo.ID; decorateVo.unitId = modelVo.ID; decorateVo.type = (int)EditorGamingMapData.COLLIDER_TYPE.PX_CAPSULE; //decorateVo.colliderMax = new float[3] { CalcuateRound(decorate.dirmax.x, 3), CalcuateRound(decorate.dirmax.y, 3), CalcuateRound(decorate.dirmax.z, 3) }; //decorateVo.colliderMin = new float[3] { CalcuateRound(decorate.dirmin.x, 3), CalcuateRound(decorate.dirmin.y, 3), CalcuateRound(decorate.dirmin.z, 3) }; decorateVo.colliderMax = decorate.dirMax; decorateVo.colliderMin = decorate.dirMin; ConfigVO <ModShipDecorateVO> .Instance.AddData(decorateVo); } yield return(null); if (shipObj != null) { GameObject.DestroyImmediate(shipObj); } yield return(null); } } } } } yield return(null); ConfigVO <ModShipDecorateVO> .Instance.SaveCSV(); bool isConfirm = EditorUtility.DisplayDialog("提示", "战舰碰撞信息导出成功", "确定"); if (isConfirm) { GameObject.DestroyImmediate(gameObject); } }
public IEnumerator GenerateAreaDecorate(EditorCollider outData, List <EditorDecorate> editorDecorateList) { if (m_Map.m_AreaSpawnerCache != null && m_Map.m_AreaSpawnerCache.Count > 0) { EditorColliderArea[] areaList = new EditorColliderArea[m_Map.m_AreaSpawnerCache.Count]; outData.areaList = areaList; List <GameObject> prefabList = new List <GameObject>(); for (int iArea = 0; iArea < m_Map.m_AreaSpawnerCache.Count; iArea++) { editorDecorateList.Clear(); EditorColliderArea editorArea = new EditorColliderArea(); areaList[iArea] = editorArea; AreaSpawner areaSpawner = m_Map.m_AreaSpawnerCache[iArea]; Area area = areaSpawner.GetArea(); string areaName = areaSpawner.GetAreaScenePath(); while (!string.IsNullOrEmpty(areaName) && area == null) { area = areaSpawner.GetArea(); yield return(null); } editorArea.areaId = areaSpawner.GetAreaId(); if (area != null) { EditorGamingMapData.CorrectAreaColliderCenter(area); yield return(null); yield return(null); prefabList.Clear(); MapEditorUtility.GetAllPrefab(area.transform, prefabList); if (prefabList != null && prefabList.Count > 0) { for (int iUnit = 0; iUnit < prefabList.Count; iUnit++) { GameObject unit = prefabList[iUnit]; List <Transform> colliderRoots = MapEditorUtility.FindChilds <Transform>(unit.transform, "Collider"); if (colliderRoots == null || colliderRoots.Count <= 0) { continue; } for (int iRoot = 0; iRoot < colliderRoots.Count; iRoot++) { Transform colliderRoot = colliderRoots[iRoot]; if (colliderRoot != null) { Collider[] colliders = colliderRoot.GetComponentsInChildren <Collider>(); if (colliders != null && colliders.Length > 0) { for (int iCollider = 0; iCollider < colliders.Length; iCollider++) { EditorUtility.DisplayProgressBar("GenerateAreaDecorate", string.Format("{0} {1}", area.name, colliders[iCollider].gameObject.name), (iArea + 1) * 1.0f / m_Map.m_AreaSpawnerCache.Count); Quaternion rot = colliders[iCollider].transform.rotation; colliders[iCollider].transform.rotation = Quaternion.identity; yield return(null); EditorDecorate decorate = EditorGamingMapData.SaveColliderData(colliders[iCollider], rot, true); yield return(null); colliders[iCollider].transform.rotation = rot; if (decorate != null) { decorate.id = m_AutoId++; editorDecorateList.Add(decorate); } CheckColliderLayer(colliders[iCollider]); } } } } } } editorArea.decorateList = editorDecorateList.ToArray(); } else { Debug.LogError(string.Format("Area {0} 未加载进来", areaSpawner.GetAreaId())); } yield return(null); EditorUtility.ClearProgressBar(); } } }
private GameObject CreateColliderObj(EditorDecorate data, Transform parent) { if (data == null) { return(null); } GameObject obj = null; Vector3 position = Vector3.zero; Quaternion rotation = new Quaternion(data.dir.x, data.dir.y, data.dir.z, data.dir.w); Vector3 scale = Vector3.one; Vector3 size = Vector3.one; size.x = Mathf.Abs(data.dirMax.x - data.dirMin.x); size.y = Mathf.Abs(data.dirMax.y - data.dirMin.y); size.z = Mathf.Abs(data.dirMax.z - data.dirMin.z); scale = size; float raduis = 0; position = new Vector3(data.dirMin.x + size.x * 0.5f, data.dirMin.y + size.y * 0.5f, data.dirMin.z + size.z * 0.5f); switch ((COLLIDER_TYPE)data.type) { case COLLIDER_TYPE.PX_BOX: obj = GameObject.CreatePrimitive(PrimitiveType.Cube); scale = new Vector3(size.x, size.y, size.z); break; case COLLIDER_TYPE.PX_CAPSULE: obj = GameObject.CreatePrimitive(PrimitiveType.Capsule); float height = Mathf.Max(size.x, size.y, size.z); if (height == size.x) { raduis = Mathf.Max(size.y, size.z); float scaleSize = height / 2; scale = new Vector3(scaleSize, raduis, raduis); } else if (height == size.y) { raduis = Mathf.Max(size.x, size.z); float scaleSize = height / 2; scale = new Vector3(raduis, scaleSize, raduis); } else if (height == size.z) { raduis = Mathf.Max(size.y, size.x); float scaleSize = height / 2; scale = new Vector3(raduis, raduis, scaleSize); } break; case COLLIDER_TYPE.PX_SPHERE: obj = GameObject.CreatePrimitive(PrimitiveType.Sphere); raduis = Mathf.Max(size.x, size.y, size.z); scale = new Vector3(raduis, raduis, raduis); break; } obj.name = data.scenePath; obj.transform.SetParent(parent); obj.transform.position = position; obj.transform.rotation = rotation; obj.transform.localScale = scale; CapsuleCollider capCollider = obj.GetComponent <CapsuleCollider>(); if (capCollider != null) { Vector3 originScale = capCollider.transform.localScale; capCollider.transform.localScale = new Vector3(originScale.y, originScale.x, originScale.z); capCollider.transform.Rotate(Vector3.forward, -90); //capCollider.direction = 2; } return(obj); }