From 9369763df5eb4cc2407eb1b45f3496b5f69d8915 Mon Sep 17 00:00:00 2001 From: Matt F Date: Thu, 23 Apr 2026 22:44:45 -0700 Subject: [PATCH] Adding Gold Manager with initial network setup --- .vsconfig | 6 + .../{SampleScene.unity => Levels/Main.unity} | 223 ++++++++++++++++-- .../Main.unity.meta} | 0 Assets/_Project/Scripts/Core/TD.Core.asmdef | 3 - .../_Project/Scripts/Core/TD.Core.asmdef.meta | 7 - .../_Project/Scripts/Gameplay/GoldManager.cs | 152 ++++++++++++ .../Scripts/Gameplay/GoldManager.cs.meta | 2 + .../Scripts/Gameplay/TD.Gameplay.asmdef | 16 -- .../Scripts/Gameplay/TD.Gameplay.asmdef.meta | 7 - .../Scripts/Networking/TD.Networking.asmdef | 18 -- .../Networking/TD.Networking.asmdef.meta | 7 - Assets/_Project/Scripts/UI/TD.UI.asmdef | 17 -- Assets/_Project/Scripts/UI/TD.UI.asmdef.meta | 7 - ProjectSettings/EditorBuildSettings.asset | 2 +- ProjectSettings/SceneTemplateSettings.json | 121 ++++++++++ 15 files changed, 488 insertions(+), 100 deletions(-) create mode 100644 .vsconfig rename Assets/_Project/Scenes/{SampleScene.unity => Levels/Main.unity} (66%) rename Assets/_Project/Scenes/{SampleScene.unity.meta => Levels/Main.unity.meta} (100%) delete mode 100644 Assets/_Project/Scripts/Core/TD.Core.asmdef delete mode 100644 Assets/_Project/Scripts/Core/TD.Core.asmdef.meta create mode 100644 Assets/_Project/Scripts/Gameplay/GoldManager.cs create mode 100644 Assets/_Project/Scripts/Gameplay/GoldManager.cs.meta delete mode 100644 Assets/_Project/Scripts/Gameplay/TD.Gameplay.asmdef delete mode 100644 Assets/_Project/Scripts/Gameplay/TD.Gameplay.asmdef.meta delete mode 100644 Assets/_Project/Scripts/Networking/TD.Networking.asmdef delete mode 100644 Assets/_Project/Scripts/Networking/TD.Networking.asmdef.meta delete mode 100644 Assets/_Project/Scripts/UI/TD.UI.asmdef delete mode 100644 Assets/_Project/Scripts/UI/TD.UI.asmdef.meta create mode 100644 ProjectSettings/SceneTemplateSettings.json diff --git a/.vsconfig b/.vsconfig new file mode 100644 index 0000000..f019fd0 --- /dev/null +++ b/.vsconfig @@ -0,0 +1,6 @@ +{ + "version": "1.0", + "components": [ + "Microsoft.VisualStudio.Workload.ManagedGame" + ] +} diff --git a/Assets/_Project/Scenes/SampleScene.unity b/Assets/_Project/Scenes/Levels/Main.unity similarity index 66% rename from Assets/_Project/Scenes/SampleScene.unity rename to Assets/_Project/Scenes/Levels/Main.unity index 1c63aa8..97c598a 100644 --- a/Assets/_Project/Scenes/SampleScene.unity +++ b/Assets/_Project/Scenes/Levels/Main.unity @@ -38,12 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.18028378, g: 0.22571412, b: 0.30692285, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -119,6 +119,78 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1 &239104687 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 239104690} + - component: {fileID: 239104688} + - component: {fileID: 239104689} + m_Layer: 0 + m_Name: GoldManager + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &239104688 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 239104687} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.NetworkObject + GlobalObjectIdHash: 3224213014 + InScenePlacedSourceGlobalObjectIdHash: 0 + DeferredDespawnTick: 0 + Ownership: 1 + AlwaysReplicateAsRoot: 0 + SynchronizeTransform: 1 + ActiveSceneSynchronization: 0 + SceneMigrationSynchronization: 0 + SpawnWithObservers: 1 + DontDestroyWithOwner: 0 + AutoObjectParentSync: 1 + SyncOwnerTransformWhenParented: 1 + AllowOwnerToParent: 0 +--- !u!114 &239104689 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 239104687} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d44ebdd0b2fc4144c8f8a181a714b738, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::TD.Gameplay.GoldManager + ShowTopMostFoldoutHeaderGroup: 1 + startingGold: 100 +--- !u!4 &239104690 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 239104687} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &330585543 GameObject: m_ObjectHideFlags: 0 @@ -248,14 +320,14 @@ MonoBehaviour: m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} m_RequiresDepthTexture: 0 m_RequiresColorTexture: 0 - m_Version: 2 m_TaaSettings: - quality: 3 - frameInfluence: 0.1 - jitterScale: 1 - mipBias: 0 - varianceClampScale: 0.9 - contrastAdaptiveSharpening: 0 + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 + m_Version: 2 --- !u!1 &410087039 GameObject: m_ObjectHideFlags: 0 @@ -282,14 +354,14 @@ Light: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 410087039} m_Enabled: 1 - serializedVersion: 11 + serializedVersion: 13 m_Type: 1 m_Color: {r: 1, g: 1, b: 1, a: 1} m_Intensity: 2 m_Range: 10 m_SpotAngle: 30 m_InnerSpotAngle: 21.80208 - m_CookieSize: 10 + m_CookieSize2D: {x: 10, y: 10} m_Shadows: m_Type: 2 m_Resolution: -1 @@ -334,8 +406,11 @@ Light: m_UseBoundingSphereOverride: 0 m_UseViewFrustumForShadowCasterCull: 1 m_ForceVisible: 0 - m_ShadowRadius: 0 + m_ShapeRadius: 0 m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 --- !u!4 &410087041 Transform: m_ObjectHideFlags: 0 @@ -363,17 +438,23 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} m_Name: m_EditorClassIdentifier: - m_Version: 3 m_UsePipelineSettings: 1 m_AdditionalLightsShadowResolutionTier: 2 - m_LightLayerMask: 1 - m_RenderingLayers: 1 m_CustomShadowLayers: 0 - m_ShadowLayerMask: 1 - m_ShadowRenderingLayers: 1 m_LightCookieSize: {x: 1, y: 1} m_LightCookieOffset: {x: 0, y: 0} m_SoftShadowQuality: 1 + m_RenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_ShadowRenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_Version: 4 + m_LightLayerMask: 1 + m_ShadowLayerMask: 1 + m_RenderingLayers: 1 + m_ShadowRenderingLayers: 1 --- !u!1 &832575517 GameObject: m_ObjectHideFlags: 0 @@ -423,6 +504,112 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1682341399 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1682341402} + - component: {fileID: 1682341401} + - component: {fileID: 1682341400} + m_Layer: 0 + m_Name: NetworkManager + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1682341400 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1682341399} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6960e84d07fb87f47956e7a81d71c4e6, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.Transports.UTP.UnityTransport + m_ProtocolType: 0 + m_UseWebSockets: 0 + m_UseEncryption: 0 + m_MaxPacketQueueSize: 128 + m_MaxPayloadSize: 6144 + m_HeartbeatTimeoutMS: 500 + m_ConnectTimeoutMS: 1000 + m_MaxConnectAttempts: 60 + m_DisconnectTimeoutMS: 30000 + ConnectionData: + Address: 127.0.0.1 + Port: 7777 + WebSocketPath: / + ServerListenAddress: 127.0.0.1 + ClientBindPort: 0 + DebugSimulator: + PacketDelayMS: 0 + PacketJitterMS: 0 + PacketDropRate: 0 +--- !u!114 &1682341401 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1682341399} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 593a2fe42fa9d37498c96f9a383b6521, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.NetworkManager + NetworkManagerExpanded: 0 + NetworkConfig: + ProtocolVersion: 0 + NetworkTransport: {fileID: 1682341400} + PlayerPrefab: {fileID: 0} + Prefabs: + NetworkPrefabsLists: + - {fileID: 11400000, guid: 481ab1d7456efd044bc3e349aacd92ae, type: 2} + TickRate: 30 + ClientConnectionBufferTimeout: 10 + ConnectionApproval: 0 + ConnectionData: + EnableTimeResync: 0 + TimeResyncInterval: 30 + EnsureNetworkVariableLengthSafety: 0 + EnableSceneManagement: 1 + ForceSamePrefabs: 1 + RecycleNetworkIds: 1 + NetworkIdRecycleDelay: 120 + RpcHashSize: 0 + LoadSceneTimeOut: 120 + SpawnTimeout: 10 + EnableNetworkLogs: 1 + NetworkTopology: 0 + UseCMBService: 0 + AutoSpawnPlayerPrefabClientSide: 1 + NetworkProfilingMetrics: 1 + OldPrefabList: [] + RunInBackground: 1 + LogLevel: 1 +--- !u!4 &1682341402 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1682341399} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1660057539 &9223372036854775807 SceneRoots: m_ObjectHideFlags: 0 @@ -430,3 +617,5 @@ SceneRoots: - {fileID: 330585546} - {fileID: 410087041} - {fileID: 832575519} + - {fileID: 1682341402} + - {fileID: 239104690} diff --git a/Assets/_Project/Scenes/SampleScene.unity.meta b/Assets/_Project/Scenes/Levels/Main.unity.meta similarity index 100% rename from Assets/_Project/Scenes/SampleScene.unity.meta rename to Assets/_Project/Scenes/Levels/Main.unity.meta diff --git a/Assets/_Project/Scripts/Core/TD.Core.asmdef b/Assets/_Project/Scripts/Core/TD.Core.asmdef deleted file mode 100644 index 1b54451..0000000 --- a/Assets/_Project/Scripts/Core/TD.Core.asmdef +++ /dev/null @@ -1,3 +0,0 @@ -{ - "name": "TD.Core" -} diff --git a/Assets/_Project/Scripts/Core/TD.Core.asmdef.meta b/Assets/_Project/Scripts/Core/TD.Core.asmdef.meta deleted file mode 100644 index a78fc6b..0000000 --- a/Assets/_Project/Scripts/Core/TD.Core.asmdef.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: f62380d35dc31494f957f6b5559755f5 -AssemblyDefinitionImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Project/Scripts/Gameplay/GoldManager.cs b/Assets/_Project/Scripts/Gameplay/GoldManager.cs new file mode 100644 index 0000000..1c8d625 --- /dev/null +++ b/Assets/_Project/Scripts/Gameplay/GoldManager.cs @@ -0,0 +1,152 @@ +using Unity.Netcode; +using UnityEngine; + +namespace TD.Gameplay +{ + /// + /// GoldManager — canonical server-authoritative template for this project. + /// + /// Every gameplay system (towers, enemies, waves, damage) should follow + /// the same three-beat pattern demonstrated here: + /// 1. State lives in NetworkVariables, which only the server can write. + /// 2. Clients REQUEST changes via [Rpc(SendTo.Server, ...)] methods. + /// They never change state directly. + /// 3. The server VALIDATES the request before applying it. + /// Never trust the client. + /// + /// Cosmetic-only reactions (sounds, VFX, UI popups) can use + /// [Rpc(SendTo.ClientsAndHost)] or [Rpc(SendTo.NotServer)] to broadcast. + /// + public class GoldManager : NetworkBehaviour + { + private void Awake() + { + Debug.Log("[GoldManager] Awake ran!"); + } + + // --- Tunables (editable in Inspector) ----------------------------- + + [Tooltip("How much gold every player starts with when the game begins.")] + [SerializeField] private int startingGold = 100; + + // --- Networked state ---------------------------------------------- + + // A NetworkVariable automatically syncs from server to clients. + // readPerm = Everyone: all clients can read the current value. + // writePerm = Server: only the server can change it. + private readonly NetworkVariable currentGold = new NetworkVariable( + value: 0, + readPerm: NetworkVariableReadPermission.Everyone, + writePerm: NetworkVariableWritePermission.Server + ); + + // Public read-only accessor for other scripts (UI, tower placement). + public int CurrentGold => currentGold.Value; + + // --- Lifecycle ---------------------------------------------------- + + /// + /// OnNetworkSpawn runs on every peer (server + all clients) when this + /// NetworkBehaviour becomes active on the network. Replaces Start() + /// for networked setup. + /// + public override void OnNetworkSpawn() + { + Debug.Log($"[GoldManager] OnNetworkSpawn ran. IsServer={IsServer}, IsClient={IsClient}, IsHost={IsHost}"); + + currentGold.OnValueChanged += HandleGoldChanged; + Debug.Log($"[GoldManager] Subscribed to OnValueChanged. Current value before init: {currentGold.Value}"); + + if (IsServer) + { + currentGold.Value = startingGold; + Debug.Log($"[GoldManager] Server initialized gold. Current value after set: {currentGold.Value}"); + } + } + + public override void OnNetworkDespawn() + { + // Always unsubscribe to avoid callback leaks. + currentGold.OnValueChanged -= HandleGoldChanged; + } + + private void HandleGoldChanged(int previous, int current) + { + // Fires on every peer whenever the value syncs. Use Log here so + // you can see syncing in the Console during development. + Debug.Log($"[GoldManager] Gold changed: {previous} -> {current}"); + } + + // --- Public API (called by client-side code) ---------------------- + + /// + /// Client-side entry point for spending gold. Called by gameplay code + /// like TowerPlacement when the local player clicks "build tower." + /// + /// The actual spending happens on the server via the Rpc. + /// + public void RequestSpendGold(int amount) + { + SpendGoldRpc(amount); + } + + /// + /// Server-side entry point for awarding gold (wave clear, enemy kill). + /// Not Rpc-wrapped — this is called directly by server game logic in + /// response to server-authoritative events. + /// + public void AwardGold(int amount) + { + if (!IsServer) + { + Debug.LogError("[GoldManager] AwardGold called on a client! " + + "Only server code should call this directly."); + return; + } + + if (amount <= 0) return; + currentGold.Value += amount; + } + + // --- Server-side RPC ---------------------------------------------- + + // [Rpc(SendTo.Server, ...)] means: a client calls this locally, but + // NGO routes the call and executes the method on the server. + // + // RequireOwnership = false lets any client call it (correct for a + // shared GoldManager). For per-player NetworkObjects you'd usually + // leave the default ownership requirement in place. + // + // Naming convention: methods with [Rpc] attributes must end with "Rpc". + // The source generator relies on this suffix. + [Rpc(SendTo.Server, RequireOwnership = false)] + private void SpendGoldRpc(int amount, RpcParams rpcParams = default) + { + // This method body runs on the server only. + // Validate everything — do not trust the client. + + // Validation 1: reject non-positive amounts. A negative amount + // would let a malicious client GAIN gold if we just subtracted. + if (amount <= 0) + { + Debug.LogWarning($"[GoldManager] Rejected spend of {amount} " + + $"from client {rpcParams.Receive.SenderClientId}: " + + $"amount must be positive."); + return; + } + + // Validation 2: can't spend more than current balance. + if (currentGold.Value < amount) + { + Debug.LogWarning($"[GoldManager] Rejected spend of {amount} " + + $"from client {rpcParams.Receive.SenderClientId}: " + + $"insufficient funds (have {currentGold.Value})."); + return; + } + + // Server applies the change. NetworkVariable syncs to clients + // automatically at the next network tick. + currentGold.Value -= amount; + } + } +} \ No newline at end of file diff --git a/Assets/_Project/Scripts/Gameplay/GoldManager.cs.meta b/Assets/_Project/Scripts/Gameplay/GoldManager.cs.meta new file mode 100644 index 0000000..53e1a6e --- /dev/null +++ b/Assets/_Project/Scripts/Gameplay/GoldManager.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: d44ebdd0b2fc4144c8f8a181a714b738 \ No newline at end of file diff --git a/Assets/_Project/Scripts/Gameplay/TD.Gameplay.asmdef b/Assets/_Project/Scripts/Gameplay/TD.Gameplay.asmdef deleted file mode 100644 index cea1f80..0000000 --- a/Assets/_Project/Scripts/Gameplay/TD.Gameplay.asmdef +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "TD.Gameplay", - "rootNamespace": "", - "references": [ - "GUID:f62380d35dc31494f957f6b5559755f5" - ], - "includePlatforms": [], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": false, - "precompiledReferences": [], - "autoReferenced": true, - "defineConstraints": [], - "versionDefines": [], - "noEngineReferences": false -} \ No newline at end of file diff --git a/Assets/_Project/Scripts/Gameplay/TD.Gameplay.asmdef.meta b/Assets/_Project/Scripts/Gameplay/TD.Gameplay.asmdef.meta deleted file mode 100644 index de8ac4f..0000000 --- a/Assets/_Project/Scripts/Gameplay/TD.Gameplay.asmdef.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 027bbe8f3a58f024fa5c3fd977f0371b -AssemblyDefinitionImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Project/Scripts/Networking/TD.Networking.asmdef b/Assets/_Project/Scripts/Networking/TD.Networking.asmdef deleted file mode 100644 index 727c6be..0000000 --- a/Assets/_Project/Scripts/Networking/TD.Networking.asmdef +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "TD.Networking", - "rootNamespace": "", - "references": [ - "GUID:f62380d35dc31494f957f6b5559755f5", - "GUID:027bbe8f3a58f024fa5c3fd977f0371b", - "GUID:1491147abca9d7d4bb7105af628b223e" - ], - "includePlatforms": [], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": false, - "precompiledReferences": [], - "autoReferenced": true, - "defineConstraints": [], - "versionDefines": [], - "noEngineReferences": false -} \ No newline at end of file diff --git a/Assets/_Project/Scripts/Networking/TD.Networking.asmdef.meta b/Assets/_Project/Scripts/Networking/TD.Networking.asmdef.meta deleted file mode 100644 index d1e0cfa..0000000 --- a/Assets/_Project/Scripts/Networking/TD.Networking.asmdef.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 824f8ff8ddfcf9a4da4b9c38a264d73e -AssemblyDefinitionImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Project/Scripts/UI/TD.UI.asmdef b/Assets/_Project/Scripts/UI/TD.UI.asmdef deleted file mode 100644 index 79b17bb..0000000 --- a/Assets/_Project/Scripts/UI/TD.UI.asmdef +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "TD.UI", - "rootNamespace": "", - "references": [ - "GUID:027bbe8f3a58f024fa5c3fd977f0371b", - "GUID:f62380d35dc31494f957f6b5559755f5" - ], - "includePlatforms": [], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": false, - "precompiledReferences": [], - "autoReferenced": true, - "defineConstraints": [], - "versionDefines": [], - "noEngineReferences": false -} \ No newline at end of file diff --git a/Assets/_Project/Scripts/UI/TD.UI.asmdef.meta b/Assets/_Project/Scripts/UI/TD.UI.asmdef.meta deleted file mode 100644 index 771e00a..0000000 --- a/Assets/_Project/Scripts/UI/TD.UI.asmdef.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: dccb24d2a739b9d46aa3fc7d50c9511e -AssemblyDefinitionImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset index df58a2b..b9c569c 100644 --- a/ProjectSettings/EditorBuildSettings.asset +++ b/ProjectSettings/EditorBuildSettings.asset @@ -6,7 +6,7 @@ EditorBuildSettings: serializedVersion: 2 m_Scenes: - enabled: 1 - path: Assets/_Project/Scenes/SampleScene.unity + path: Assets/_Project/Scenes/Levels/Main.unity guid: 99c9720ab356a0642a771bea13969a05 m_configObjects: com.unity.input.settings.actions: {fileID: -944628639613478452, guid: 052faaac586de48259a63d0c4782560b, type: 3} 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