public void OnSceneGUI() { if (special == null) { special = (UISpecialArea)target; } base.OnSceneGUI(); //开始绘制GUI Handles.BeginGUI(); GUILayout.BeginArea(new Rect(SceneView.currentDrawingSceneView.position.width - 200, 100, 200, 200)); /*转换到面 转换到线*/ SelectedName = !special.DrawWireOrSurface ? EditorStringConfig.getString(10040):EditorStringConfig.getString(10041); if (GUILayout.Button(SelectedName, GUILayout.Width(100), GUILayout.Height(20))) { special.DrawWireOrSurface = !special.DrawWireOrSurface; } GUILayout.EndArea(); Handles.EndGUI(); }
public override void OnInspectorGUI() { //base.OnInspectorGUI(); if (special == null) { special = (UISpecialArea)target; } }
//克隆代码 public override void CloneScript(GameObject cloneSource, GameObject cloneObject) { UISpecialArea oldareaScript = cloneSource.GetComponent <UISpecialArea>(); UISpecialArea newareaScript = cloneObject.GetComponent <UISpecialArea>(); newareaScript.areaData = oldareaScript.areaData; newareaScript.areaSettingData = oldareaScript.areaSettingData; newareaScript.InitData(); }
//创建种植物 public static GameObject CreatePlant(Object resource, Vector3 worldpos, Vector3 scale, SceneElementType type, bool BornAtMap = true, Vector3 worldrotation = default(Vector3)) { GameObject createObj = PrefabUtility.InstantiatePrefab(resource) as GameObject; UISceneMap uiSceneMap = SceneEditorSettings.currMap.GetComponent <UISceneMap>(); int TypeIndex = (int)type; if (uiSceneMap != null) { createObj.transform.parent = uiSceneMap.ElementParents[TypeIndex - 1]; createObj.transform.localScale = scale; createObj.transform.rotation = Quaternion.Euler(worldrotation); createObj.transform.position = worldpos; } switch (type) { case SceneElementType.NPC: { UINPC npc = null; if (createObj != null) { npc = createObj.AddComponent <UINPC>(); } if (npc != null) { //保存数据 npc.npcSettingData.isAtMap = BornAtMap; npc.npcSettingData.Type = type; npc.npcSettingData.sourcePath = AssetDatabase.GetAssetPath(resource); CharacterController controller = npc.GetComponent <CharacterController>(); if (controller != null) { CapsuleCollider capsule = npc.gameObject.AddComponent <CapsuleCollider>(); if (capsule != null) { capsule.center = controller.center; capsule.radius = controller.radius; capsule.height = controller.height; capsule.direction = 1; } } } break; } case SceneElementType.BUILDING: { break; } case SceneElementType.TREE: { break; } default: { UISpecialArea area = createObj.GetComponent <UISpecialArea>(); if (area == null) { area = createObj.AddComponent <UISpecialArea>(); } //保存数据 area.areaSettingData.isAtMap = BornAtMap; area.areaSettingData.Type = type; area.areaSettingData.sourcePath = AssetDatabase.GetAssetPath(resource); break; } } Selection.activeObject = createObj; return(createObj); }
//自动导入配置文件 public static void AutoImportSettingFile() { string path = EditorUtility.OpenFilePanel("导入场景配置文件", Application.dataPath + "/Editor/SceneEditor/JC", "bytes"); if (string.IsNullOrEmpty(path)) { return; } List <SceneEditorSettingBaseData> settingDataList = new List <SceneEditorSettingBaseData>(); string strLine = null; try { FileStream aFile = new FileStream(path, FileMode.Open); StreamReader sr = new StreamReader(aFile); strLine = sr.ReadLine(); while (strLine != null) { if (strLine.Length > 0) { SceneEditorSettingBaseData settingData = null; string content = strLine.Substring(1); switch (strLine[0]) { case 'M': { MapSettingData mapData = fastJSON.JSON.Instance.ToObject <MapSettingData>(content); settingData = (SceneEditorSettingBaseData)mapData; break; } case 'N': { NPCSettingData npcData = fastJSON.JSON.Instance.ToObject <NPCSettingData>(content); settingData = (SceneEditorSettingBaseData)npcData; break; } case 'C': { SpecialAreaSettingData areaData = fastJSON.JSON.Instance.ToObject <SpecialAreaSettingData>(content); settingData = (SceneEditorSettingBaseData)areaData; break; } } if (settingData != null) { settingDataList.Add(settingData); } } strLine = sr.ReadLine(); } sr.Close(); } catch (IOException ex) { EditorUtility.DisplayDialog("错误", ex.ToString(), "确定"); return; } //Debug.LogError("settingDataList.count="+settingDataList.Count.ToString() ); //生成场景 foreach (SceneEditorSettingBaseData baseData in settingDataList) { GameObject create = null; if (baseData.Type == SceneElementType.MAP) { MapSettingData data = (MapSettingData)baseData; create = CreateMap(data.sourcePath, new Vector3(data.Attribute.pos[0], data.Attribute.pos[1], data.Attribute.pos[2]), new Vector2(data.GridSize[0], data.GridSize[1]), new Color(data.GridColor[0], data.GridColor[1], data.GridColor[2], data.GridColor[3])); if (create != null) { UISceneMap uimap = create.GetComponent <UISceneMap>(); if (uimap != null) { uimap.settingData = data; uimap.mapData = data.Attribute; uimap.InitData(); } } else { break; } } else if (baseData.Type == SceneElementType.NPC) { NPCSettingData data = (NPCSettingData)baseData; create = CreatePlant(data.sourcePath, new Vector3(data.Attribute.pos[0], data.Attribute.pos[1], data.Attribute.pos[2]), new Vector3(data.Attribute.scale[0], data.Attribute.scale[1], data.Attribute.scale[2]), data.Type, data.isAtMap, new Vector3(data.Attribute.rotation[0], data.Attribute.rotation[1], data.Attribute.rotation[2])); if (create != null) { //Debug.LogError(data.Attribute.startIntervalTime.ToString()); UINPC uinpc = create.GetComponent <UINPC>(); if (uinpc != null) { uinpc.settingData = data; uinpc.npcData = data.Attribute; uinpc.InitData(); } } } else { SpecialAreaSettingData data = (SpecialAreaSettingData)baseData; create = CreatePlant(data.sourcePath, new Vector3(data.Attribute.pos[0], data.Attribute.pos[1], data.Attribute.pos[2]), new Vector3(data.Attribute.scale[0], data.Attribute.scale[1], data.Attribute.scale[2]), data.Type, data.isAtMap, new Vector3(data.Attribute.rotation[0], data.Attribute.rotation[1], data.Attribute.rotation[2])); UISpecialArea uiarea = create.GetComponent <UISpecialArea>(); if (uiarea != null) { uiarea.settingData = data; uiarea.areaData = data.Attribute; uiarea.InitData(); } } } }