채팅 추가
This commit is contained in:
59
Assets/02_Scripts/Editor/ChatSetupMenu.cs
Normal file
59
Assets/02_Scripts/Editor/ChatSetupMenu.cs
Normal file
@@ -0,0 +1,59 @@
|
||||
using UnityEditor;
|
||||
using UnityEditor.SceneManagement;
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// 채팅창을 씬에 넣는다.
|
||||
///
|
||||
/// UI 계층 자체는 런타임에 코드로 만들어지므로 씬에는 ChatController 를 얹은
|
||||
/// 빈 오브젝트 하나만 있으면 된다. 참조는 전부 Awake 에서 씬을 뒤져 채운다.
|
||||
/// </summary>
|
||||
public static class ChatSetupMenu
|
||||
{
|
||||
const string ObjectName = "ChatSystem";
|
||||
|
||||
[MenuItem("Tools/Desktop Overlay/6. Add Chat Window To Scene")]
|
||||
public static void AddChatSystem()
|
||||
{
|
||||
var existing = Object.FindFirstObjectByType<ChatController>();
|
||||
if (existing != null)
|
||||
{
|
||||
Selection.activeGameObject = existing.gameObject;
|
||||
EditorGUIUtility.PingObject(existing.gameObject);
|
||||
Debug.Log($"[ChatSetupMenu] 이미 있습니다: {existing.gameObject.name}");
|
||||
return;
|
||||
}
|
||||
|
||||
var go = new GameObject(ObjectName);
|
||||
Undo.RegisterCreatedObjectUndo(go, "Add Chat System");
|
||||
go.AddComponent<ChatController>();
|
||||
|
||||
// ChatController 가 Awake 에서 직접 붙이지만, 인스펙터에서 타임아웃 같은
|
||||
// 설정을 만질 수 있도록 미리 얹어둔다. 백엔드는 두 개 다 붙여두고
|
||||
// 설정 화면에서 고른 쪽만 실제로 쓴다.
|
||||
go.AddComponent<AnthropicChatBackend>();
|
||||
go.AddComponent<GeminiChatBackend>();
|
||||
go.AddComponent<ChatWindowUI>();
|
||||
|
||||
Selection.activeGameObject = go;
|
||||
EditorSceneManager.MarkSceneDirty(go.scene);
|
||||
|
||||
Debug.Log(
|
||||
"[ChatSetupMenu] ChatSystem 을 추가했습니다. 씬을 저장(Ctrl+S)하세요.\n" +
|
||||
"API 키는 실행 후 캐릭터를 클릭 → 채팅창 머리말의 '설정' 에서 입력합니다.\n" +
|
||||
$"(파일로 직접 넣으려면 {ChatConfig.ConfigPath}, 또는 환경 변수 ANTHROPIC_API_KEY)");
|
||||
}
|
||||
|
||||
[MenuItem("Tools/Desktop Overlay/7. Open Chat Config Folder")]
|
||||
public static void OpenConfigFolder()
|
||||
{
|
||||
string dir = ChatConfig.ConfigDirectory;
|
||||
System.IO.Directory.CreateDirectory(dir);
|
||||
|
||||
// 파일이 없으면 템플릿을 만들어 준다. 사용자가 열어서 apiKey 만 채우면 된다.
|
||||
ChatConfig.Load();
|
||||
|
||||
EditorUtility.RevealInFinder(ChatConfig.ConfigPath);
|
||||
Debug.Log($"[ChatSetupMenu] 설정 파일: {ChatConfig.ConfigPath}");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user