Beispiel #1
0
    static void SetItem()
    {
        var go = Selection.activeGameObject;

        if (go == null)
        {
            Debug.LogError("请选择物体");
            return;
        }

        var itemRoot = MapEventHelper.FindItemRoot();

        if (go.transform.parent == null || go.transform.parent.gameObject != itemRoot)
        {
            Debug.LogError("请选择shiqu对象中的道具");
            return;
        }

        var item = go.GetComponent <SceneItem> ();

        if (item == null)
        {
            int itemId = 0;
            foreach (var sceneItem in itemRoot.GetComponentsInChildren <SceneItem> ())
            {
                itemId = Mathf.Max(itemId, int.Parse(sceneItem.itemId));
            }

            item        = go.AddComponent <SceneItem> ();
            item.itemId = (itemId + 1).ToString();
        }
    }
    public static MapArea CreateMapArea(SceneTriggerShape shape)
    {
        GameObject root = MapEventHelper.FindAreaRoot();

        GameObject go       = null;
        var        collider = CreateSolidCollider(shape, new Vector3(2, 2, 2), out go);

        collider.isTrigger = true;

        var node = go.AddComponent <MapArea> ();

        go.transform.SetParent(root.transform);
        go.transform.position   = MapManager.selectionPosition;
        go.transform.localScale = Vector3.one;
        go.transform.rotation   = Quaternion.identity;

        var child = new GameObject("text");

        child.transform.parent        = go.transform;
        child.transform.localPosition = Vector3.zero;
        child.transform.localScale    = Vector3.one;
        child.transform.rotation      = Quaternion.identity;

        /*var text = child.AddComponent<TextMesh> ();
         * text.anchor = TextAnchor.MiddleCenter;
         * text.alignment = TextAlignment.Center;
         * text.text = node.displayName;*/

        Selection.activeGameObject = go;

        return(node);
    }
    public static void CreateTrigger(GameObject target, SceneTriggerType tiggerType, string triggerData, SceneTriggerShape triggerShape, Vector3 nodeSize)
    {
        GameObject root = MapEventHelper.FindTriggerRoot();

        if (target == root)
        {
            target = null;
        }

        var go   = new GameObject("触发器-" + triggerData);
        var node = go.AddComponent <SceneTrigger> ();

        node.triggerType = tiggerType;
        node.triggerData = triggerData;
        node.shape       = triggerShape;

        go.transform.SetParent(root.transform);
        go.transform.position   = target != null?target.transform.position:MapManager.selectionPosition;
        go.transform.localScale = Vector3.one;
        go.transform.rotation   = Quaternion.identity;

        var collider = CreateCollider(go, triggerShape, nodeSize);

        collider.isTrigger = true;

        //map.AddTrigger (node);

        Selection.activeGameObject = go;
    }
Beispiel #4
0
    static void GenerateSceneConfguration()
    {
        Vector3 min = new Vector3(float.MaxValue, float.MaxValue, float.MaxValue);
        Vector3 max = new Vector3(float.MinValue, float.MinValue, float.MinValue);

        Debug.LogFormat("GenerateSceneBound");

        var settings = GameObject.FindObjectOfType <MapAreaSettings> ();

        GenerateSceneConfguration(settings, "Dynamic/Low/Surface", ref min, ref max);
        GenerateSceneConfguration(settings, "Solid/Surface", ref min, ref max);
        GenerateSceneConfguration(settings, "Solid/Other/EasyWater", ref min, ref max);

        Debug.LogFormat("Bounds {0},{1},Center {2}", min, max, (min + max) / 2);

        mapBounds = new Bounds((min + max) / 2, max - min);

        var map = MapEventHelper.FindAreaRoot();
        var box = map.GetComponent <BoxCollider> ();

        if (box == null)
        {
            box = map.AddComponent <BoxCollider> ();
        }
        box.center = mapBounds.center;
        box.size   = mapBounds.size;
    }
    public static MapWall CreateWall(string wallName, int requiredKey)
    {
        GameObject root = MapEventHelper.FindWallRoot();
        var        go   = GameObject.CreatePrimitive(PrimitiveType.Cube);

        go.name = ("墙体-" + wallName);
        go.transform.SetParent(root.transform);
        go.transform.position = MapManager.selectionPosition;

        var collider = go.GetComponent <BoxCollider> ();

        collider.isTrigger      = true;
        go.transform.localScale = new Vector3(8, 2, 0.5f);

        var render = go.GetComponent <MeshRenderer> ();

        render.enabled = false;

        var node = go.AddComponent <MapWall> ();

        node.wallName    = wallName;
        node.requiredKey = requiredKey;

        return(node);
    }
