commit 8d1881749cffa4ba9582068df9698f62c6598b6a Author: NJ\skrwn Date: Tue Aug 25 00:55:37 2026 +0900 first commit diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..b7d5dce --- /dev/null +++ b/.gitattributes @@ -0,0 +1,49 @@ +## Unity ## +*.cs diff=csharp text +*.cginc text +*.shader text +*.mat merge=unityyamlmerge eol=lf +*.physicsMaterial2D merge=unityyamlmerge eol=lf +*.physicMaterial merge=unityyamlmerge eol=lf +*.meta merge=unityyamlmerge eol=lf +*.controller merge=unityyamlmerge eol=lf +## git-lfs ## +*.anim filter=lfs diff=lfs merge=lfs -text +*.asset filter=lfs diff=lfs merge=lfs -text +*.prefab filter=lfs diff=lfs merge=lfs -text +*.unity filter=lfs diff=lfs merge=lfs -text +#Image +*.jpg filter=lfs diff=lfs merge=lfs -text +*.jpeg filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.gif filter=lfs diff=lfs merge=lfs -text +*.psd filter=lfs diff=lfs merge=lfs -text +*.ai filter=lfs diff=lfs merge=lfs -text +#Audio +*.mp3 filter=lfs diff=lfs merge=lfs -text +*.wav filter=lfs diff=lfs merge=lfs -text +*.ogg filter=lfs diff=lfs merge=lfs -text +#Video +*.mp4 filter=lfs diff=lfs merge=lfs -text +*.mov filter=lfs diff=lfs merge=lfs -text +#3D Object +*.FBX filter=lfs diff=lfs merge=lfs -text +*.fbx filter=lfs diff=lfs merge=lfs -text +*.blend filter=lfs diff=lfs merge=lfs -text +*.obj filter=lfs diff=lfs merge=lfs -text +#ETC +*.a filter=lfs diff=lfs merge=lfs -text +*.exr filter=lfs diff=lfs merge=lfs -text +*.tga filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.dll filter=lfs diff=lfs merge=lfs -text +*.unitypackage filter=lfs diff=lfs merge=lfs -text +*.aif filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.rns filter=lfs diff=lfs merge=lfs -text +*.reason filter=lfs diff=lfs merge=lfs -text +*.lxo filter=lfs diff=lfs merge=lfs -text +*.bytes filter=lfs diff=lfs merge=lfs -text +*.hdr filter=lfs diff=lfs merge=lfs -text +*.cubemap filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa16a98 --- /dev/null +++ b/.gitignore @@ -0,0 +1,94 @@ +# ---> Unity +# This .gitignore file should be placed at the root of your Unity project directory +# +# Get latest from https://github.com/github/gitignore/blob/main/Unity.gitignore +# +/[Ll]ibrary/ +/[Tt]emp/ +/[Oo]bj/ +/[Bb]uild/ +/[Bb]uilds/ +/[Ll]ogs/ +/[Uu]ser[Ss]ettings/ + +# MemoryCaptures can get excessive in size. +# They also could contain extremely sensitive data +/[Mm]emoryCaptures/ + +# Recordings can get excessive in size +/[Rr]ecordings/ + +# Uncomment this line if you wish to ignore the asset store tools plugin +# /[Aa]ssets/AssetStoreTools* + +# Autogenerated Jetbrains Rider plugin +/[Aa]ssets/Plugins/Editor/JetBrains* + +# Visual Studio cache directory +.vs/ + +# IDE settings (자동 생성 — 사용자별 설정) +.vscode/ +.idea/ + +# OS generated files +.DS_Store +Thumbs.db +desktop.ini + +# Crash dumps +*.dmp +mono_crash* + +# Gradle cache directory +.gradle/ + +# Autogenerated VS/MD/Consulo solution and project files +ExportedObj/ +.consulo/ +*.csproj +*.unityproj +*.sln +*.slnx +*.suo +*.tmp +*.user +*.userprefs +*.pidb +*.booproj +*.svd +*.pdb +*.mdb +*.opendb +*.VC.db + +# Unity3D generated meta files +*.pidb.meta +*.pdb.meta +*.mdb.meta + +# Unity3D generated file on crash reports +sysinfo.txt + +# Builds +*.apk +*.aab +*.unitypackage +*.unitypackage.meta +*.app + +# Crashlytics generated file +crashlytics-build.properties + +# Packed Addressables +/[Aa]ssets/[Aa]ddressable[Aa]ssets[Dd]ata/*/*.bin* + +# Temporary auto-generated Android Assets +/[Aa]ssets/[Ss]treamingAssets/aa.meta +/[Aa]ssets/[Ss]treamingAssets/aa/* + +Assets/XR/AndroidXR/AndroidXRSettingsInitializer* +ProjectSettings/Packages/com.unity.learn.iet-framework/Settings.json +ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json + +*.log diff --git a/Assets/01_Scenes.meta b/Assets/01_Scenes.meta new file mode 100644 index 0000000..562777e --- /dev/null +++ b/Assets/01_Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0bbe59e1b1f0faa42bd1612283c9ccb2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/01_Scenes/MainScene.unity b/Assets/01_Scenes/MainScene.unity new file mode 100644 index 0000000..da4ecb2 --- /dev/null +++ b/Assets/01_Scenes/MainScene.unity @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2cf024e997274265c132019e6fe3a12d89dee2c521de59ab13feb031d70b5aad +size 16710 diff --git a/Assets/01_Scenes/MainScene.unity.meta b/Assets/01_Scenes/MainScene.unity.meta new file mode 100644 index 0000000..9531828 --- /dev/null +++ b/Assets/01_Scenes/MainScene.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 99c9720ab356a0642a771bea13969a05 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02_Scripts.meta b/Assets/02_Scripts.meta new file mode 100644 index 0000000..3255444 --- /dev/null +++ b/Assets/02_Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4fb015c28b636ab4ba6788a0a01caa2c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02_Scripts/Core.meta b/Assets/02_Scripts/Core.meta new file mode 100644 index 0000000..fd640c8 --- /dev/null +++ b/Assets/02_Scripts/Core.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 15429132f9c27c644aa551641388b8b2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02_Scripts/Core/Util.cs b/Assets/02_Scripts/Core/Util.cs new file mode 100644 index 0000000..fd39452 --- /dev/null +++ b/Assets/02_Scripts/Core/Util.cs @@ -0,0 +1,6 @@ +using UnityEngine; + +public class Util : MonoBehaviour +{ + +} diff --git a/Assets/02_Scripts/Core/Util.cs.meta b/Assets/02_Scripts/Core/Util.cs.meta new file mode 100644 index 0000000..515efec --- /dev/null +++ b/Assets/02_Scripts/Core/Util.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 40dfdf8b856822a43ae5f1301397d774 \ No newline at end of file diff --git a/Assets/02_Scripts/Desktop.meta b/Assets/02_Scripts/Desktop.meta new file mode 100644 index 0000000..fd175f6 --- /dev/null +++ b/Assets/02_Scripts/Desktop.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3a436952b5e1b3b4c8f81fe7e31f7a68 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02_Scripts/Desktop/ClickThroughHitTest.cs b/Assets/02_Scripts/Desktop/ClickThroughHitTest.cs new file mode 100644 index 0000000..88a7126 --- /dev/null +++ b/Assets/02_Scripts/Desktop/ClickThroughHitTest.cs @@ -0,0 +1,215 @@ +using UnityEngine; +using UnityEngine.InputSystem; + +/// +/// 창 전체를 기본적으로 클릭 통과 상태로 두고, OS 커서가 캐릭터 콜라이더 위에 +/// 있을 때만 통과를 해제해 클릭을 받는다. +/// +/// Unity 의 Input 은 창 밖 좌표를 모르므로 GetCursorPos 로 OS 커서를 직접 읽어 +/// 창 기준 좌표로 변환한 뒤 레이캐스트한다. +/// +/// 최상위 창의 클릭 통과에는 WS_EX_TRANSPARENT 만으로는 부족하고 WS_EX_LAYERED 가 +/// 반드시 함께 필요하다(실측 확인). LAYERED 는 DwmExtendFrameIntoClientArea 기반 +/// 투명도와 공존하며, SetLayeredWindowAttributes 호출은 필요하지 않았다. +/// +/// LAYERED 는 init 시 한 번만 걸고, 매 프레임 토글하는 것은 TRANSPARENT 뿐이다. +/// +[RequireComponent(typeof(TransparentWindow))] +public class ClickThroughHitTest : MonoBehaviour +{ + // 아래 필드들은 Windows 빌드에서만 쓰이므로 에디터 컴파일 시 CS0414 가 뜬다 +#pragma warning disable 0414 + + [Header("히트테스트")] + [Tooltip("비우면 같은 오브젝트의 Camera 를 사용")] + [SerializeField] Camera hitTestCamera; + + [SerializeField] LayerMask interactableLayers = ~0; + [SerializeField] float maxRayDistance = 500f; + + // WS_EX_NOACTIVATE: 클릭해도 창이 포커스를 가져가지 않는다. + // 포커스 없이 Unity 가 클릭을 받을 수 있을지 우려했으나, 실측 결과 클릭은 + // 정상 수신된다. 사용자가 쓰던 앱의 포커스를 뺏지 않는 쪽이 데스크톱 비서로서 + // 명백히 낫기 때문에 항상 켠다. + // + // SerializeField 가 아닌 이유: 씬에 예전 false 값이 직렬화돼 있어 + // 인스펙터 값이 코드 기본값을 이겨버린다. 런타임 토글은 Ctrl+Alt+N 으로 유지. + bool useNoActivate = true; + + [Header("검증용")] + [SerializeField] bool showDebugHud = true; + + [Tooltip("커서가 캐릭터 위에 있으면 살짝 커지게 해서 히트테스트를 눈으로 확인")] + [SerializeField] bool visualizeHover = true; + [SerializeField] float hoverScale = 1.15f; + +#pragma warning restore 0414 + + TransparentWindow window; + Transform hovered; + Vector3 hoveredBaseScale; + GUIStyle hudStyle; + + /// 현재 OS 커서가 캐릭터 위에 있는지. + public bool IsOverCharacter { get; private set; } + + int clickCount; + uint currentExStyle; + string lastAction = "-"; + + void Awake() + { + window = GetComponent(); + if (hitTestCamera == null) hitTestCamera = GetComponent(); + if (hitTestCamera == null) hitTestCamera = Camera.main; + } + +#if !UNITY_EDITOR && UNITY_STANDALONE_WIN + // true = 클릭이 뒤 창으로 통과하는 상태 + bool clickThrough = true; + bool styleInitialized; + bool prevN; + + void Update() + { + if (!window.IsReady || window.Hwnd == System.IntPtr.Zero) return; + + if (!styleInitialized) + { + ApplyBaseStyle(); + styleInitialized = true; + } + + PollNoActivateToggle(); + + IsOverCharacter = HitTest(out var hit); + SetClickThrough(!IsOverCharacter); + UpdateHoverVisual(IsOverCharacter ? hit.transform : null); + + var mouse = Mouse.current; + if (IsOverCharacter && mouse != null && mouse.leftButton.wasPressedThisFrame) + { + clickCount++; + lastAction = $"클릭: {hit.transform.name}"; + Debug.Log($"[ClickThroughHitTest] 캐릭터 클릭됨: {hit.transform.name}"); + } + + currentExStyle = Win32.GetWindowLongW(window.Hwnd, Win32.GWL_EXSTYLE); + } + + /// Ctrl+Alt+N 으로 NOACTIVATE 를 켜고 끈다. 재빌드 없이 클릭 수신 여부를 비교하기 위함. + void PollNoActivateToggle() + { + if (!Win32.IsKeyDown(Win32.VK_CONTROL) || !Win32.IsKeyDown(Win32.VK_MENU)) + { + prevN = false; + return; + } + + bool now = Win32.IsKeyDown(Win32.VK_N); + if (now && !prevN) + { + useNoActivate = !useNoActivate; + ApplyBaseStyle(); + lastAction = $"NOACTIVATE = {useNoActivate}"; + Debug.Log($"[ClickThroughHitTest] NOACTIVATE = {useNoActivate}"); + } + prevN = now; + } + + void ApplyBaseStyle() + { + uint ex = Win32.GetWindowLongW(window.Hwnd, Win32.GWL_EXSTYLE); + + ex |= Win32.WS_EX_LAYERED; // 클릭 통과의 전제. 한 번만 걸고 유지한다. + + if (useNoActivate) ex |= Win32.WS_EX_NOACTIVATE; + else ex &= ~Win32.WS_EX_NOACTIVATE; + + if (clickThrough) ex |= Win32.WS_EX_TRANSPARENT; + else ex &= ~Win32.WS_EX_TRANSPARENT; + + Win32.SetWindowLongW(window.Hwnd, Win32.GWL_EXSTYLE, ex); + + Win32.SetWindowPos(window.Hwnd, Win32.HWND_TOPMOST, 0, 0, 0, 0, + Win32.SWP_NOMOVE | Win32.SWP_NOSIZE | Win32.SWP_NOACTIVATE | Win32.SWP_FRAMECHANGED); + } + + bool HitTest(out RaycastHit hit) + { + hit = default; + if (hitTestCamera == null) return false; + if (!Win32.GetCursorPos(out var pt)) return false; + if (!Win32.GetWindowRect(window.Hwnd, out var rc)) return false; + + int w = rc.Width, h = rc.Height; + if (w <= 0 || h <= 0) return false; + + // 창 기준 좌표 (좌상단 원점, Y 아래로) + int localX = pt.x - rc.left; + int localY = pt.y - rc.top; + if (localX < 0 || localY < 0 || localX >= w || localY >= h) return false; + + // Unity 화면 좌표 (좌하단 원점, Y 위로) + float ux = localX * (Screen.width / (float)w); + float uy = (h - localY) * (Screen.height / (float)h); + + var ray = hitTestCamera.ScreenPointToRay(new Vector3(ux, uy, 0f)); + return Physics.Raycast(ray, out hit, maxRayDistance, interactableLayers); + } + + void SetClickThrough(bool enable) + { + if (enable == clickThrough) return; + clickThrough = enable; + + uint ex = Win32.GetWindowLongW(window.Hwnd, Win32.GWL_EXSTYLE); + if (enable) ex |= Win32.WS_EX_TRANSPARENT; + else ex &= ~Win32.WS_EX_TRANSPARENT; + Win32.SetWindowLongW(window.Hwnd, Win32.GWL_EXSTYLE, ex); + } +#endif + + void UpdateHoverVisual(Transform target) + { + if (!visualizeHover) return; + if (hovered == target) return; + + if (hovered != null) hovered.localScale = hoveredBaseScale; + + hovered = target; + if (hovered != null) + { + hoveredBaseScale = hovered.localScale; + hovered.localScale = hoveredBaseScale * hoverScale; + } + } + + void OnGUI() + { + if (!showDebugHud) return; + + if (hudStyle == null) + { + hudStyle = new GUIStyle(GUI.skin.label) { fontSize = 16, richText = false }; + } + + bool layered = (currentExStyle & 0x00080000) != 0; + bool transparent = (currentExStyle & 0x00000020) != 0; + + string text = + $"NOACTIVATE: {useNoActivate} [Ctrl+Alt+N 전환]\n" + + $"ExStyle: 0x{currentExStyle:X8} LAYERED={layered} TRANSPARENT={transparent}\n" + + $"OverCharacter: {IsOverCharacter} 클릭 횟수: {clickCount}\n" + + $"마지막: {lastAction}\n" + + $"[Ctrl+Alt+Q 종료]"; + + var rect = new Rect(14f, 14f, 900f, 160f); + + // 배경 없이도 읽히도록 그림자를 먼저 깐다 + hudStyle.normal.textColor = Color.black; + GUI.Label(new Rect(rect.x + 1f, rect.y + 1f, rect.width, rect.height), text, hudStyle); + hudStyle.normal.textColor = Color.white; + GUI.Label(rect, text, hudStyle); + } +} diff --git a/Assets/02_Scripts/Desktop/ClickThroughHitTest.cs.meta b/Assets/02_Scripts/Desktop/ClickThroughHitTest.cs.meta new file mode 100644 index 0000000..3a46545 --- /dev/null +++ b/Assets/02_Scripts/Desktop/ClickThroughHitTest.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 5ca4ab0faf560dd4f8fcf2d3093dceb7 \ No newline at end of file diff --git a/Assets/02_Scripts/Desktop/GlobalExitHotkey.cs b/Assets/02_Scripts/Desktop/GlobalExitHotkey.cs new file mode 100644 index 0000000..81461a3 --- /dev/null +++ b/Assets/02_Scripts/Desktop/GlobalExitHotkey.cs @@ -0,0 +1,40 @@ +using UnityEngine; + +/// +/// 전역 종료 핫키. 기본 Ctrl+Alt+Q. +/// +/// 작업표시줄에서 숨겨진 데다 WS_EX_NOACTIVATE 까지 붙으면 창이 포커스를 +/// 받지 못해 Unity 의 키 입력이 들어오지 않는다. GetAsyncKeyState 는 포커스와 +/// 무관하게 전역 키 상태를 읽으므로, 메시지 루프나 wndproc 후킹 없이 +/// 확실한 탈출구가 된다. +/// +public class GlobalExitHotkey : MonoBehaviour +{ + // 아래 필드들은 Windows 빌드에서만 쓰이므로 에디터 컴파일 시 CS0414 가 뜬다 +#pragma warning disable 0414 + + [Tooltip("A-Z 한 글자. Ctrl+Alt 와 조합된다")] + [SerializeField] char exitKey = 'Q'; + + [SerializeField] bool requireCtrl = true; + [SerializeField] bool requireAlt = true; + +#if !UNITY_EDITOR && UNITY_STANDALONE_WIN + bool quitting; + + void Update() + { + if (quitting) return; + + if (requireCtrl && !Win32.IsKeyDown(Win32.VK_CONTROL)) return; + if (requireAlt && !Win32.IsKeyDown(Win32.VK_MENU)) return; + + int vk = char.ToUpperInvariant(exitKey); + if (!Win32.IsKeyDown(vk)) return; + + quitting = true; + Debug.Log("[GlobalExitHotkey] 종료 핫키 감지. 종료합니다."); + Application.Quit(); + } +#endif +} diff --git a/Assets/02_Scripts/Desktop/GlobalExitHotkey.cs.meta b/Assets/02_Scripts/Desktop/GlobalExitHotkey.cs.meta new file mode 100644 index 0000000..c800132 --- /dev/null +++ b/Assets/02_Scripts/Desktop/GlobalExitHotkey.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 83652a9ef9463bc4aabdd81cc62a3954 \ No newline at end of file diff --git a/Assets/02_Scripts/Desktop/TransparentWindow.cs b/Assets/02_Scripts/Desktop/TransparentWindow.cs new file mode 100644 index 0000000..9d4b41f --- /dev/null +++ b/Assets/02_Scripts/Desktop/TransparentWindow.cs @@ -0,0 +1,148 @@ +using System.Collections; +using UnityEngine; +using UnityEngine.InputSystem; +using UnityEngine.Rendering.Universal; +#if !UNITY_EDITOR && UNITY_STANDALONE_WIN +using System; +#endif + +/// +/// 창을 테두리 없는 최상단 투명 창으로 만든다. +/// 작업표시줄과 Alt+Tab 에서도 숨긴다. +/// 에디터에서는 아무것도 하지 않는다 (에디터 창이 사라지는 사고 방지). +/// +[RequireComponent(typeof(Camera))] +public class TransparentWindow : MonoBehaviour +{ + [Header("창 동작")] + [Tooltip("창을 가상 데스크톱 전체로 확장. 클릭 통과가 동작하는 것을 확인한 뒤 켤 것")] + [SerializeField] bool spanVirtualDesktop = false; + + [Tooltip("작업표시줄 / Alt+Tab 에서 숨김 (WS_EX_TOOLWINDOW)")] + [SerializeField] bool hideFromTaskbar = true; + + [Header("검증용")] + [Tooltip("런타임 큐브 생성. 씬에 AlphaTestCube 가 있으면 그쪽이 우선한다")] + [SerializeField] bool spawnTestCube = false; + + [Tooltip("URP 포스트프로세싱 비활성화")] + [SerializeField] bool forceDisablePostProcessing = true; + + [Tooltip("포커스가 있을 때 Esc 로 종료. NOACTIVATE 를 켜면 동작하지 않으므로 GlobalExitHotkey 를 함께 쓸 것")] + [SerializeField] bool quitOnEscape = true; + + Camera cam; + Transform testCube; + + /// 플레이어 창 핸들. 준비되기 전에는 Zero. + public System.IntPtr Hwnd { get; private set; } = System.IntPtr.Zero; + + /// Win32 스타일 적용이 끝났는지. + public bool IsReady { get; private set; } + + void Awake() + { + cam = GetComponent(); + + // 알파 0 클리어 — 투명의 출발점 + cam.clearFlags = CameraClearFlags.SolidColor; + cam.backgroundColor = new Color(0f, 0f, 0f, 0f); + + if (forceDisablePostProcessing) + { + var urp = cam.GetUniversalAdditionalCameraData(); + if (urp != null) urp.renderPostProcessing = false; + } + + Application.runInBackground = true; + + // 씬에 큐브가 있으면 그것을 쓰고, 없을 때만 런타임 생성 + var inScene = GameObject.Find("AlphaTestCube"); + if (inScene != null) testCube = inScene.transform; + else if (spawnTestCube) CreateTestCube(); + } + + void Start() + { +#if !UNITY_EDITOR && UNITY_STANDALONE_WIN + StartCoroutine(ApplyWindowStyle()); +#else + Debug.Log("[TransparentWindow] 에디터에서는 Win32 적용을 건너뜁니다. 빌드해서 테스트하세요."); +#endif + } + + void Update() + { + if (testCube != null) testCube.Rotate(new Vector3(30f, 45f, 15f) * Time.deltaTime); + + // 포커스가 있을 때만 동작하는 보조 탈출구 + if (quitOnEscape) + { + var kb = Keyboard.current; + if (kb != null && kb.escapeKey.wasPressedThisFrame) Application.Quit(); + } + } + + void CreateTestCube() + { + var cube = GameObject.CreatePrimitive(PrimitiveType.Cube); + cube.name = "AlphaTestCube"; + cube.transform.position = transform.position + transform.forward * 5f; + testCube = cube.transform; + } + +#if !UNITY_EDITOR && UNITY_STANDALONE_WIN + IEnumerator ApplyWindowStyle() + { + int x = 0, y = 0, w = Screen.width, h = Screen.height; + + if (spanVirtualDesktop) + { + x = Win32.GetSystemMetrics(Win32.SM_XVIRTUALSCREEN); + y = Win32.GetSystemMetrics(Win32.SM_YVIRTUALSCREEN); + w = Win32.GetSystemMetrics(Win32.SM_CXVIRTUALSCREEN); + h = Win32.GetSystemMetrics(Win32.SM_CYVIRTUALSCREEN); + Screen.SetResolution(w, h, FullScreenMode.Windowed); + } + + // SetResolution 은 프레임 끝에 반영되므로 스타일 적용 전에 기다린다 + yield return null; + yield return new WaitForEndOfFrame(); + yield return null; + + IntPtr hwnd = Win32.GetActiveWindow(); + if (hwnd == IntPtr.Zero) hwnd = Win32.FindWindowW(null, Application.productName); + if (hwnd == IntPtr.Zero) + { + Debug.LogError("[TransparentWindow] HWND 를 찾지 못했습니다."); + yield break; + } + + // 타이틀바 / 테두리 제거 + Win32.SetWindowLongW(hwnd, Win32.GWL_STYLE, Win32.WS_POPUP | Win32.WS_VISIBLE); + + if (hideFromTaskbar) + { + uint ex = Win32.GetWindowLongW(hwnd, Win32.GWL_EXSTYLE); + ex = (ex | Win32.WS_EX_TOOLWINDOW) & ~Win32.WS_EX_APPWINDOW; + Win32.SetWindowLongW(hwnd, Win32.GWL_EXSTYLE, ex); + + // TOOLWINDOW 변경은 hide/show 해야 작업표시줄에 반영된다 + Win32.ShowWindow(hwnd, Win32.SW_HIDE); + Win32.ShowWindow(hwnd, Win32.SW_SHOW); + } + + // 픽셀 단위 알파 투명 + var margins = new Win32.MARGINS { cxLeftWidth = -1, cxRightWidth = -1, cyTopHeight = -1, cyBottomHeight = -1 }; + int hr = Win32.DwmExtendFrameIntoClientArea(hwnd, ref margins); + Debug.Log($"[TransparentWindow] DwmExtendFrameIntoClientArea hr=0x{hr:X8} (0 이면 성공)"); + + Win32.SetWindowPos(hwnd, Win32.HWND_TOPMOST, x, y, w, h, + Win32.SWP_FRAMECHANGED | Win32.SWP_SHOWWINDOW); + + Hwnd = hwnd; + IsReady = true; + Debug.Log($"[TransparentWindow] 적용 완료: {x},{y} {w}x{h}"); + } +#endif +} diff --git a/Assets/02_Scripts/Desktop/TransparentWindow.cs.meta b/Assets/02_Scripts/Desktop/TransparentWindow.cs.meta new file mode 100644 index 0000000..0e7a8ef --- /dev/null +++ b/Assets/02_Scripts/Desktop/TransparentWindow.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: e3227c6d05a07a640bb1d96118c0a82e \ No newline at end of file diff --git a/Assets/02_Scripts/Desktop/TrayIcon.cs b/Assets/02_Scripts/Desktop/TrayIcon.cs new file mode 100644 index 0000000..cf22516 --- /dev/null +++ b/Assets/02_Scripts/Desktop/TrayIcon.cs @@ -0,0 +1,371 @@ +using UnityEngine; +#if !UNITY_EDITOR && UNITY_STANDALONE_WIN +using System; +using System.Runtime.InteropServices; +#endif + +/// +/// 시스템 트레이 아이콘과 우클릭 메뉴. +/// +/// WS_EX_TOOLWINDOW 로 작업표시줄에서 사라졌기 때문에 종료/제어 수단이 필요하다. +/// +/// 구현 노트: Shell_NotifyIcon 은 콜백 메시지를 받을 창이 필요한데, Unity 창의 +/// 윈도우 프로시저를 SetWindowLongPtr 로 가로채는 것은 관리 델리게이트 수명과 +/// 재진입 문제가 있어 위험하다. 대신 전용 창을 따로 만들어 거기에 아이콘을 걸고, +/// PeekMessage 를 그 창으로 한정해 직접 펌핑한다. Unity 의 메시지 루프는 건드리지 않는다. +/// +/// HWND_MESSAGE(메시지 전용 창)를 쓰지 않는 이유: 메시지 전용 창은 브로드캐스트 +/// 메시지를 받지 못해 TaskbarCreated 재등록이 동작하지 않고, z-order 가 없어 +/// SetForegroundWindow 가 실패해 팝업 메뉴가 제대로 닫히지 않는다. +/// 대신 WS_EX_TOOLWINDOW + WS_POPUP 인 일반 최상위 창을 만들되 표시하지 않는다. +/// +public class TrayIcon : MonoBehaviour +{ + [SerializeField] string tooltip = "MyCharacterAgent"; + [SerializeField] bool verboseLog = true; + + TransparentWindow window; + + void Awake() + { + window = GetComponent(); + if (window == null) window = FindFirstObjectByType(); + } + +#if !UNITY_EDITOR && UNITY_STANDALONE_WIN + + const string ClassName = "MyCharacterAgentTrayWnd"; + + const int ID_TOGGLE = 1; + const int ID_EXIT = 2; + + delegate IntPtr WndProcDelegate(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam); + + // GC 가 델리게이트를 수거하면 네이티브 쪽에서 죽은 포인터를 호출하게 되므로 + // 반드시 static 필드로 붙잡아 둔다. + static WndProcDelegate wndProcHolder; + + IntPtr trayHwnd = IntPtr.Zero; + bool iconAdded; + bool characterVisible = true; + uint taskbarCreatedMsg; + bool cleaned; + + // wndproc 에서 세우고 Update 에서 처리한다. TrackPopupMenu 는 중첩 메시지 루프를 + // 돌리므로 메시지 처리 도중이 아니라 프레임의 안전한 지점에서 부르는 편이 낫다. + bool pendingMenu; + bool pendingToggle; + bool pendingReAdd; + + void Start() + { + StartCoroutine(CreateWhenReady()); + } + + System.Collections.IEnumerator CreateWhenReady() + { + // 보이기/숨기기가 Unity 창 핸들을 쓰므로 창 준비를 기다린다. + float deadline = Time.realtimeSinceStartup + 5f; + while ((window == null || !window.IsReady) && Time.realtimeSinceStartup < deadline) + yield return null; + + // 창 생성 전에 등록해야 wndproc 이 첫 브로드캐스트부터 인식할 수 있다. + // (탐색기가 재시작되면 트레이 아이콘이 사라지므로 재등록이 필요하다) + taskbarCreatedMsg = RegisterWindowMessageW("TaskbarCreated"); + + if (!CreateTrayWindow()) yield break; + AddIcon(); + } + + bool CreateTrayWindow() + { + IntPtr hInstance = GetModuleHandleW(null); + + wndProcHolder = WndProc; + + var wc = new WNDCLASSEXW + { + cbSize = Marshal.SizeOf(typeof(WNDCLASSEXW)), + lpfnWndProc = Marshal.GetFunctionPointerForDelegate(wndProcHolder), + hInstance = hInstance, + lpszClassName = ClassName, + }; + + // 이미 등록된 클래스여도 무시하고 창 생성을 시도한다. + RegisterClassExW(ref wc); + + // WS_VISIBLE 를 주지 않으므로 화면에 나타나지 않는다. + // WS_EX_TOOLWINDOW 로 작업표시줄/Alt+Tab 에도 뜨지 않는다. + trayHwnd = CreateWindowExW(Win32.WS_EX_TOOLWINDOW, ClassName, string.Empty, + Win32.WS_POPUP, 0, 0, 0, 0, + IntPtr.Zero, IntPtr.Zero, hInstance, IntPtr.Zero); + + if (trayHwnd == IntPtr.Zero) + { + Debug.LogError($"[TrayIcon] 트레이용 창 생성 실패. err={Marshal.GetLastWin32Error()}"); + return false; + } + return true; + } + + /// + /// 우리 창의 윈도우 프로시저. Unity 메인 스레드의 DispatchMessage 에서 호출된다. + /// + IntPtr WndProc(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam) + { + if (msg == WM_TRAYICON) + { + uint ev = (uint)(lParam.ToInt64() & 0xFFFF); + // 아이콘 위로 마우스가 지나가기만 해도 WM_MOUSEMOVE 가 계속 온다. + // 상시 구동되는 앱이라 그대로 찍으면 로그가 끝없이 커진다. + if (verboseLog && ev != WM_MOUSEMOVE) + Debug.Log($"[TrayIcon] WM_TRAYICON ev=0x{ev:X4}"); + + if (ev == WM_RBUTTONUP || ev == WM_CONTEXTMENU) pendingMenu = true; + else if (ev == WM_LBUTTONDBLCLK) pendingToggle = true; + return IntPtr.Zero; + } + + if (taskbarCreatedMsg != 0 && msg == taskbarCreatedMsg) + { + pendingReAdd = true; + return IntPtr.Zero; + } + + return DefWindowProcW(hWnd, msg, wParam, lParam); + } + + IntPtr LoadAppIcon() + { + try + { + string exe = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName; + IntPtr icon = ExtractIconW(GetModuleHandleW(null), exe, 0); + if (icon != IntPtr.Zero && icon != new IntPtr(1)) return icon; + } + catch (Exception e) + { + Debug.LogWarning($"[TrayIcon] exe 아이콘 추출 실패, 기본 아이콘 사용: {e.Message}"); + } + return LoadIconW(IntPtr.Zero, new IntPtr(IDI_APPLICATION)); + } + + void AddIcon() + { + var data = new NOTIFYICONDATAW + { + cbSize = Marshal.SizeOf(typeof(NOTIFYICONDATAW)), + hWnd = trayHwnd, + uID = 1, + uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP, + uCallbackMessage = WM_TRAYICON, + hIcon = LoadAppIcon(), + szTip = tooltip, + }; + + iconAdded = Shell_NotifyIconW(NIM_ADD, ref data); + if (iconAdded) Debug.Log("[TrayIcon] 트레이 아이콘 등록됨"); + else Debug.LogError("[TrayIcon] Shell_NotifyIcon(NIM_ADD) 실패"); + } + + void Update() + { + if (trayHwnd == IntPtr.Zero) return; + + // Unity 펌프가 우리 창 메시지를 대부분 처리하지만, 놓치는 경우를 대비한 보조 펌프. + // 처리는 전적으로 wndproc 이 하므로 여기서는 디스패치만 한다(이중 처리 방지). + while (PeekMessageW(out MSG msg, trayHwnd, 0, 0, PM_REMOVE)) + { + TranslateMessage(ref msg); + DispatchMessageW(ref msg); + } + + if (pendingReAdd) { pendingReAdd = false; AddIcon(); } + if (pendingToggle) { pendingToggle = false; ToggleCharacter(); } + if (pendingMenu) { pendingMenu = false; ShowContextMenu(); } + } + + void ShowContextMenu() + { + IntPtr menu = CreatePopupMenu(); + if (menu == IntPtr.Zero) return; + + AppendMenuW(menu, MF_STRING, ID_TOGGLE, characterVisible ? "캐릭터 숨기기" : "캐릭터 보이기"); + AppendMenuW(menu, MF_SEPARATOR, 0, null); + AppendMenuW(menu, MF_STRING, ID_EXIT, "종료"); + + Win32.GetCursorPos(out var pt); + + // 트레이 메뉴 관용구: 앞으로 가져와야 메뉴 밖 클릭 시 정상적으로 닫힌다. + SetForegroundWindow(trayHwnd); + + int cmd = TrackPopupMenu(menu, TPM_RETURNCMD | TPM_RIGHTBUTTON | TPM_NONOTIFY, + pt.x, pt.y, 0, trayHwnd, IntPtr.Zero); + + PostMessageW(trayHwnd, WM_NULL, IntPtr.Zero, IntPtr.Zero); + DestroyMenu(menu); + + if (verboseLog) Debug.Log($"[TrayIcon] 메뉴 선택 결과 cmd={cmd}"); + + if (cmd == ID_EXIT) + { + Debug.Log("[TrayIcon] 메뉴에서 종료 선택"); + Application.Quit(); + } + else if (cmd == ID_TOGGLE) + { + ToggleCharacter(); + } + } + + void ToggleCharacter() + { + if (window == null || !window.IsReady) return; + + characterVisible = !characterVisible; + Win32.ShowWindow(window.Hwnd, characterVisible ? Win32.SW_SHOW : Win32.SW_HIDE); + + if (characterVisible) + { + // SW_SHOW 후 최상단 속성이 풀릴 수 있어 다시 걸어준다. + Win32.SetWindowPos(window.Hwnd, Win32.HWND_TOPMOST, 0, 0, 0, 0, + Win32.SWP_NOMOVE | Win32.SWP_NOSIZE | Win32.SWP_NOACTIVATE); + } + } + + void RemoveIcon() + { + if (!iconAdded) return; + + var data = new NOTIFYICONDATAW + { + cbSize = Marshal.SizeOf(typeof(NOTIFYICONDATAW)), + hWnd = trayHwnd, + uID = 1, + }; + Shell_NotifyIconW(NIM_DELETE, ref data); + iconAdded = false; + } + + // 정리를 빠뜨리면 종료 후에도 유령 아이콘이 트레이에 남는다. + void OnApplicationQuit() => Cleanup(); + void OnDestroy() => Cleanup(); + + void Cleanup() + { + if (cleaned) return; + cleaned = true; + + RemoveIcon(); + if (trayHwnd != IntPtr.Zero) + { + DestroyWindow(trayHwnd); + trayHwnd = IntPtr.Zero; + } + UnregisterClassW(ClassName, GetModuleHandleW(null)); + wndProcHolder = null; + } + + // ---------------- P/Invoke (트레이 전용) ---------------- + + const int IDI_APPLICATION = 32512; + + const uint NIM_ADD = 0x00000000; + const uint NIM_DELETE = 0x00000002; + const uint NIF_MESSAGE = 0x00000001; + const uint NIF_ICON = 0x00000002; + const uint NIF_TIP = 0x00000004; + + const uint WM_NULL = 0x0000; + const uint WM_MOUSEMOVE = 0x0200; + const uint WM_LBUTTONDBLCLK = 0x0203; + const uint WM_RBUTTONUP = 0x0205; + const uint WM_CONTEXTMENU = 0x007B; + const uint WM_APP = 0x8000; + const uint WM_TRAYICON = WM_APP + 1; + + const uint PM_REMOVE = 0x0001; + + const uint MF_STRING = 0x0000; + const uint MF_SEPARATOR = 0x0800; + + const uint TPM_RIGHTBUTTON = 0x0002; + const uint TPM_RETURNCMD = 0x0100; + const uint TPM_NONOTIFY = 0x0080; + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + struct WNDCLASSEXW + { + public int cbSize; + public uint style; + public IntPtr lpfnWndProc; + public int cbClsExtra; + public int cbWndExtra; + public IntPtr hInstance; + public IntPtr hIcon; + public IntPtr hCursor; + public IntPtr hbrBackground; + [MarshalAs(UnmanagedType.LPWStr)] public string lpszMenuName; + [MarshalAs(UnmanagedType.LPWStr)] public string lpszClassName; + public IntPtr hIconSm; + } + + [StructLayout(LayoutKind.Sequential)] + struct MSG + { + public IntPtr hwnd; + public uint message; + public IntPtr wParam; + public IntPtr lParam; + public uint time; + public Win32.POINT pt; + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + struct NOTIFYICONDATAW + { + public int cbSize; + public IntPtr hWnd; + public uint uID; + public uint uFlags; + public uint uCallbackMessage; + public IntPtr hIcon; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] public string szTip; + public uint dwState; + public uint dwStateMask; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] public string szInfo; + public uint uVersion; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)] public string szInfoTitle; + public uint dwInfoFlags; + public Guid guidItem; + public IntPtr hBalloonIcon; + } + + [DllImport("kernel32.dll", CharSet = CharSet.Unicode)] static extern IntPtr GetModuleHandleW(string lpModuleName); + + [DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = true)] static extern ushort RegisterClassExW(ref WNDCLASSEXW lpwcx); + [DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = true)] static extern bool UnregisterClassW(string lpClassName, IntPtr hInstance); + [DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = true)] + static extern IntPtr CreateWindowExW(uint dwExStyle, string lpClassName, string lpWindowName, + uint dwStyle, int x, int y, int nWidth, int nHeight, + IntPtr hWndParent, IntPtr hMenu, IntPtr hInstance, IntPtr lpParam); + [DllImport("user32.dll")] static extern bool DestroyWindow(IntPtr hWnd); + [DllImport("user32.dll", CharSet = CharSet.Unicode)] static extern IntPtr DefWindowProcW(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); + + [DllImport("user32.dll", CharSet = CharSet.Unicode)] static extern bool PeekMessageW(out MSG lpMsg, IntPtr hWnd, uint wMsgFilterMin, uint wMsgFilterMax, uint wRemoveMsg); + [DllImport("user32.dll")] static extern bool TranslateMessage(ref MSG lpMsg); + [DllImport("user32.dll", CharSet = CharSet.Unicode)] static extern IntPtr DispatchMessageW(ref MSG lpMsg); + [DllImport("user32.dll", CharSet = CharSet.Unicode)] static extern bool PostMessageW(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); + [DllImport("user32.dll", CharSet = CharSet.Unicode)] static extern uint RegisterWindowMessageW(string lpString); + + [DllImport("user32.dll", CharSet = CharSet.Unicode)] static extern IntPtr LoadIconW(IntPtr hInstance, IntPtr lpIconName); + [DllImport("shell32.dll", CharSet = CharSet.Unicode)] static extern IntPtr ExtractIconW(IntPtr hInst, string lpszExeFileName, int nIconIndex); + [DllImport("shell32.dll", CharSet = CharSet.Unicode)] static extern bool Shell_NotifyIconW(uint dwMessage, ref NOTIFYICONDATAW lpData); + + [DllImport("user32.dll")] static extern IntPtr CreatePopupMenu(); + [DllImport("user32.dll", CharSet = CharSet.Unicode)] static extern bool AppendMenuW(IntPtr hMenu, uint uFlags, int uIDNewItem, string lpNewItem); + [DllImport("user32.dll")] static extern bool DestroyMenu(IntPtr hMenu); + [DllImport("user32.dll")] static extern int TrackPopupMenu(IntPtr hMenu, uint uFlags, int x, int y, int nReserved, IntPtr hWnd, IntPtr prcRect); + [DllImport("user32.dll")] static extern bool SetForegroundWindow(IntPtr hWnd); +#endif +} diff --git a/Assets/02_Scripts/Desktop/TrayIcon.cs.meta b/Assets/02_Scripts/Desktop/TrayIcon.cs.meta new file mode 100644 index 0000000..cc05343 --- /dev/null +++ b/Assets/02_Scripts/Desktop/TrayIcon.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: a951781c3ff22c04193a69b7db01010f \ No newline at end of file diff --git a/Assets/02_Scripts/Desktop/Win32.cs b/Assets/02_Scripts/Desktop/Win32.cs new file mode 100644 index 0000000..72b9f93 --- /dev/null +++ b/Assets/02_Scripts/Desktop/Win32.cs @@ -0,0 +1,84 @@ +#if UNITY_STANDALONE_WIN || UNITY_EDITOR_WIN +using System; +using System.Runtime.InteropServices; + +/// +/// 데스크톱 오버레이에 필요한 Win32 선언 모음. +/// 선언 자체는 무해하며, 실제 호출부에서 에디터 여부를 가드한다. +/// +internal static class Win32 +{ + public const int GWL_STYLE = -16; + public const int GWL_EXSTYLE = -20; + + public const uint WS_POPUP = 0x80000000; + public const uint WS_VISIBLE = 0x10000000; + + public const uint WS_EX_TOOLWINDOW = 0x00000080; // 작업표시줄/Alt+Tab 에서 숨김 + public const uint WS_EX_APPWINDOW = 0x00040000; + public const uint WS_EX_TRANSPARENT = 0x00000020; // 마우스 히트테스트 통과 + public const uint WS_EX_NOACTIVATE = 0x08000000; // 클릭해도 포커스를 뺏지 않음 + public const uint WS_EX_LAYERED = 0x00080000; // 최상위 창의 클릭 통과에 필요 + + public const uint LWA_COLORKEY = 0x00000001; + public const uint LWA_ALPHA = 0x00000002; + + public static readonly IntPtr HWND_TOPMOST = new IntPtr(-1); + public const uint SWP_NOSIZE = 0x0001; + public const uint SWP_NOMOVE = 0x0002; + public const uint SWP_NOACTIVATE = 0x0010; + public const uint SWP_FRAMECHANGED = 0x0020; + public const uint SWP_SHOWWINDOW = 0x0040; + + public const int SM_XVIRTUALSCREEN = 76; + public const int SM_YVIRTUALSCREEN = 77; + public const int SM_CXVIRTUALSCREEN = 78; + public const int SM_CYVIRTUALSCREEN = 79; + + public const int SW_HIDE = 0; + public const int SW_SHOW = 5; + + public const int VK_SHIFT = 0x10; + public const int VK_CONTROL = 0x11; + public const int VK_MENU = 0x12; // Alt + public const int VK_1 = 0x31; + public const int VK_2 = 0x32; + public const int VK_3 = 0x33; + public const int VK_N = 0x4E; + + [StructLayout(LayoutKind.Sequential)] + public struct MARGINS + { + public int cxLeftWidth, cxRightWidth, cyTopHeight, cyBottomHeight; + } + + [StructLayout(LayoutKind.Sequential)] + public struct POINT + { + public int x, y; + } + + [StructLayout(LayoutKind.Sequential)] + public struct RECT + { + public int left, top, right, bottom; + public int Width => right - left; + public int Height => bottom - top; + } + + [DllImport("user32.dll")] public static extern IntPtr GetActiveWindow(); + [DllImport("user32.dll", CharSet = CharSet.Unicode)] public static extern IntPtr FindWindowW(string lpClassName, string lpWindowName); + [DllImport("user32.dll")] public static extern uint GetWindowLongW(IntPtr hWnd, int nIndex); + [DllImport("user32.dll")] public static extern uint SetWindowLongW(IntPtr hWnd, int nIndex, uint dwNewLong); + [DllImport("user32.dll")] public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags); + [DllImport("user32.dll")] public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); + [DllImport("user32.dll")] public static extern int GetSystemMetrics(int nIndex); + [DllImport("user32.dll")] public static extern bool GetCursorPos(out POINT lpPoint); + [DllImport("user32.dll")] public static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect); + [DllImport("user32.dll")] public static extern short GetAsyncKeyState(int vKey); + [DllImport("user32.dll")] public static extern bool SetLayeredWindowAttributes(IntPtr hWnd, uint crKey, byte bAlpha, uint dwFlags); + [DllImport("dwmapi.dll")] public static extern int DwmExtendFrameIntoClientArea(IntPtr hWnd, ref MARGINS pMarInset); + + public static bool IsKeyDown(int vKey) => (GetAsyncKeyState(vKey) & 0x8000) != 0; +} +#endif diff --git a/Assets/02_Scripts/Desktop/Win32.cs.meta b/Assets/02_Scripts/Desktop/Win32.cs.meta new file mode 100644 index 0000000..c4fa590 --- /dev/null +++ b/Assets/02_Scripts/Desktop/Win32.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 014f94e37c2e5de4bb0fbe5e0831e18b \ No newline at end of file diff --git a/Assets/02_Scripts/Editor.meta b/Assets/02_Scripts/Editor.meta new file mode 100644 index 0000000..7b3d5e1 --- /dev/null +++ b/Assets/02_Scripts/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 16af5d21b8812db41a6f5dbe27a02530 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02_Scripts/Editor/DesktopOverlaySetup.cs b/Assets/02_Scripts/Editor/DesktopOverlaySetup.cs new file mode 100644 index 0000000..22a733e --- /dev/null +++ b/Assets/02_Scripts/Editor/DesktopOverlaySetup.cs @@ -0,0 +1,149 @@ +using UnityEditor; +using UnityEditor.SceneManagement; +using UnityEngine; +using UnityEngine.Rendering; + +/// +/// 투명 데스크톱 오버레이 검증에 필요한 프로젝트 설정을 일괄 적용한다. +/// 일부 항목은 인스펙터에 노출되지 않아 스크립트로 설정한다. +/// +public static class DesktopOverlaySetup +{ + const BuildTarget Target = BuildTarget.StandaloneWindows64; + + [MenuItem("Tools/Desktop Overlay/1. Apply Transparent Window Settings")] + public static void Apply() + { + // useFlipModelSwapchain 은 D3D11 전용이므로 API 를 고정한다. + PlayerSettings.SetUseDefaultGraphicsAPIs(Target, false); + PlayerSettings.SetGraphicsAPIs(Target, new[] { GraphicsDeviceType.Direct3D11 }); + + PlayerSettings.useFlipModelSwapchain = false; // DWM 투명도의 전제 조건 + + PlayerSettings.fullScreenMode = FullScreenMode.Windowed; + PlayerSettings.runInBackground = true; + PlayerSettings.visibleInBackground = true; + PlayerSettings.resizableWindow = false; + PlayerSettings.forceSingleInstance = true; + + AssetDatabase.SaveAssets(); + Debug.Log("[DesktopOverlaySetup] Player Settings 적용 완료."); + LogCurrent(); + } + + [MenuItem("Tools/Desktop Overlay/2. Log Current Settings")] + public static void LogCurrent() + { + var apis = PlayerSettings.GetGraphicsAPIs(Target); + var apiList = string.Join(", ", System.Array.ConvertAll(apis, a => a.ToString())); + + Debug.Log( + "[DesktopOverlaySetup] 현재 값 (괄호 안이 기대값)\n" + + $" Graphics APIs = [{apiList}] (Direct3D11)\n" + + $" Auto Graphics API = {PlayerSettings.GetUseDefaultGraphicsAPIs(Target)} (False)\n" + + $" useFlipModelSwapchain = {PlayerSettings.useFlipModelSwapchain} (False)\n" + + $" fullScreenMode = {PlayerSettings.fullScreenMode} (Windowed)\n" + + $" runInBackground = {PlayerSettings.runInBackground} (True)\n" + + $" visibleInBackground = {PlayerSettings.visibleInBackground} (True)" + ); + } + + /// + /// HDR 32비트 컬러 버퍼(R11G11B10_UFloat)에는 알파 채널이 없어서 + /// 카메라를 알파 0으로 클리어해도 저장되지 않는다. HDR 을 끄고 + /// URP 의 Alpha Processing 을 켠다. + /// + [MenuItem("Tools/Desktop Overlay/3. Fix URP Alpha Settings")] + public static void FixUrpAlpha() + { + var guids = AssetDatabase.FindAssets("t:UniversalRenderPipelineAsset"); + if (guids.Length == 0) + { + Debug.LogError("[DesktopOverlaySetup] URP Asset 을 찾지 못했습니다."); + return; + } + + foreach (var guid in guids) + { + var path = AssetDatabase.GUIDToAssetPath(guid); + var asset = AssetDatabase.LoadAssetAtPath(path); + if (asset == null) continue; + + var so = new SerializedObject(asset); + bool changed = false; + + changed |= SetValue(so, "m_SupportsHDR", 0); // 알파 있는 R8G8B8A8 로 + changed |= SetValue(so, "m_AllowPostProcessAlphaOutput", 1); // Alpha Processing 켜기 + changed |= SetValue(so, "m_HDRColorBufferPrecision", 1); // HDR 쓸 경우 대비: 64bit(알파 있음) + + if (changed) + { + so.ApplyModifiedProperties(); + EditorUtility.SetDirty(asset); + Debug.Log($"[DesktopOverlaySetup] 수정됨: {path}"); + } + } + + AssetDatabase.SaveAssets(); + Debug.Log("[DesktopOverlaySetup] URP 알파 설정 완료. 다시 빌드하세요."); + } + + /// + /// 런타임 CreatePrimitive 는 빌드에서 Built-in 기본 머티리얼을 잡아 분홍색이 된다. + /// 에디터에서 URP 머티리얼을 가진 큐브를 씬에 넣어 빌드 포함을 보장한다. + /// + [MenuItem("Tools/Desktop Overlay/4. Add Test Cube To Scene")] + public static void AddTestCube() + { + var existing = GameObject.Find("AlphaTestCube"); + if (existing != null) Object.DestroyImmediate(existing); + + var shader = Shader.Find("Universal Render Pipeline/Lit") + ?? Shader.Find("Universal Render Pipeline/Unlit"); + if (shader == null) + { + Debug.LogError("[DesktopOverlaySetup] URP 셰이더를 찾지 못했습니다."); + return; + } + + var cube = GameObject.CreatePrimitive(PrimitiveType.Cube); + cube.name = "AlphaTestCube"; + + var cam = Camera.main; + cube.transform.position = cam != null + ? cam.transform.position + cam.transform.forward * 5f + : new Vector3(0f, 1f, 0f); + + const string matPath = "Assets/99_Settings/AlphaTestCubeMat.mat"; + var mat = new Material(shader) { color = new Color(0.2f, 0.8f, 1f) }; + AssetDatabase.CreateAsset(mat, matPath); + cube.GetComponent().sharedMaterial = + AssetDatabase.LoadAssetAtPath(matPath); + + EditorSceneManager.MarkSceneDirty(cube.scene); + AssetDatabase.SaveAssets(); + Debug.Log("[DesktopOverlaySetup] AlphaTestCube 추가됨. 씬을 저장(Ctrl+S)하세요."); + } + + static bool SetValue(SerializedObject so, string propName, int value) + { + var p = so.FindProperty(propName); + if (p == null) + { + Debug.LogWarning($"[DesktopOverlaySetup] 프로퍼티 없음: {propName}"); + return false; + } + + if (p.propertyType == SerializedPropertyType.Boolean) + { + if (p.boolValue == (value != 0)) return false; + p.boolValue = value != 0; + } + else + { + if (p.intValue == value) return false; + p.intValue = value; + } + return true; + } +} diff --git a/Assets/02_Scripts/Editor/DesktopOverlaySetup.cs.meta b/Assets/02_Scripts/Editor/DesktopOverlaySetup.cs.meta new file mode 100644 index 0000000..27f954e --- /dev/null +++ b/Assets/02_Scripts/Editor/DesktopOverlaySetup.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 955d1f72698f38145b86f717b5deb478 \ No newline at end of file diff --git a/Assets/02_Scripts/Managers.meta b/Assets/02_Scripts/Managers.meta new file mode 100644 index 0000000..66ccca0 --- /dev/null +++ b/Assets/02_Scripts/Managers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: df326b119a49c5b45993089b9bfdbf09 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02_Scripts/Managers/GameManager.cs b/Assets/02_Scripts/Managers/GameManager.cs new file mode 100644 index 0000000..7eebe84 --- /dev/null +++ b/Assets/02_Scripts/Managers/GameManager.cs @@ -0,0 +1,6 @@ +using UnityEngine; + +public class GameManager : MonoBehaviour +{ + +} diff --git a/Assets/02_Scripts/Managers/GameManager.cs.meta b/Assets/02_Scripts/Managers/GameManager.cs.meta new file mode 100644 index 0000000..b00437d --- /dev/null +++ b/Assets/02_Scripts/Managers/GameManager.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 8a04fd99999327e4b8dc1d3f13f1116e \ No newline at end of file diff --git a/Assets/99_Settings.meta b/Assets/99_Settings.meta new file mode 100644 index 0000000..39b94dd --- /dev/null +++ b/Assets/99_Settings.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 709f11a7f3c4041caa4ef136ea32d874 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/99_Settings/AlphaTestCubeMat.mat b/Assets/99_Settings/AlphaTestCubeMat.mat new file mode 100644 index 0000000..137aa91 --- /dev/null +++ b/Assets/99_Settings/AlphaTestCubeMat.mat @@ -0,0 +1,137 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: AlphaTestCubeMat + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddPrecomputedVelocity: 0 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.005 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _XRMotionVectorsPass: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0.2, g: 0.8, b: 1, a: 1} + - _Color: {r: 0.19999996, g: 0.8, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 +--- !u!114 &4714984517812359127 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion + version: 10 diff --git a/Assets/99_Settings/AlphaTestCubeMat.mat.meta b/Assets/99_Settings/AlphaTestCubeMat.mat.meta new file mode 100644 index 0000000..6003ecd --- /dev/null +++ b/Assets/99_Settings/AlphaTestCubeMat.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9b1d5b32bbd5c8d488855b469aadd1c6 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/99_Settings/DefaultVolumeProfile.asset b/Assets/99_Settings/DefaultVolumeProfile.asset new file mode 100644 index 0000000..c8ccd53 --- /dev/null +++ b/Assets/99_Settings/DefaultVolumeProfile.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:463776c51ae49d4fef980e8fd268081b2f505610d79315003faae1acff8f4115 +size 24035 diff --git a/Assets/99_Settings/DefaultVolumeProfile.asset.meta b/Assets/99_Settings/DefaultVolumeProfile.asset.meta new file mode 100644 index 0000000..53b314a --- /dev/null +++ b/Assets/99_Settings/DefaultVolumeProfile.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ab09877e2e707104187f6f83e2f62510 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/99_Settings/InputSystem_Actions.inputactions b/Assets/99_Settings/InputSystem_Actions.inputactions new file mode 100644 index 0000000..1a12cb9 --- /dev/null +++ b/Assets/99_Settings/InputSystem_Actions.inputactions @@ -0,0 +1,1057 @@ +{ + "name": "InputSystem_Actions", + "maps": [ + { + "name": "Player", + "id": "df70fa95-8a34-4494-b137-73ab6b9c7d37", + "actions": [ + { + "name": "Move", + "type": "Value", + "id": "351f2ccd-1f9f-44bf-9bec-d62ac5c5f408", + "expectedControlType": "Vector2", + "processors": "", + "interactions": "", + "initialStateCheck": true + }, + { + "name": "Look", + "type": "Value", + "id": "6b444451-8a00-4d00-a97e-f47457f736a8", + "expectedControlType": "Vector2", + "processors": "", + "interactions": "", + "initialStateCheck": true + }, + { + "name": "Attack", + "type": "Button", + "id": "6c2ab1b8-8984-453a-af3d-a3c78ae1679a", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "Interact", + "type": "Button", + "id": "852140f2-7766-474d-8707-702459ba45f3", + "expectedControlType": "Button", + "processors": "", + "interactions": "Hold", + "initialStateCheck": false + }, + { + "name": "Crouch", + "type": "Button", + "id": "27c5f898-bc57-4ee1-8800-db469aca5fe3", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "Jump", + "type": "Button", + "id": "f1ba0d36-48eb-4cd5-b651-1c94a6531f70", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "Previous", + "type": "Button", + "id": "2776c80d-3c14-4091-8c56-d04ced07a2b0", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "Next", + "type": "Button", + "id": "b7230bb6-fc9b-4f52-8b25-f5e19cb2c2ba", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "Sprint", + "type": "Button", + "id": "641cd816-40e6-41b4-8c3d-04687c349290", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + } + ], + "bindings": [ + { + "name": "", + "id": "978bfe49-cc26-4a3d-ab7b-7d7a29327403", + "path": "/leftStick", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Move", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "WASD", + "id": "00ca640b-d935-4593-8157-c05846ea39b3", + "path": "Dpad", + "interactions": "", + "processors": "", + "groups": "", + "action": "Move", + "isComposite": true, + "isPartOfComposite": false + }, + { + "name": "up", + "id": "e2062cb9-1b15-46a2-838c-2f8d72a0bdd9", + "path": "/w", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "up", + "id": "8180e8bd-4097-4f4e-ab88-4523101a6ce9", + "path": "/upArrow", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "320bffee-a40b-4347-ac70-c210eb8bc73a", + "path": "/s", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "1c5327b5-f71c-4f60-99c7-4e737386f1d1", + "path": "/downArrow", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "d2581a9b-1d11-4566-b27d-b92aff5fabbc", + "path": "/a", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "2e46982e-44cc-431b-9f0b-c11910bf467a", + "path": "/leftArrow", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "fcfe95b8-67b9-4526-84b5-5d0bc98d6400", + "path": "/d", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "77bff152-3580-4b21-b6de-dcd0c7e41164", + "path": "/rightArrow", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "", + "id": "1635d3fe-58b6-4ba9-a4e2-f4b964f6b5c8", + "path": "/{Primary2DAxis}", + "interactions": "", + "processors": "", + "groups": "XR", + "action": "Move", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "3ea4d645-4504-4529-b061-ab81934c3752", + "path": "/stick", + "interactions": "", + "processors": "", + "groups": "Joystick", + "action": "Move", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "c1f7a91b-d0fd-4a62-997e-7fb9b69bf235", + "path": "/rightStick", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Look", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "8c8e490b-c610-4785-884f-f04217b23ca4", + "path": "/delta", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse;Touch", + "action": "Look", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "3e5f5442-8668-4b27-a940-df99bad7e831", + "path": "/{Hatswitch}", + "interactions": "", + "processors": "", + "groups": "Joystick", + "action": "Look", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "143bb1cd-cc10-4eca-a2f0-a3664166fe91", + "path": "/buttonWest", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Attack", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "05f6913d-c316-48b2-a6bb-e225f14c7960", + "path": "/leftButton", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Attack", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "886e731e-7071-4ae4-95c0-e61739dad6fd", + "path": "/primaryTouch/tap", + "interactions": "", + "processors": "", + "groups": ";Touch", + "action": "Attack", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "ee3d0cd2-254e-47a7-a8cb-bc94d9658c54", + "path": "/trigger", + "interactions": "", + "processors": "", + "groups": "Joystick", + "action": "Attack", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "8255d333-5683-4943-a58a-ccb207ff1dce", + "path": "/{PrimaryAction}", + "interactions": "", + "processors": "", + "groups": "XR", + "action": "Attack", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b3c1c7f0-bd20-4ee7-a0f1-899b24bca6d7", + "path": "/enter", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Attack", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "cbac6039-9c09-46a1-b5f2-4e5124ccb5ed", + "path": "/2", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Next", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "e15ca19d-e649-4852-97d5-7fe8ccc44e94", + "path": "/dpad/right", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Next", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "f2e9ba44-c423-42a7-ad56-f20975884794", + "path": "/leftShift", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Sprint", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "8cbb2f4b-a784-49cc-8d5e-c010b8c7f4e6", + "path": "/leftStickPress", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Sprint", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "d8bf24bf-3f2f-4160-a97c-38ec1eb520ba", + "path": "/trigger", + "interactions": "", + "processors": "", + "groups": "XR", + "action": "Sprint", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "eb40bb66-4559-4dfa-9a2f-820438abb426", + "path": "/space", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Jump", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "daba33a1-ad0c-4742-a909-43ad1cdfbeb6", + "path": "/buttonSouth", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Jump", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "603f3daf-40bd-4854-8724-93e8017f59e3", + "path": "/secondaryButton", + "interactions": "", + "processors": "", + "groups": "XR", + "action": "Jump", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "1534dc16-a6aa-499d-9c3a-22b47347b52a", + "path": "/1", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Previous", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "25060bbd-a3a6-476e-8fba-45ae484aad05", + "path": "/dpad/left", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Previous", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "1c04ea5f-b012-41d1-a6f7-02e963b52893", + "path": "/e", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Interact", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b3f66d0b-7751-423f-908b-a11c5bd95930", + "path": "/buttonNorth", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Interact", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "4f4649ac-64a8-4a73-af11-b3faef356a4d", + "path": "/buttonEast", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Crouch", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "36e52cba-0905-478e-a818-f4bfcb9f3b9a", + "path": "/c", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Crouch", + "isComposite": false, + "isPartOfComposite": false + } + ] + }, + { + "name": "UI", + "id": "272f6d14-89ba-496f-b7ff-215263d3219f", + "actions": [ + { + "name": "Navigate", + "type": "PassThrough", + "id": "c95b2375-e6d9-4b88-9c4c-c5e76515df4b", + "expectedControlType": "Vector2", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "Submit", + "type": "Button", + "id": "7607c7b6-cd76-4816-beef-bd0341cfe950", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "Cancel", + "type": "Button", + "id": "15cef263-9014-4fd5-94d9-4e4a6234a6ef", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "Point", + "type": "PassThrough", + "id": "32b35790-4ed0-4e9a-aa41-69ac6d629449", + "expectedControlType": "Vector2", + "processors": "", + "interactions": "", + "initialStateCheck": true + }, + { + "name": "Click", + "type": "PassThrough", + "id": "3c7022bf-7922-4f7c-a998-c437916075ad", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": true + }, + { + "name": "RightClick", + "type": "PassThrough", + "id": "44b200b1-1557-4083-816c-b22cbdf77ddf", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "MiddleClick", + "type": "PassThrough", + "id": "dad70c86-b58c-4b17-88ad-f5e53adf419e", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "ScrollWheel", + "type": "PassThrough", + "id": "0489e84a-4833-4c40-bfae-cea84b696689", + "expectedControlType": "Vector2", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "TrackedDevicePosition", + "type": "PassThrough", + "id": "24908448-c609-4bc3-a128-ea258674378a", + "expectedControlType": "Vector3", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "TrackedDeviceOrientation", + "type": "PassThrough", + "id": "9caa3d8a-6b2f-4e8e-8bad-6ede561bd9be", + "expectedControlType": "Quaternion", + "processors": "", + "interactions": "", + "initialStateCheck": false + } + ], + "bindings": [ + { + "name": "Gamepad", + "id": "809f371f-c5e2-4e7a-83a1-d867598f40dd", + "path": "2DVector", + "interactions": "", + "processors": "", + "groups": "", + "action": "Navigate", + "isComposite": true, + "isPartOfComposite": false + }, + { + "name": "up", + "id": "14a5d6e8-4aaf-4119-a9ef-34b8c2c548bf", + "path": "/leftStick/up", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "up", + "id": "9144cbe6-05e1-4687-a6d7-24f99d23dd81", + "path": "/rightStick/up", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "2db08d65-c5fb-421b-983f-c71163608d67", + "path": "/leftStick/down", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "58748904-2ea9-4a80-8579-b500e6a76df8", + "path": "/rightStick/down", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "8ba04515-75aa-45de-966d-393d9bbd1c14", + "path": "/leftStick/left", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "712e721c-bdfb-4b23-a86c-a0d9fcfea921", + "path": "/rightStick/left", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "fcd248ae-a788-4676-a12e-f4d81205600b", + "path": "/leftStick/right", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "1f04d9bc-c50b-41a1-bfcc-afb75475ec20", + "path": "/rightStick/right", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "", + "id": "fb8277d4-c5cd-4663-9dc7-ee3f0b506d90", + "path": "/dpad", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "Joystick", + "id": "e25d9774-381c-4a61-b47c-7b6b299ad9f9", + "path": "2DVector", + "interactions": "", + "processors": "", + "groups": "", + "action": "Navigate", + "isComposite": true, + "isPartOfComposite": false + }, + { + "name": "up", + "id": "3db53b26-6601-41be-9887-63ac74e79d19", + "path": "/stick/up", + "interactions": "", + "processors": "", + "groups": "Joystick", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "0cb3e13e-3d90-4178-8ae6-d9c5501d653f", + "path": "/stick/down", + "interactions": "", + "processors": "", + "groups": "Joystick", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "0392d399-f6dd-4c82-8062-c1e9c0d34835", + "path": "/stick/left", + "interactions": "", + "processors": "", + "groups": "Joystick", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "942a66d9-d42f-43d6-8d70-ecb4ba5363bc", + "path": "/stick/right", + "interactions": "", + "processors": "", + "groups": "Joystick", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "Keyboard", + "id": "ff527021-f211-4c02-933e-5976594c46ed", + "path": "2DVector", + "interactions": "", + "processors": "", + "groups": "", + "action": "Navigate", + "isComposite": true, + "isPartOfComposite": false + }, + { + "name": "up", + "id": "563fbfdd-0f09-408d-aa75-8642c4f08ef0", + "path": "/w", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "up", + "id": "eb480147-c587-4a33-85ed-eb0ab9942c43", + "path": "/upArrow", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "2bf42165-60bc-42ca-8072-8c13ab40239b", + "path": "/s", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "85d264ad-e0a0-4565-b7ff-1a37edde51ac", + "path": "/downArrow", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "74214943-c580-44e4-98eb-ad7eebe17902", + "path": "/a", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "cea9b045-a000-445b-95b8-0c171af70a3b", + "path": "/leftArrow", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "8607c725-d935-4808-84b1-8354e29bab63", + "path": "/d", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "4cda81dc-9edd-4e03-9d7c-a71a14345d0b", + "path": "/rightArrow", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "", + "id": "9e92bb26-7e3b-4ec4-b06b-3c8f8e498ddc", + "path": "*/{Submit}", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse;Gamepad;Touch;Joystick;XR", + "action": "Submit", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "82627dcc-3b13-4ba9-841d-e4b746d6553e", + "path": "*/{Cancel}", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse;Gamepad;Touch;Joystick;XR", + "action": "Cancel", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "c52c8e0b-8179-41d3-b8a1-d149033bbe86", + "path": "/position", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Point", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "e1394cbc-336e-44ce-9ea8-6007ed6193f7", + "path": "/position", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Point", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "5693e57a-238a-46ed-b5ae-e64e6e574302", + "path": "/touch*/position", + "interactions": "", + "processors": "", + "groups": "Touch", + "action": "Point", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "4faf7dc9-b979-4210-aa8c-e808e1ef89f5", + "path": "/leftButton", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Click", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "8d66d5ba-88d7-48e6-b1cd-198bbfef7ace", + "path": "/tip", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Click", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "47c2a644-3ebc-4dae-a106-589b7ca75b59", + "path": "/touch*/press", + "interactions": "", + "processors": "", + "groups": "Touch", + "action": "Click", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "bb9e6b34-44bf-4381-ac63-5aa15d19f677", + "path": "/trigger", + "interactions": "", + "processors": "", + "groups": "XR", + "action": "Click", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "38c99815-14ea-4617-8627-164d27641299", + "path": "/scroll", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "ScrollWheel", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "4c191405-5738-4d4b-a523-c6a301dbf754", + "path": "/rightButton", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "RightClick", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "24066f69-da47-44f3-a07e-0015fb02eb2e", + "path": "/middleButton", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "MiddleClick", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "7236c0d9-6ca3-47cf-a6ee-a97f5b59ea77", + "path": "/devicePosition", + "interactions": "", + "processors": "", + "groups": "XR", + "action": "TrackedDevicePosition", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "23e01e3a-f935-4948-8d8b-9bcac77714fb", + "path": "/deviceRotation", + "interactions": "", + "processors": "", + "groups": "XR", + "action": "TrackedDeviceOrientation", + "isComposite": false, + "isPartOfComposite": false + } + ] + } + ], + "controlSchemes": [ + { + "name": "Keyboard&Mouse", + "bindingGroup": "Keyboard&Mouse", + "devices": [ + { + "devicePath": "", + "isOptional": false, + "isOR": false + }, + { + "devicePath": "", + "isOptional": false, + "isOR": false + } + ] + }, + { + "name": "Gamepad", + "bindingGroup": "Gamepad", + "devices": [ + { + "devicePath": "", + "isOptional": false, + "isOR": false + } + ] + }, + { + "name": "Touch", + "bindingGroup": "Touch", + "devices": [ + { + "devicePath": "", + "isOptional": false, + "isOR": false + } + ] + }, + { + "name": "Joystick", + "bindingGroup": "Joystick", + "devices": [ + { + "devicePath": "", + "isOptional": false, + "isOR": false + } + ] + }, + { + "name": "XR", + "bindingGroup": "XR", + "devices": [ + { + "devicePath": "", + "isOptional": false, + "isOR": false + } + ] + } + ] +} \ No newline at end of file diff --git a/Assets/99_Settings/InputSystem_Actions.inputactions.meta b/Assets/99_Settings/InputSystem_Actions.inputactions.meta new file mode 100644 index 0000000..6b38b04 --- /dev/null +++ b/Assets/99_Settings/InputSystem_Actions.inputactions.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 052faaac586de48259a63d0c4782560b +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 8404be70184654265930450def6a9037, type: 3} + generateWrapperCode: 0 + wrapperCodePath: + wrapperClassName: + wrapperCodeNamespace: diff --git a/Assets/99_Settings/Mobile_RPAsset.asset b/Assets/99_Settings/Mobile_RPAsset.asset new file mode 100644 index 0000000..0132df7 --- /dev/null +++ b/Assets/99_Settings/Mobile_RPAsset.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6599cd18d4f01778e8ba6042da3daa3950e54d9d273ae43ad045c829079be94c +size 4650 diff --git a/Assets/99_Settings/Mobile_RPAsset.asset.meta b/Assets/99_Settings/Mobile_RPAsset.asset.meta new file mode 100644 index 0000000..3660d15 --- /dev/null +++ b/Assets/99_Settings/Mobile_RPAsset.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5e6cbd92db86f4b18aec3ed561671858 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/99_Settings/Mobile_Renderer.asset b/Assets/99_Settings/Mobile_Renderer.asset new file mode 100644 index 0000000..e26ada9 --- /dev/null +++ b/Assets/99_Settings/Mobile_Renderer.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa93274c9521fa941170becec9e87c5fa36b8587eefd5eeb5c0eed0d1d4b1dbe +size 1713 diff --git a/Assets/99_Settings/Mobile_Renderer.asset.meta b/Assets/99_Settings/Mobile_Renderer.asset.meta new file mode 100644 index 0000000..a3588b1 --- /dev/null +++ b/Assets/99_Settings/Mobile_Renderer.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 65bc7dbf4170f435aa868c779acfb082 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/99_Settings/PC_RPAsset.asset b/Assets/99_Settings/PC_RPAsset.asset new file mode 100644 index 0000000..6ab37b0 --- /dev/null +++ b/Assets/99_Settings/PC_RPAsset.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4a0ee5c6064983b911aae26f46919d04545210a602123fb608218f3f36e67d4 +size 4669 diff --git a/Assets/99_Settings/PC_RPAsset.asset.meta b/Assets/99_Settings/PC_RPAsset.asset.meta new file mode 100644 index 0000000..e286b2f --- /dev/null +++ b/Assets/99_Settings/PC_RPAsset.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4b83569d67af61e458304325a23e5dfd +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/99_Settings/PC_Renderer.asset b/Assets/99_Settings/PC_Renderer.asset new file mode 100644 index 0000000..1d091f9 --- /dev/null +++ b/Assets/99_Settings/PC_Renderer.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d0b01d8ded3327263b6690be128a3de58d17c514943ae42fe743a3e084a9c79 +size 3439 diff --git a/Assets/99_Settings/PC_Renderer.asset.meta b/Assets/99_Settings/PC_Renderer.asset.meta new file mode 100644 index 0000000..ddae6a5 --- /dev/null +++ b/Assets/99_Settings/PC_Renderer.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f288ae1f4751b564a96ac7587541f7a2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/99_Settings/SampleSceneProfile.asset b/Assets/99_Settings/SampleSceneProfile.asset new file mode 100644 index 0000000..8d640bc --- /dev/null +++ b/Assets/99_Settings/SampleSceneProfile.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8677d4bac051d24caa11cd622e39f968155ee277bfce132274f1de225692fe9 +size 3703 diff --git a/Assets/99_Settings/SampleSceneProfile.asset.meta b/Assets/99_Settings/SampleSceneProfile.asset.meta new file mode 100644 index 0000000..b82270c --- /dev/null +++ b/Assets/99_Settings/SampleSceneProfile.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 10fc4df2da32a41aaa32d77bc913491c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/99_Settings/UniversalRenderPipelineGlobalSettings.asset b/Assets/99_Settings/UniversalRenderPipelineGlobalSettings.asset new file mode 100644 index 0000000..fa9f69b --- /dev/null +++ b/Assets/99_Settings/UniversalRenderPipelineGlobalSettings.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a37421f0d029c5038d3b8256ecf70dc68e720a3fbc538337b1a49213894d597 +size 26104 diff --git a/Assets/99_Settings/UniversalRenderPipelineGlobalSettings.asset.meta b/Assets/99_Settings/UniversalRenderPipelineGlobalSettings.asset.meta new file mode 100644 index 0000000..81b84f2 --- /dev/null +++ b/Assets/99_Settings/UniversalRenderPipelineGlobalSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 18dc0cd2c080841dea60987a38ce93fa +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/manifest.json b/Packages/manifest.json new file mode 100644 index 0000000..960c184 --- /dev/null +++ b/Packages/manifest.json @@ -0,0 +1,49 @@ +{ + "dependencies": { + "com.unity.ai.navigation": "2.0.14", + "com.unity.collab-proxy": "2.12.4", + "com.unity.ide.rider": "3.0.40", + "com.unity.ide.visualstudio": "2.0.26", + "com.unity.inputsystem": "1.20.0", + "com.unity.multiplayer.center": "1.0.1", + "com.unity.render-pipelines.universal": "17.3.0", + "com.unity.test-framework": "1.6.0", + "com.unity.timeline": "1.8.12", + "com.unity.ugui": "2.0.0", + "com.unity.visualscripting": "1.9.12", + "com.unity.modules.accessibility": "1.0.0", + "com.unity.modules.adaptiveperformance": "1.0.0", + "com.unity.modules.ai": "1.0.0", + "com.unity.modules.androidjni": "1.0.0", + "com.unity.modules.animation": "1.0.0", + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.cloth": "1.0.0", + "com.unity.modules.director": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.particlesystem": "1.0.0", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.physics2d": "1.0.0", + "com.unity.modules.screencapture": "1.0.0", + "com.unity.modules.terrain": "1.0.0", + "com.unity.modules.terrainphysics": "1.0.0", + "com.unity.modules.tilemap": "1.0.0", + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.uielements": "1.0.0", + "com.unity.modules.umbra": "1.0.0", + "com.unity.modules.unityanalytics": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.unitywebrequestassetbundle": "1.0.0", + "com.unity.modules.unitywebrequestaudio": "1.0.0", + "com.unity.modules.unitywebrequesttexture": "1.0.0", + "com.unity.modules.unitywebrequestwww": "1.0.0", + "com.unity.modules.vectorgraphics": "1.0.0", + "com.unity.modules.vehicles": "1.0.0", + "com.unity.modules.video": "1.0.0", + "com.unity.modules.vr": "1.0.0", + "com.unity.modules.wind": "1.0.0", + "com.unity.modules.xr": "1.0.0" + } +} diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json new file mode 100644 index 0000000..7551e9f --- /dev/null +++ b/Packages/packages-lock.json @@ -0,0 +1,472 @@ +{ + "dependencies": { + "com.unity.ai.navigation": { + "version": "2.0.14", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.modules.ai": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.burst": { + "version": "1.8.30", + "depth": 2, + "source": "registry", + "dependencies": { + "com.unity.mathematics": "1.2.1", + "com.unity.modules.jsonserialize": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.collab-proxy": { + "version": "2.12.4", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.collections": { + "version": "2.6.8", + "depth": 2, + "source": "registry", + "dependencies": { + "com.unity.burst": "1.8.29", + "com.unity.mathematics": "1.3.2", + "com.unity.test-framework": "1.4.6", + "com.unity.nuget.mono-cecil": "1.11.6", + "com.unity.test-framework.performance": "3.0.3" + }, + "url": "https://packages.unity.com" + }, + "com.unity.ext.nunit": { + "version": "2.0.5", + "depth": 1, + "source": "builtin", + "dependencies": {} + }, + "com.unity.ide.rider": { + "version": "3.0.40", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ext.nunit": "1.0.6" + }, + "url": "https://packages.unity.com" + }, + "com.unity.ide.visualstudio": { + "version": "2.0.26", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.test-framework": "1.1.33" + }, + "url": "https://packages.unity.com" + }, + "com.unity.inputsystem": { + "version": "1.20.0", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.modules.uielements": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.mathematics": { + "version": "1.3.3", + "depth": 2, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.multiplayer.center": { + "version": "1.0.1", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.uielements": "1.0.0" + } + }, + "com.unity.nuget.mono-cecil": { + "version": "1.11.6", + "depth": 3, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.render-pipelines.core": { + "version": "17.3.0", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.burst": "1.8.14", + "com.unity.mathematics": "1.3.2", + "com.unity.ugui": "2.0.0", + "com.unity.collections": "2.4.3", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.terrain": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.render-pipelines.universal": { + "version": "17.3.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.render-pipelines.core": "17.3.0", + "com.unity.shadergraph": "17.3.0", + "com.unity.render-pipelines.universal-config": "17.0.3" + } + }, + "com.unity.render-pipelines.universal-config": { + "version": "17.0.3", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.render-pipelines.core": "17.0.3" + } + }, + "com.unity.searcher": { + "version": "4.9.5", + "depth": 2, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.shadergraph": { + "version": "17.3.0", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.render-pipelines.core": "17.3.0", + "com.unity.searcher": "4.9.3" + } + }, + "com.unity.test-framework": { + "version": "1.6.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.ext.nunit": "2.0.3", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.test-framework.performance": { + "version": "3.5.0", + "depth": 3, + "source": "registry", + "dependencies": { + "com.unity.test-framework": "1.1.33", + "com.unity.modules.jsonserialize": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.timeline": { + "version": "1.8.12", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.director": "1.0.0", + "com.unity.modules.animation": "1.0.0", + "com.unity.modules.particlesystem": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.ugui": { + "version": "2.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.imgui": "1.0.0" + } + }, + "com.unity.visualscripting": { + "version": "1.9.12", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ugui": "2.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.modules.accessibility": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.adaptiveperformance": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.subsystems": "1.0.0" + } + }, + "com.unity.modules.ai": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.androidjni": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.animation": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.assetbundle": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.audio": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.cloth": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.modules.director": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.animation": "1.0.0" + } + }, + "com.unity.modules.hierarchycore": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.imageconversion": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.imgui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.jsonserialize": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.particlesystem": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics2d": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.screencapture": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.subsystems": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.terrain": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.terrainphysics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.terrain": "1.0.0" + } + }, + "com.unity.modules.tilemap": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics2d": "1.0.0" + } + }, + "com.unity.modules.ui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.uielements": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.hierarchycore": "1.0.0", + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.modules.umbra": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.unityanalytics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.unitywebrequest": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.unitywebrequestassetbundle": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0" + } + }, + "com.unity.modules.unitywebrequestaudio": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.audio": "1.0.0" + } + }, + "com.unity.modules.unitywebrequesttexture": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.unitywebrequestwww": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.unitywebrequestassetbundle": "1.0.0", + "com.unity.modules.unitywebrequestaudio": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.vectorgraphics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.uielements": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0", + "com.unity.modules.imgui": "1.0.0" + } + }, + "com.unity.modules.vehicles": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.modules.video": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0" + } + }, + "com.unity.modules.vr": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.xr": "1.0.0" + } + }, + "com.unity.modules.wind": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.xr": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.subsystems": "1.0.0" + } + } + } +} diff --git a/ProjectSettings/AudioManager.asset b/ProjectSettings/AudioManager.asset new file mode 100644 index 0000000..b19c873 --- /dev/null +++ b/ProjectSettings/AudioManager.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aeedeb3243f07b61dbbe854aa08b5ef6f0b5274dd9852ad9f6129dde3e105a31 +size 413 diff --git a/ProjectSettings/ClusterInputManager.asset b/ProjectSettings/ClusterInputManager.asset new file mode 100644 index 0000000..53b8289 --- /dev/null +++ b/ProjectSettings/ClusterInputManager.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:40e65dd214bf254955d2c8829ca8ce2130fd3510485560ce012e9a1ddd93e623 +size 114 diff --git a/ProjectSettings/DynamicsManager.asset b/ProjectSettings/DynamicsManager.asset new file mode 100644 index 0000000..104a796 --- /dev/null +++ b/ProjectSettings/DynamicsManager.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b7c9a9dc08b98990109d4346f68745e15e238de400f96c583e53e1c83c743a78 +size 1254 diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset new file mode 100644 index 0000000..19a1a5f --- /dev/null +++ b/ProjectSettings/EditorBuildSettings.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a50b90bc07247f7b98867d8f851611a163029bda764a36266fdf5e8c9452da71 +size 402 diff --git a/ProjectSettings/EditorSettings.asset b/ProjectSettings/EditorSettings.asset new file mode 100644 index 0000000..ed42e15 --- /dev/null +++ b/ProjectSettings/EditorSettings.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32d6a9be4c9aa9795a96bd951820a2d9be1bfefab82ed05a5db111af0863938f +size 1585 diff --git a/ProjectSettings/GraphicsSettings.asset b/ProjectSettings/GraphicsSettings.asset new file mode 100644 index 0000000..e1b67fb --- /dev/null +++ b/ProjectSettings/GraphicsSettings.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6736f33dc62c35b0e7a88e275242080bc7a1d94c91154d18fceb332b661a6bce +size 2615 diff --git a/ProjectSettings/InputManager.asset b/ProjectSettings/InputManager.asset new file mode 100644 index 0000000..f002ee5 --- /dev/null +++ b/ProjectSettings/InputManager.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a1bb836a1008d26d0860d143e9d9df7ca41731d30a72901b518063819c62df2 +size 9731 diff --git a/ProjectSettings/MemorySettings.asset b/ProjectSettings/MemorySettings.asset new file mode 100644 index 0000000..cd6af44 --- /dev/null +++ b/ProjectSettings/MemorySettings.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e8379a461b10ae09f3f696911088c16875d63e87ed5f2d95df9e1892703f9fd +size 1192 diff --git a/ProjectSettings/MultiplayerManager.asset b/ProjectSettings/MultiplayerManager.asset new file mode 100644 index 0000000..a241e60 --- /dev/null +++ b/ProjectSettings/MultiplayerManager.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aba89fd1a1ddad182727ad82727e536d27372e90328a8196da2a4560398983dd +size 157 diff --git a/ProjectSettings/NavMeshAreas.asset b/ProjectSettings/NavMeshAreas.asset new file mode 100644 index 0000000..c788824 --- /dev/null +++ b/ProjectSettings/NavMeshAreas.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80106cfa7e6181a1928b142c075f3e510d527441e3d79bc83590e4ac91e7cd66 +size 1308 diff --git a/ProjectSettings/PackageManagerSettings.asset b/ProjectSettings/PackageManagerSettings.asset new file mode 100644 index 0000000..7658c79 --- /dev/null +++ b/ProjectSettings/PackageManagerSettings.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7dabba589abe7fc2b45bd3d3fba3fe9be97043492703f716da2d9131c13a807 +size 1003 diff --git a/ProjectSettings/Physics2DSettings.asset b/ProjectSettings/Physics2DSettings.asset new file mode 100644 index 0000000..36189c0 --- /dev/null +++ b/ProjectSettings/Physics2DSettings.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3cbdbf0be15244b7b67d2f07bdb8e8981911c11a8c7fe8035f5261272fec658 +size 2028 diff --git a/ProjectSettings/PresetManager.asset b/ProjectSettings/PresetManager.asset new file mode 100644 index 0000000..f781dbe --- /dev/null +++ b/ProjectSettings/PresetManager.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29c125923fe6e29f90190d4fce1c82d660e7051546e2c9d02908d18c9cf2436c +size 146 diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset new file mode 100644 index 0000000..4b162b1 --- /dev/null +++ b/ProjectSettings/ProjectSettings.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95885dc9bb20817369445ce7243e4f4ba489ae0db3fa468c8fee04ce2cc26ab0 +size 25807 diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt new file mode 100644 index 0000000..b5eaf96 --- /dev/null +++ b/ProjectSettings/ProjectVersion.txt @@ -0,0 +1,2 @@ +m_EditorVersion: 6000.3.22f1 +m_EditorVersionWithRevision: 6000.3.22f1 (1c726e1fb402) diff --git a/ProjectSettings/QualitySettings.asset b/ProjectSettings/QualitySettings.asset new file mode 100644 index 0000000..1b536a9 --- /dev/null +++ b/ProjectSettings/QualitySettings.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6814d6cc3eb850dd7d2a069a8b17ba9f7591deba8b1758a855978bd9c8627643 +size 3662 diff --git a/ProjectSettings/SceneTemplateSettings.json b/ProjectSettings/SceneTemplateSettings.json new file mode 100644 index 0000000..ede5887 --- /dev/null +++ b/ProjectSettings/SceneTemplateSettings.json @@ -0,0 +1,121 @@ +{ + "templatePinStates": [], + "dependencyTypeInfos": [ + { + "userAdded": false, + "type": "UnityEngine.AnimationClip", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEditor.Animations.AnimatorController", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.AnimatorOverrideController", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEditor.Audio.AudioMixerController", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.ComputeShader", + "defaultInstantiationMode": 1 + }, + { + "userAdded": false, + "type": "UnityEngine.Cubemap", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.GameObject", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEditor.LightingDataAsset", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.LightingSettings", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Material", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEditor.MonoScript", + "defaultInstantiationMode": 1 + }, + { + "userAdded": false, + "type": "UnityEngine.PhysicsMaterial", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.PhysicsMaterial2D", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Rendering.PostProcessing.PostProcessProfile", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Rendering.PostProcessing.PostProcessResources", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Rendering.VolumeProfile", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEditor.SceneAsset", + "defaultInstantiationMode": 1 + }, + { + "userAdded": false, + "type": "UnityEngine.Shader", + "defaultInstantiationMode": 1 + }, + { + "userAdded": false, + "type": "UnityEngine.ShaderVariantCollection", + "defaultInstantiationMode": 1 + }, + { + "userAdded": false, + "type": "UnityEngine.Texture", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Texture2D", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Timeline.TimelineAsset", + "defaultInstantiationMode": 0 + } + ], + "defaultDependencyTypeInfo": { + "userAdded": false, + "type": "", + "defaultInstantiationMode": 1 + }, + "newSceneOverride": 0 +} \ No newline at end of file diff --git a/ProjectSettings/ShaderGraphSettings.asset b/ProjectSettings/ShaderGraphSettings.asset new file mode 100644 index 0000000..30d0e44 --- /dev/null +++ b/ProjectSettings/ShaderGraphSettings.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cdba1e5d65bcf6e3269d76ed3e60b6c21f98322002996642c9d74f1eb89f6b91 +size 556 diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset new file mode 100644 index 0000000..6d49bef --- /dev/null +++ b/ProjectSettings/TagManager.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23fc56b484aa3d7edf5914cd3591f7a823ccef5e3f3496f8a51f30388ead63dc +size 657 diff --git a/ProjectSettings/TimeManager.asset b/ProjectSettings/TimeManager.asset new file mode 100644 index 0000000..38794bf --- /dev/null +++ b/ProjectSettings/TimeManager.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a83e54adbbda7c9f4851103a0c6ab7f6448a3343d4ea5b7620452fa08416ecd +size 202 diff --git a/ProjectSettings/URPProjectSettings.asset b/ProjectSettings/URPProjectSettings.asset new file mode 100644 index 0000000..8160870 --- /dev/null +++ b/ProjectSettings/URPProjectSettings.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c317fe22b9488785c0611f0642429922e5d324430d929bffb41648130f30c218 +size 461 diff --git a/ProjectSettings/UnityConnectSettings.asset b/ProjectSettings/UnityConnectSettings.asset new file mode 100644 index 0000000..0518af5 --- /dev/null +++ b/ProjectSettings/UnityConnectSettings.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98f142992d8a623501c99648e1b7363adca08b67bb50390b566df368d00bc9a0 +size 1063 diff --git a/ProjectSettings/VFXManager.asset b/ProjectSettings/VFXManager.asset new file mode 100644 index 0000000..e0b8a4e --- /dev/null +++ b/ProjectSettings/VFXManager.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f066c6483919961332415ee64204f74fe52f38c02e82892eb02b7a5b2e381f0e +size 308 diff --git a/ProjectSettings/VersionControlSettings.asset b/ProjectSettings/VersionControlSettings.asset new file mode 100644 index 0000000..6e1e402 --- /dev/null +++ b/ProjectSettings/VersionControlSettings.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7bda45bf7a394745fee1316e6c71fa676004d591ad1f3aa247fd3e4ceb86071 +size 188 diff --git a/ProjectSettings/XRSettings.asset b/ProjectSettings/XRSettings.asset new file mode 100644 index 0000000..bfefb85 --- /dev/null +++ b/ProjectSettings/XRSettings.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:edd2beb4a2e388312b4b7da241aa51070434005d82c59363f1237dd2e567585f +size 158