109 lines
3.3 KiB
C#
109 lines
3.3 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using Games.GlobeDefine;
|
|||
|
using GCGame.Table;
|
|||
|
using UnityEditor;
|
|||
|
using UnityEditor.SceneManagement;
|
|||
|
using UnityEngine;
|
|||
|
|
|||
|
public class AllServerObstacle : EditorWindow
|
|||
|
{
|
|||
|
[MenuItem("ProTool/ServerObstacle/Create For All")]
|
|||
|
public static void ShowWindow()
|
|||
|
{
|
|||
|
GetWindow<AllServerObstacle>();
|
|||
|
}
|
|||
|
|
|||
|
private void OnGUI()
|
|||
|
{
|
|||
|
GUILayout.Label("即将为所有SceneClass索引的场景创建服务器碰撞");
|
|||
|
|
|||
|
if (GUILayout.Button("确定"))
|
|||
|
{
|
|||
|
Close();
|
|||
|
var sceneHash = new HashSet<string>();
|
|||
|
var sceneList = EditorTableManager.GetTable<Tab_SceneClass>();
|
|||
|
foreach (var scene in sceneList)
|
|||
|
{
|
|||
|
var sceneName = scene.ResName.Trim();
|
|||
|
if (!string.IsNullOrEmpty(sceneName) &&
|
|||
|
sceneName != GlobeVar.sceneRole &&
|
|||
|
sceneName != GlobeVar.sceneLoading &&
|
|||
|
sceneName != GlobeVar.sceneLogin)
|
|||
|
sceneHash.Add(sceneName);
|
|||
|
}
|
|||
|
var action = new AllServerObstacleAction(sceneHash.ToArray());
|
|||
|
action.Start();
|
|||
|
}
|
|||
|
if (GUILayout.Button("取消"))
|
|||
|
Close();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
private class AllServerObstacleAction : EditorPerFrameActionBase
|
|||
|
{
|
|||
|
private string[] _scenePaths;
|
|||
|
private int _currentIndex;
|
|||
|
// 打开场景后,跳过一帧
|
|||
|
private bool _skip;
|
|||
|
|
|||
|
public AllServerObstacleAction(string[] scenePaths)
|
|||
|
{
|
|||
|
_scenePaths = scenePaths;
|
|||
|
}
|
|||
|
|
|||
|
protected override int GetCurrentIndex()
|
|||
|
{
|
|||
|
return _currentIndex;
|
|||
|
}
|
|||
|
|
|||
|
protected override int GetTotalCount()
|
|||
|
{
|
|||
|
return _scenePaths.Length;
|
|||
|
}
|
|||
|
|
|||
|
protected override void PerFrameAction()
|
|||
|
{
|
|||
|
if (_skip)
|
|||
|
{
|
|||
|
_skip = false;
|
|||
|
_currentIndex++;
|
|||
|
ServerObstacle.CreateObstacle();
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
var sceneName = _scenePaths[_currentIndex];
|
|||
|
var scenePath = SceneDisassembly.sceneRoot.Open(sceneName + SceneDisassembly.sceneExtension);
|
|||
|
var error = false;
|
|||
|
try
|
|||
|
{
|
|||
|
var scene = EditorSceneManager.OpenScene(scenePath, OpenSceneMode.Single);
|
|||
|
Debug.Log("加载场景 " + scene.name);
|
|||
|
if (scene.name == sceneName)
|
|||
|
{
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Debug.LogError(string.Format("无法加载场景{0}于项目路径{1}!", sceneName, scenePath));
|
|||
|
error = true;
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception e)
|
|||
|
{
|
|||
|
Debug.LogError(e);
|
|||
|
error = true;
|
|||
|
}
|
|||
|
if (error)
|
|||
|
{
|
|||
|
_skip = false;
|
|||
|
_currentIndex++;
|
|||
|
Debug.LogWarning(string.Format("场景{0}保存为空白文件!", sceneName));
|
|||
|
ServerObstacle.CreateEmptyObstacle(sceneName);
|
|||
|
}
|
|||
|
else
|
|||
|
_skip = true;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|