Beispiel #6
0
 static void CreateSceneMapEvent()
 {
     MapEventHelper.GetOrCreateGameObject("GameEvents");
     MapEventHelper.GetOrCreateGameObject("GameTriggers");
     MapEventHelper.GetOrCreateGameObject("GameWalls");
     MapEventHelper.GetOrCreateGameObject("GameItems");
     MapEventHelper.GetOrCreateGameObject("GameAudios");
     MapEventHelper.GetOrCreateGameObject("GameAreas");
 }
Beispiel #7
0
	static Example.MapItem ExportMapItem(List<Example.MapItem> items,SceneItem sceneItem){
		 
		Example.MapItem item = new Example.MapItem (); 
		item.Id = int.Parse(sceneItem.itemId);
		item.RequiredKey = sceneItem.requiredKey; 
		item.Path = MapEventHelper.GetGameObjectPath (sceneItem.transform);

		items.Add (item); 
		return item;
	} 
Beispiel #8
0
 protected override void OnUpdate()
 {
     if (obj != null)
     {
         objPath = MapEventHelper.GetGameObjectPath(obj.transform);
     }
     else if (!string.IsNullOrEmpty(objPath) && obj == null)
     {
         obj = GameObject.Find(objPath);
     }
 }
Beispiel #9
0
 protected override void OnUpdate()
 {
     if (group != null)
     {
         objPath = MapEventHelper.GetGameObjectPath(group.transform);
     }
     else if (objPath != null)
     {
         group = GameObject.Find(objPath).GetComponent <SceneNPCGroup> ();
     }
 }
Beispiel #10
0
 protected override void OnUpdate()
 {
     if (wall != null)
     {
         objPath = MapEventHelper.GetGameObjectPath(wall.transform);
     }
     else if (objPath != null && wall == null)
     {
         wall = GameObject.Find(objPath).GetComponent <MapWall> ();
     }
 }
Beispiel #11
0
 protected override void OnUpdate()
 {
     if (itemObj != null)
     {
         objPath = MapEventHelper.GetGameObjectPath(itemObj.transform);
     }
     else if (!string.IsNullOrEmpty(objPath))
     {
         itemObj = GameObject.Find(objPath).GetComponent <SceneItem> ();
     }
 }
Beispiel #12
0
    public static SceneItem CreateItem(string id, string name, string icon)
    {
        GameObject root = MapEventHelper.FindItemRoot();
        var        go   = new GameObject(name);

        go.transform.SetParent(root.transform);
        go.transform.position = MapManager.selectionPosition;

        var node = go.AddComponent <SceneItem> ();

        node.itemName = name;
        node.itemIcon = icon;
        node.itemId   = id;

        return(node);
    }
Beispiel #13
0
 protected override void OnUpdate()
 {
     if (triggerObj != null)
     {
         objPath   = MapEventHelper.GetGameObjectPath(triggerObj.transform);
         triggerId = triggerObj.objectId;
     }
     else if (!string.IsNullOrEmpty(objPath) && triggerObj == null)
     {
         triggerObj = GameObject.Find(objPath).GetComponent <SceneTrigger> ();
     }
     else
     {
         triggerObj = FindTrigger(triggerId);
     }
 }
Beispiel #14
0
 protected override void OnUpdate()
 {
     if (group != null)
     {
         objPath = MapEventHelper.GetGameObjectPath(group.transform);
         groupid = group.groupId;
     }
     else if (!string.IsNullOrEmpty(objPath))
     {
         group = GameObject.Find(objPath).GetComponent <SceneNPCGroup> ();
     }
     else
     {
         group = FindGroup(groupid);
     }
 }
Beispiel #15
0
    public static T CreateEvent <T> (MapEventType eventType) where T : MapEvent
    {
        GameObject root = MapEventHelper.FindEventRoot();

        var go   = new GameObject("事件-" + eventType);
        var node = go.AddComponent <T> ();

        node.eventType = eventType;

        go.transform.SetParent(root.transform);
        go.transform.localPosition = Vector3.zero;
        go.transform.localScale    = Vector3.one;
        go.transform.rotation      = Quaternion.identity;

        Selection.activeGameObject = go;

        return(node);
    }
