493 lines
19 KiB
C#
493 lines
19 KiB
C#
using UnityEngine;
|
|
using UnityEditor;
|
|
|
|
namespace Streamingle.Editor
|
|
{
|
|
public class StreamingleControllerSetupToolAdvanced : EditorWindow
|
|
{
|
|
private bool createCameraManager = true;
|
|
private bool createItemController = true;
|
|
private bool createEventController = true;
|
|
private bool createStreamDeckManager = true;
|
|
|
|
private string parentObjectName = "Streamingle 컨트롤러들";
|
|
private bool createParentObject = true;
|
|
|
|
// 고급 옵션
|
|
private bool autoConnectExistingControllers = true;
|
|
private bool setupDefaultSettings = true;
|
|
private bool createSampleData = false;
|
|
private bool moveExistingControllersToParent = true;
|
|
|
|
// 기존 컨트롤러 참조
|
|
private StreamDeckServerManager existingStreamDeckManager;
|
|
private CameraManager existingCameraManager;
|
|
private ItemController existingItemController;
|
|
private EventController existingEventController;
|
|
|
|
[MenuItem("Tools/Streamingle/고급 컨트롤러 설정 도구")]
|
|
public static void ShowWindow()
|
|
{
|
|
GetWindow<StreamingleControllerSetupToolAdvanced>("고급 Streamingle 설정");
|
|
}
|
|
|
|
private void OnEnable()
|
|
{
|
|
FindExistingControllers();
|
|
}
|
|
|
|
private void OnGUI()
|
|
{
|
|
GUILayout.Label("고급 Streamingle 컨트롤러 설정 도구", EditorStyles.boldLabel);
|
|
GUILayout.Space(10);
|
|
|
|
// 기존 컨트롤러 상태 표시
|
|
ShowExistingControllersStatus();
|
|
|
|
GUILayout.Space(10);
|
|
|
|
// 부모 오브젝트 설정
|
|
EditorGUILayout.BeginVertical("box");
|
|
GUILayout.Label("부모 오브젝트 설정", EditorStyles.boldLabel);
|
|
createParentObject = EditorGUILayout.Toggle("부모 오브젝트 생성", createParentObject);
|
|
if (createParentObject)
|
|
{
|
|
parentObjectName = EditorGUILayout.TextField("부모 오브젝트 이름", parentObjectName);
|
|
}
|
|
EditorGUILayout.EndVertical();
|
|
|
|
GUILayout.Space(10);
|
|
|
|
// 컨트롤러 선택
|
|
EditorGUILayout.BeginVertical("box");
|
|
GUILayout.Label("생성할 컨트롤러들", EditorStyles.boldLabel);
|
|
|
|
createStreamDeckManager = EditorGUILayout.Toggle("StreamDeck 서버 매니저", createStreamDeckManager);
|
|
createCameraManager = EditorGUILayout.Toggle("카메라 매니저", createCameraManager);
|
|
createItemController = EditorGUILayout.Toggle("아이템 컨트롤러", createItemController);
|
|
createEventController = EditorGUILayout.Toggle("이벤트 컨트롤러", createEventController);
|
|
|
|
EditorGUILayout.EndVertical();
|
|
|
|
GUILayout.Space(10);
|
|
|
|
// 고급 옵션
|
|
EditorGUILayout.BeginVertical("box");
|
|
GUILayout.Label("고급 옵션", EditorStyles.boldLabel);
|
|
|
|
autoConnectExistingControllers = EditorGUILayout.Toggle("기존 컨트롤러 자동 연결", autoConnectExistingControllers);
|
|
setupDefaultSettings = EditorGUILayout.Toggle("기본 설정 구성", setupDefaultSettings);
|
|
createSampleData = EditorGUILayout.Toggle("샘플 데이터 생성", createSampleData);
|
|
moveExistingControllersToParent = EditorGUILayout.Toggle("기존 컨트롤러를 부모 하위로 이동", moveExistingControllersToParent);
|
|
|
|
EditorGUILayout.EndVertical();
|
|
|
|
GUILayout.Space(20);
|
|
|
|
// 버튼들
|
|
EditorGUILayout.BeginHorizontal();
|
|
|
|
if (GUILayout.Button("선택된 컨트롤러들 생성", GUILayout.Height(30)))
|
|
{
|
|
CreateControllers();
|
|
}
|
|
|
|
if (GUILayout.Button("기존 컨트롤러들 연결", GUILayout.Height(30)))
|
|
{
|
|
ConnectExistingControllers();
|
|
}
|
|
|
|
EditorGUILayout.EndHorizontal();
|
|
|
|
GUILayout.Space(10);
|
|
|
|
EditorGUILayout.BeginHorizontal();
|
|
|
|
if (GUILayout.Button("컨트롤러 상태 새로고침", GUILayout.Height(25)))
|
|
{
|
|
FindExistingControllers();
|
|
}
|
|
|
|
if (GUILayout.Button("기존 컨트롤러들을 부모 하위로 이동", GUILayout.Height(25)))
|
|
{
|
|
MoveExistingControllersToParent();
|
|
}
|
|
|
|
EditorGUILayout.EndHorizontal();
|
|
|
|
GUILayout.Space(10);
|
|
|
|
// 정보 표시
|
|
EditorGUILayout.HelpBox(
|
|
"자동 감지 및 연결 기능이 포함된 고급 설정 도구입니다.\n" +
|
|
"'기존 컨트롤러들 연결'을 사용하여 찾은 컨트롤러들을 StreamDeck 매니저에 연결하세요.\n" +
|
|
"'기존 컨트롤러들을 부모 하위로 이동'을 사용하여 발견된 컨트롤러들을 정리하세요.",
|
|
MessageType.Info
|
|
);
|
|
}
|
|
|
|
private void ShowExistingControllersStatus()
|
|
{
|
|
EditorGUILayout.BeginVertical("box");
|
|
GUILayout.Label("기존 컨트롤러 상태", EditorStyles.boldLabel);
|
|
|
|
EditorGUILayout.BeginHorizontal();
|
|
GUILayout.Label("StreamDeck 서버 매니저:", GUILayout.Width(200));
|
|
if (existingStreamDeckManager != null)
|
|
{
|
|
string parentInfo = GetParentInfo(existingStreamDeckManager.transform);
|
|
EditorGUILayout.LabelField($"✓ 발견됨 {parentInfo}", EditorStyles.boldLabel);
|
|
}
|
|
else
|
|
{
|
|
EditorGUILayout.LabelField("✗ 발견되지 않음", EditorStyles.boldLabel);
|
|
}
|
|
EditorGUILayout.EndHorizontal();
|
|
|
|
EditorGUILayout.BeginHorizontal();
|
|
GUILayout.Label("카메라 매니저:", GUILayout.Width(200));
|
|
if (existingCameraManager != null)
|
|
{
|
|
string parentInfo = GetParentInfo(existingCameraManager.transform);
|
|
EditorGUILayout.LabelField($"✓ 발견됨 {parentInfo}", EditorStyles.boldLabel);
|
|
}
|
|
else
|
|
{
|
|
EditorGUILayout.LabelField("✗ 발견되지 않음", EditorStyles.boldLabel);
|
|
}
|
|
EditorGUILayout.EndHorizontal();
|
|
|
|
EditorGUILayout.BeginHorizontal();
|
|
GUILayout.Label("아이템 컨트롤러:", GUILayout.Width(200));
|
|
if (existingItemController != null)
|
|
{
|
|
string parentInfo = GetParentInfo(existingItemController.transform);
|
|
EditorGUILayout.LabelField($"✓ 발견됨 {parentInfo}", EditorStyles.boldLabel);
|
|
}
|
|
else
|
|
{
|
|
EditorGUILayout.LabelField("✗ 발견되지 않음", EditorStyles.boldLabel);
|
|
}
|
|
EditorGUILayout.EndHorizontal();
|
|
|
|
EditorGUILayout.BeginHorizontal();
|
|
GUILayout.Label("이벤트 컨트롤러:", GUILayout.Width(200));
|
|
if (existingEventController != null)
|
|
{
|
|
string parentInfo = GetParentInfo(existingEventController.transform);
|
|
EditorGUILayout.LabelField($"✓ 발견됨 {parentInfo}", EditorStyles.boldLabel);
|
|
}
|
|
else
|
|
{
|
|
EditorGUILayout.LabelField("✗ 발견되지 않음", EditorStyles.boldLabel);
|
|
}
|
|
EditorGUILayout.EndHorizontal();
|
|
|
|
EditorGUILayout.EndVertical();
|
|
}
|
|
|
|
private string GetParentInfo(Transform transform)
|
|
{
|
|
if (transform.parent == null)
|
|
{
|
|
return "(루트)";
|
|
}
|
|
else
|
|
{
|
|
return $"({transform.parent.name} 하위)";
|
|
}
|
|
}
|
|
|
|
private void FindExistingControllers()
|
|
{
|
|
existingStreamDeckManager = FindObjectOfType<StreamDeckServerManager>();
|
|
existingCameraManager = FindObjectOfType<CameraManager>();
|
|
existingItemController = FindObjectOfType<ItemController>();
|
|
existingEventController = FindObjectOfType<EventController>();
|
|
}
|
|
|
|
private void CreateControllers()
|
|
{
|
|
GameObject parentObject = null;
|
|
|
|
// 부모 오브젝트 생성
|
|
if (createParentObject)
|
|
{
|
|
parentObject = new GameObject(parentObjectName);
|
|
UnityEngine.Debug.Log($"부모 오브젝트 생성됨: {parentObjectName}");
|
|
}
|
|
|
|
// StreamDeck Server Manager 생성
|
|
if (createStreamDeckManager && existingStreamDeckManager == null)
|
|
{
|
|
CreateStreamDeckManager(parentObject);
|
|
}
|
|
|
|
// Camera Manager 생성
|
|
if (createCameraManager && existingCameraManager == null)
|
|
{
|
|
CreateCameraManager(parentObject);
|
|
}
|
|
|
|
// Item Controller 생성
|
|
if (createItemController && existingItemController == null)
|
|
{
|
|
CreateItemController(parentObject);
|
|
}
|
|
|
|
// Event Controller 생성
|
|
if (createEventController && existingEventController == null)
|
|
{
|
|
CreateEventController(parentObject);
|
|
}
|
|
|
|
// 기존 컨트롤러들을 부모 하위로 이동
|
|
if (moveExistingControllersToParent && parentObject != null)
|
|
{
|
|
MoveExistingControllersToParent(parentObject);
|
|
}
|
|
|
|
// 생성된 오브젝트들을 선택
|
|
if (parentObject != null)
|
|
{
|
|
Selection.activeGameObject = parentObject;
|
|
EditorGUIUtility.PingObject(parentObject);
|
|
}
|
|
|
|
// 기존 컨트롤러 상태 업데이트
|
|
FindExistingControllers();
|
|
|
|
UnityEngine.Debug.Log("Streamingle 컨트롤러 설정 완료!");
|
|
}
|
|
|
|
private void MoveExistingControllersToParent(GameObject parent = null)
|
|
{
|
|
if (parent == null)
|
|
{
|
|
// 기존 부모 오브젝트 찾기 또는 생성
|
|
parent = GameObject.Find(parentObjectName);
|
|
if (parent == null)
|
|
{
|
|
parent = new GameObject(parentObjectName);
|
|
UnityEngine.Debug.Log($"부모 오브젝트 생성됨: {parentObjectName}");
|
|
}
|
|
}
|
|
|
|
int movedCount = 0;
|
|
|
|
// StreamDeck Server Manager 이동
|
|
if (existingStreamDeckManager != null && existingStreamDeckManager.transform.parent != parent.transform)
|
|
{
|
|
existingStreamDeckManager.transform.SetParent(parent.transform);
|
|
movedCount++;
|
|
UnityEngine.Debug.Log($"StreamDeck 서버 매니저를 {parent.name} 하위로 이동");
|
|
}
|
|
|
|
// Camera Manager 이동
|
|
if (existingCameraManager != null && existingCameraManager.transform.parent != parent.transform)
|
|
{
|
|
existingCameraManager.transform.SetParent(parent.transform);
|
|
movedCount++;
|
|
UnityEngine.Debug.Log($"카메라 매니저를 {parent.name} 하위로 이동");
|
|
}
|
|
|
|
// Item Controller 이동
|
|
if (existingItemController != null && existingItemController.transform.parent != parent.transform)
|
|
{
|
|
existingItemController.transform.SetParent(parent.transform);
|
|
movedCount++;
|
|
UnityEngine.Debug.Log($"아이템 컨트롤러를 {parent.name} 하위로 이동");
|
|
}
|
|
|
|
// Event Controller 이동
|
|
if (existingEventController != null && existingEventController.transform.parent != parent.transform)
|
|
{
|
|
existingEventController.transform.SetParent(parent.transform);
|
|
movedCount++;
|
|
UnityEngine.Debug.Log($"이벤트 컨트롤러를 {parent.name} 하위로 이동");
|
|
}
|
|
|
|
if (movedCount > 0)
|
|
{
|
|
UnityEngine.Debug.Log($"{movedCount}개의 컨트롤러를 {parent.name} 하위로 이동했습니다.");
|
|
|
|
// 부모 오브젝트 선택
|
|
Selection.activeGameObject = parent;
|
|
EditorGUIUtility.PingObject(parent);
|
|
}
|
|
else
|
|
{
|
|
UnityEngine.Debug.Log("이동할 컨트롤러가 없습니다.");
|
|
}
|
|
}
|
|
|
|
private void ConnectExistingControllers()
|
|
{
|
|
if (existingStreamDeckManager == null)
|
|
{
|
|
UnityEngine.Debug.LogError("StreamDeck 서버 매니저를 찾을 수 없습니다! 먼저 생성해주세요.");
|
|
return;
|
|
}
|
|
|
|
// StreamDeck Manager에 컨트롤러들 연결
|
|
SerializedObject serializedObject = new SerializedObject(existingStreamDeckManager);
|
|
serializedObject.Update();
|
|
|
|
// Camera Manager 연결
|
|
if (existingCameraManager != null)
|
|
{
|
|
var cameraManagerProperty = serializedObject.FindProperty("cameraManager");
|
|
if (cameraManagerProperty != null)
|
|
{
|
|
cameraManagerProperty.objectReferenceValue = existingCameraManager;
|
|
}
|
|
}
|
|
|
|
// Item Controller 연결
|
|
if (existingItemController != null)
|
|
{
|
|
var itemControllerProperty = serializedObject.FindProperty("itemController");
|
|
if (itemControllerProperty != null)
|
|
{
|
|
itemControllerProperty.objectReferenceValue = existingItemController;
|
|
}
|
|
}
|
|
|
|
// Event Controller 연결
|
|
if (existingEventController != null)
|
|
{
|
|
var eventControllerProperty = serializedObject.FindProperty("eventController");
|
|
if (eventControllerProperty != null)
|
|
{
|
|
eventControllerProperty.objectReferenceValue = existingEventController;
|
|
}
|
|
}
|
|
|
|
serializedObject.ApplyModifiedProperties();
|
|
|
|
UnityEngine.Debug.Log("기존 컨트롤러들을 StreamDeck 서버 매니저에 연결했습니다!");
|
|
}
|
|
|
|
private void CreateStreamDeckManager(GameObject parent)
|
|
{
|
|
GameObject streamDeckObject = new GameObject("StreamDeck 서버 매니저");
|
|
|
|
if (parent != null)
|
|
{
|
|
streamDeckObject.transform.SetParent(parent.transform);
|
|
}
|
|
|
|
// StreamDeckServerManager 스크립트 추가
|
|
var streamDeckManager = streamDeckObject.AddComponent<StreamDeckServerManager>();
|
|
|
|
// 기본 설정
|
|
SerializedObject serializedObject = new SerializedObject(streamDeckManager);
|
|
serializedObject.Update();
|
|
|
|
// 포트 설정 (기본값: 10701)
|
|
var portProperty = serializedObject.FindProperty("port");
|
|
if (portProperty != null)
|
|
{
|
|
portProperty.intValue = 10701;
|
|
}
|
|
|
|
serializedObject.ApplyModifiedProperties();
|
|
|
|
UnityEngine.Debug.Log("StreamDeck 서버 매니저 생성됨");
|
|
}
|
|
|
|
private void CreateCameraManager(GameObject parent)
|
|
{
|
|
GameObject cameraObject = new GameObject("카메라 매니저");
|
|
|
|
if (parent != null)
|
|
{
|
|
cameraObject.transform.SetParent(parent.transform);
|
|
}
|
|
|
|
// CameraManager 스크립트 추가
|
|
var cameraManager = cameraObject.AddComponent<CameraManager>();
|
|
|
|
// 기본 설정
|
|
SerializedObject serializedObject = new SerializedObject(cameraManager);
|
|
serializedObject.Update();
|
|
|
|
// 카메라 프리셋 리스트 초기화
|
|
var cameraPresetsProperty = serializedObject.FindProperty("cameraPresets");
|
|
if (cameraPresetsProperty != null)
|
|
{
|
|
cameraPresetsProperty.ClearArray();
|
|
cameraPresetsProperty.arraySize = 0;
|
|
}
|
|
|
|
serializedObject.ApplyModifiedProperties();
|
|
|
|
UnityEngine.Debug.Log("카메라 매니저 생성됨");
|
|
}
|
|
|
|
private void CreateItemController(GameObject parent)
|
|
{
|
|
GameObject itemObject = new GameObject("아이템 컨트롤러");
|
|
|
|
if (parent != null)
|
|
{
|
|
itemObject.transform.SetParent(parent.transform);
|
|
}
|
|
|
|
// ItemController 스크립트 추가
|
|
var itemController = itemObject.AddComponent<ItemController>();
|
|
|
|
// 기본 설정
|
|
SerializedObject serializedObject = new SerializedObject(itemController);
|
|
serializedObject.Update();
|
|
|
|
// 아이템 그룹 리스트 초기화
|
|
var itemGroupsProperty = serializedObject.FindProperty("itemGroups");
|
|
if (itemGroupsProperty != null)
|
|
{
|
|
itemGroupsProperty.ClearArray();
|
|
itemGroupsProperty.arraySize = 0;
|
|
}
|
|
|
|
serializedObject.ApplyModifiedProperties();
|
|
|
|
UnityEngine.Debug.Log("아이템 컨트롤러 생성됨");
|
|
}
|
|
|
|
private void CreateEventController(GameObject parent)
|
|
{
|
|
GameObject eventObject = new GameObject("이벤트 컨트롤러");
|
|
|
|
if (parent != null)
|
|
{
|
|
eventObject.transform.SetParent(parent.transform);
|
|
}
|
|
|
|
// EventController 스크립트 추가
|
|
var eventController = eventObject.AddComponent<EventController>();
|
|
|
|
// 기본 설정
|
|
SerializedObject serializedObject = new SerializedObject(eventController);
|
|
serializedObject.Update();
|
|
|
|
// 이벤트 그룹 리스트 초기화
|
|
var eventGroupsProperty = serializedObject.FindProperty("eventGroups");
|
|
if (eventGroupsProperty != null)
|
|
{
|
|
eventGroupsProperty.ClearArray();
|
|
eventGroupsProperty.arraySize = 0;
|
|
}
|
|
|
|
// 자동 찾기 비활성화
|
|
var autoFindEventsProperty = serializedObject.FindProperty("autoFindEvents");
|
|
if (autoFindEventsProperty != null)
|
|
{
|
|
autoFindEventsProperty.boolValue = false;
|
|
}
|
|
|
|
serializedObject.ApplyModifiedProperties();
|
|
|
|
UnityEngine.Debug.Log("이벤트 컨트롤러 생성됨");
|
|
}
|
|
}
|
|
} |