Beispiel #16
0
    public static void PrintMapUnit(string path)
    {
        var mapName = System.IO.Path.GetFileName(path);
        var root    = MapEventHelper.GetOrCreateGameObject(mapName);

        var data = File.ReadAllBytes(path);

        Example.MapUnit mapUnit = Example.MapUnit.Deserialize(data);

        int groupID = 0;

        foreach (var group in mapUnit.Groups)
        {
            if (groupID > 0)
            {
                var groupGo = MapEventHelper.AddChildGameObject(root, "group-" + (groupID));
                int waveID  = 0;
                foreach (var wave in group.Passes)
                {
                    var waveGO = MapEventHelper.AddChildGameObject(groupGo, "wave-" + (++waveID));
                    foreach (var npcID in wave.Npcs)
                    {
                        var npc    = mapUnit.Npcs[npcID];
                        var npcGO  = MapEventHelper.AddChildGameObject(PrimitiveType.Capsule, waveGO, "npc-" + npcID);
                        var npcObj = npcGO.AddComponent <SceneNPC> ();
                        npcObj.objectId           = npcID;
                        npcObj.resId              = MapManager.FindNPCResId(npcID);
                        npcObj.transform.position = MapUtil.Vector3fToVector3(npc.Position) + Vector3.up;
                        npcObj.transform.rotation = Quaternion.Euler(MapUtil.Vector3fToVector3(npc.Rotation));
                    }
                }
            }
            ++groupID;
        }

        foreach (var transmitNode in mapUnit.TransmitNodes)
        {
            var transimitGo = MapEventHelper.AddChildGameObject(root, "transimit-" + (transmitNode.Id));
            transimitGo.transform.position = MapUtil.Vector3fToVector3(transmitNode.Position);
            transimitGo.transform.rotation = Quaternion.Euler(MapUtil.Vector3fToVector3(transmitNode.Rotation));
        }
    }
Beispiel #17
0
    public static MapAudioSource CreateAudioSource(string audioName)
    {
        GameObject root = MapEventHelper.FindAudioRoot();
        var        go   = GameObject.CreatePrimitive(PrimitiveType.Sphere);

        go.name = ("音频源-" + audioName);
        go.transform.SetParent(root.transform);
        go.transform.position = MapManager.selectionPosition;


        var render = go.GetComponent <MeshRenderer> ();

        render.enabled = false;

        var node = go.AddComponent <MapAudioSource> ();

        node.audioPath = audioName;

        return(node);
    }
Beispiel #18
0
    public static void DrawSceneMap(SceneMap map)
    {
        foreach (var npc in map.npcList)
        {
            if (npc == null)
            {
                continue;
            }
            DrawSceneObject(npc, Color.green);
        }

        foreach (var npc in map.transmitList)
        {
            if (npc == null)
            {
                continue;
            }
            DrawSceneObject(npc, Color.blue);
        }


        var areaRoot = MapEventHelper.FindAreaRoot();

        if (areaRoot != null)
        {
            foreach (var area in areaRoot.GetComponentsInChildren <MapArea>())
            {
                DrawArea(area);
            }
        }


        Handles.BeginGUI();
        GUI.contentColor = Color.green;
        GUI.Label(new Rect(10, 10, 1000, 20), "选择位置:按下Control键的同时点击鼠标左键");
        GUI.Label(new Rect(10, 30, 1000, 20), "创建:点击鼠标右键");
        GUI.Label(new Rect(10, 50, 1000, 20), "路点编辑菜单:按下Shift键的同时点击鼠标右键");
        Handles.EndGUI();
    }
Beispiel #19
0
    private static void PrintArgment(GameObject go, Example.ContentValue arg)
    {
        if (arg.IntValue != 0)
        {
            MapEventHelper.AddChildGameObject(go, "intValue-" + arg.IntValue);
        }

        if (arg.FloatValue != 0)
        {
            MapEventHelper.AddChildGameObject(go, "floatValue-" + arg.FloatValue);
        }

        if (!string.IsNullOrEmpty(arg.StrValue))
        {
            MapEventHelper.AddChildGameObject(go, "strValue-" + arg.StrValue);
        }
        var pos = MapUtil.Vector3fToVector3(arg.Vector3Value);

        if (pos.magnitude > 0)
        {
            MapEventHelper.AddChildGameObject(go, "vecValue-" + pos);
        }
    }
Beispiel #20
0
    public static void PrintMapEvent(string path)
    {
        var mapName = System.IO.Path.GetFileName(path);
        var root    = MapEventHelper.GetOrCreateGameObject(mapName);

        var wallRoot    = MapEventHelper.AddChildGameObject(root, "GameWalls");
        var triggerRoot = MapEventHelper.AddChildGameObject(root, "GameTriggers");
        var eventRoot   = MapEventHelper.AddChildGameObject(root, "GameEvents");

        var data = File.ReadAllBytes(path);

        Example.MapEventData mapEventData = Example.MapEventData.Deserialize(data);


        foreach (var mapWall in mapEventData.Walls)
        {
            var go = MapEventHelper.AddChildGameObject(wallRoot, "wall-" + (mapWall.Id));
            go.transform.position = MapUtil.Vector3fToVector3(mapWall.Center);
            go.transform.rotation = Quaternion.Euler(MapUtil.Vector3fToVector3(mapWall.Rotation));
            var box = go.AddComponent <BoxCollider> ();
            box.size = MapUtil.Vector3fToVector3(mapWall.Size);
        }

        foreach (var mapTrigger in mapEventData.Triggers)
        {
            var go = MapEventHelper.AddChildGameObject(triggerRoot, "trigger-" + (mapTrigger.Id));
            go.transform.position = MapUtil.Vector3fToVector3(mapTrigger.Center);
            go.transform.rotation = Quaternion.Euler(MapUtil.Vector3fToVector3(mapTrigger.Rotation));

            if (mapTrigger.shape == Example.MapTrigger.Shape.BOX)
            {
                var box = go.AddComponent <BoxCollider> ();
                box.size = MapUtil.Vector3fToVector3(mapTrigger.Size);
            }
            else if (mapTrigger.shape == Example.MapTrigger.Shape.CIRCLE)
            {
                var sphere = go.AddComponent <SphereCollider> ();
                sphere.radius = mapTrigger.Radius;
            }
        }

        foreach (var mapEvent in mapEventData.Events)
        {
            var go       = MapEventHelper.AddChildGameObject(eventRoot, "event-" + (mapEvent.Id));
            var eventObj = go.AddComponent <MapEvent> ();
            eventObj.eventType = (MapEventType)mapEvent.EventType;
            eventObj.eventId   = mapEvent.Id;

            foreach (var condition in mapEvent.Conditions)
            {
                var conditionGO = MapEventHelper.AddChildGameObject(go, "condition");
                PrintArgment(conditionGO, condition.Arg2);
            }

            foreach (var action in mapEvent.Actions)
            {
                var actionGO = MapEventHelper.AddChildGameObject(go, "action-" + action.ActionType);
                foreach (var arg in action.Args)
                {
                    var argGO = MapEventHelper.AddChildGameObject(actionGO, "arg");
                    PrintArgment(argGO, arg);
                    if (argGO.transform.childCount == 0)
                    {
                        GameObject.DestroyImmediate(argGO);
                    }
                }
            }
        }
    }
Beispiel #21
0
 static void ExportMapEventData()
 {
     MapEventHelper.ExportEvents(MapManager.current);
 }
Beispiel #22
0
	public static void ExportEvents(SceneMap map,string path = null){
		int mapId = 10;
		if (map != null) {
			mapId = map.sceneId;
		}

		string exportDir = MapUtil.DataPath();
		exportDir += "MapData/";
		if (!Directory.Exists (exportDir)) {
			Directory.CreateDirectory (exportDir);
		} 

		if (path == null) {			
			path = exportDir +"/MapEvent_" + mapId + ".bytes";
		} 

		SceneMap mapRoot = FindSceneRoot ();
		GameObject triggerRoot = FindTriggerRoot();
		GameObject wallRoot = FindWallRoot ();
		GameObject eventRoot = FindEventRoot (); 
		GameObject itemRoot = FindItemRoot ();
		GameObject audioRoot = FindAudioRoot ();
		GameObject areaRoot = FindAreaRoot ();

		List<Example.MapWall> walls = new List<Example.MapWall> ();
		List<Example.MapEvent> events = new List<Example.MapEvent> ();
		List<Example.MapTrigger> triggers = new List<Example.MapTrigger> (); 
		List<Example.MapEntityEvent> entityEvents = new List<Example.MapEntityEvent> ();
		List<Example.MapItem> items = new List<Example.MapItem> ();
		List<Example.MapAudioSource> audios = new List<Example.MapAudioSource> ();
		List<Example.MapArea> areas = new List<Example.MapArea> ();

		if (mapRoot == null) {
			Debug.LogError ("没有场景配置,将场景预制拖到编辑器中,或者创建一个新的场景");
			return;
		}

		if (eventRoot != null) {
			var sceneEvents = eventRoot.GetComponentsInChildren<MapEvent> ();
			foreach (var sceneEvent in sceneEvents) { 
				var mapEvent = ExportMapEvent (events,sceneEvent);  
			}
		}

		if (wallRoot != null) {
			var sceneWalls = wallRoot.GetComponentsInChildren<MapWall> ();
			foreach (var sceneWall in sceneWalls) { 
				var wall = ExportMapWall (walls,sceneWall); 
				var eventTriggers = sceneWall.GetComponentsInChildren <MapEventTrigger>(); 
				var entityEvent = ExportMapEntityEvent (eventTriggers,wall.Id,Example.MapEntityEvent.Type.WALL);
				if (eventTriggers.Length > 0) {
					entityEvents.Add (entityEvent);
				}
			}
		}

		var sceneTriggers = triggerRoot.GetComponentsInChildren<SceneTrigger> ();
		foreach (var sceneTrigger in sceneTriggers) { 		
			var trigger = ExportMapTrigger (triggers,sceneTrigger);
			var eventTriggers = sceneTrigger.GetComponentsInChildren <MapEventTrigger>();
			foreach (var eventTrigger in eventTriggers) { 	 
				if (eventTrigger.eventType == MapEventTriggerType.TriggerIn) {
					trigger.InActions = ExportMapEventActions (eventTrigger.GetComponentsInChildren<MapEventAction>(),trigger.Id.ToString());
				}else if (eventTrigger.eventType == MapEventTriggerType.TriggerOut) {
					trigger.OutActions = ExportMapEventActions (eventTrigger.GetComponentsInChildren<MapEventAction>(),trigger.Id.ToString());
				}
			}
			 
		}

		foreach (var npc in mapRoot.npcList) {
			var eventTriggers = npc.GetComponentsInChildren <MapEventTrigger>(); 
			var entityEvent = ExportMapEntityEvent (eventTriggers,npc.objectId,Example.MapEntityEvent.Type.NPC);
			if (eventTriggers.Length > 0) {
				entityEvents.Add (entityEvent);
			}
		}

		if (itemRoot != null) { 
			var sceneItems = itemRoot.GetComponentsInChildren<SceneItem> ();
			foreach (var sceneItem in sceneItems) { 
				if (string.IsNullOrEmpty (sceneItem.itemId)) {
					//GameObject.DestroyImmediate (sceneItem.gameObject);
					Debug.LogErrorFormat("{0} not valid item object",MapEventHelper.GetGameObjectPath(sceneItem.transform));
					continue;
				}
				var item = ExportMapItem (items,sceneItem); 
				var eventTriggers = sceneItem.GetComponentsInChildren <MapEventTrigger>(); 
				var entityEvent = ExportMapEntityEvent (eventTriggers,item.Id,Example.MapEntityEvent.Type.ITEM);
				if (eventTriggers.Length > 0) {
					entityEvents.Add (entityEvent);
				}
			}
		}

		if (audioRoot != null) { 
			var audioSources = audioRoot.GetComponentsInChildren<MapAudioSource> ();
			foreach (var audioSource in audioSources) {  
				var audio = ExportMapAudioSource (audios,audioSource); 
			}
		}

		if (areaRoot != null) { 
			var mapAreas = areaRoot.GetComponentsInChildren<MapArea> ();
			foreach (var mapArea in mapAreas) {  
				var area = ExportMapArea (areas,mapArea); 
			}
		}
		 


		Example.MapEventData mapEventData = new Example.MapEventData ();
		mapEventData.Walls = walls;
		mapEventData.Events = events;
		mapEventData.Triggers = triggers;
		mapEventData.EntityEvents = entityEvents;
		mapEventData.Items = items;
		mapEventData.AudioSources = audios;
		mapEventData.Areas = areas;

		var bytes = Example.MapEventData.SerializeToBytes (mapEventData);
		FileStream fs = new FileStream (path, FileMode.Create);
		fs.Write (bytes,0,bytes.Length);
		fs.Close ();

		/*var prefab = PrefabUtility.GetPrefabParent (wallRoot); 
		PrefabUtility.ReplacePrefab (wallRoot,prefab);
		//prefab = PrefabUtility.GetPrefabParent (itemRoot); 
		//PrefabUtility.ReplacePrefab (itemRoot,prefab);
		prefab = PrefabUtility.GetPrefabParent (eventRoot); 
		PrefabUtility.ReplacePrefab (eventRoot,prefab);
		prefab = PrefabUtility.GetPrefabParent (triggerRoot); 
		PrefabUtility.ReplacePrefab (triggerRoot,prefab);*/

		Debug.LogFormat ("导出场景事件{0}数据到{1}",mapId,path);
	}