diff --git a/Assembly-CSharp.csproj b/Assembly-CSharp.csproj index f6b17c6..1c67444 100644 --- a/Assembly-CSharp.csproj +++ b/Assembly-CSharp.csproj @@ -55,20 +55,25 @@ + + + + + @@ -77,6 +82,7 @@ + @@ -110,6 +116,7 @@ + diff --git a/Assets/DefaultNetworkPrefabs.asset b/Assets/DefaultNetworkPrefabs.asset index e98a4ce..92ac64b 100644 --- a/Assets/DefaultNetworkPrefabs.asset +++ b/Assets/DefaultNetworkPrefabs.asset @@ -29,3 +29,13 @@ MonoBehaviour: SourcePrefabToOverride: {fileID: 0} SourceHashToOverride: 0 OverridingTargetPrefab: {fileID: 0} + - Override: 0 + Prefab: {fileID: 2938167817760513538, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + SourcePrefabToOverride: {fileID: 0} + SourceHashToOverride: 0 + OverridingTargetPrefab: {fileID: 0} + - Override: 0 + Prefab: {fileID: 8124290768227340041, guid: e56926eda34629f4fbf3e4c53f0f8bd4, type: 3} + SourcePrefabToOverride: {fileID: 0} + SourceHashToOverride: 0 + OverridingTargetPrefab: {fileID: 0} diff --git a/Assets/Materials/FogOfWarMaterial.mat b/Assets/Materials/FogOfWarMaterial.mat new file mode 100644 index 0000000..b1b878f --- /dev/null +++ b/Assets/Materials/FogOfWarMaterial.mat @@ -0,0 +1,138 @@ +%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: FogOfWarMaterial + m_Shader: {fileID: 4800000, guid: 1a32b22331996294f8eb2b7ac12d1c6b, 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: {} + 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: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _ExploredColor: {r: 0, g: 0, b: 0, a: 0.5} + - _FogColor: {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 &638105198768402788 +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/Materials/FogOfWarMaterial.mat.meta b/Assets/Materials/FogOfWarMaterial.mat.meta new file mode 100644 index 0000000..aaa55ef --- /dev/null +++ b/Assets/Materials/FogOfWarMaterial.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: eb0604feb76547a488648224ebb23e77 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Core.prefab b/Assets/Prefabs/Core.prefab index 3620c95..8e00086 100644 --- a/Assets/Prefabs/Core.prefab +++ b/Assets/Prefabs/Core.prefab @@ -9,6 +9,9 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 8064559726283331702} + - component: {fileID: 5173262576415873253} + - component: {fileID: 1287070985890992582} + - component: {fileID: 945062474581833766} m_Layer: 0 m_Name: Core m_TagString: Untagged @@ -32,6 +35,70 @@ Transform: - {fileID: 2126198199081001988} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &5173262576415873253 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8124290768227340041} + 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: 1288120633 + 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 &1287070985890992582 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8124290768227340041} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7c94274e2af2c8d4f827fe52b26c4410, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::Northbound.Core + ShowTopMostFoldoutHeaderGroup: 1 + maxStorageCapacity: 1000 + unlimitedStorage: 0 + depositAll: 1 + depositAmountPerInteraction: 10 + interactionAnimationTrigger: Deposit + equipmentData: + socketName: RightHand + equipmentPrefab: {fileID: 0} + attachOnStart: 1 + detachOnEnd: 1 + depositEffectPrefab: {fileID: 0} + effectSpawnPoint: {fileID: 0} +--- !u!114 &945062474581833766 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8124290768227340041} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b59ae4328ce49c846b20d7a6d7ce7e47, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::Northbound.BuildingVisionProvider + ShowTopMostFoldoutHeaderGroup: 1 + visionRange: 15 --- !u!1001 &1876730568674182127 PrefabInstance: m_ObjectHideFlags: 0 diff --git a/Assets/Prefabs/Player.prefab b/Assets/Prefabs/Player.prefab index ebf547b..5ce18da 100644 --- a/Assets/Prefabs/Player.prefab +++ b/Assets/Prefabs/Player.prefab @@ -19,6 +19,7 @@ GameObject: - component: {fileID: 9062880697264624749} - component: {fileID: 6066313428661204362} - component: {fileID: 2443072964133329520} + - component: {fileID: 2148255267416253297} m_Layer: 0 m_Name: Player m_TagString: Untagged @@ -54,7 +55,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3} m_Name: m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.NetworkObject - GlobalObjectIdHash: 2891269852 + GlobalObjectIdHash: 4211758632 InScenePlacedSourceGlobalObjectIdHash: 4211758632 DeferredDespawnTick: 0 Ownership: 1 @@ -242,6 +243,20 @@ MonoBehaviour: m_EditorClassIdentifier: Assembly-CSharp::Northbound.PlayerResourceInventory ShowTopMostFoldoutHeaderGroup: 1 maxResourceCapacity: 50 +--- !u!114 &2148255267416253297 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1314983689436087486} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 81d070574968f0d45be51307e2dfed64, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::Northbound.PlayerVisionProvider + ShowTopMostFoldoutHeaderGroup: 1 + visionRange: 10 --- !u!1001 &1445453803682481668 PrefabInstance: m_ObjectHideFlags: 0 diff --git a/Assets/Prefabs/Wall.prefab b/Assets/Prefabs/Wall.prefab new file mode 100644 index 0000000..3b92bb4 --- /dev/null +++ b/Assets/Prefabs/Wall.prefab @@ -0,0 +1,125 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &2596063234185536339 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} + propertyPath: m_LocalScale.x + value: 2 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} + propertyPath: m_LocalScale.y + value: 2 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} + propertyPath: m_LocalScale.z + value: 2 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} + propertyPath: m_LocalPosition.x + value: -8 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} + propertyPath: m_LocalRotation.x + value: 0.000000021855694 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -7511558181221131132, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} + propertyPath: 'm_Materials.Array.data[0]' + value: + objectReference: {fileID: 2100000, guid: d64c307f1b4197c44970c29f9845c245, type: 2} + - target: {fileID: 919132149155446097, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} + propertyPath: m_Name + value: Wall + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} + insertIndex: -1 + addedObject: {fileID: 1591641544412467547} + - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} + insertIndex: -1 + addedObject: {fileID: 1638952835164862066} + m_SourcePrefab: {fileID: 100100000, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} +--- !u!1 &2938167817760513538 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} + m_PrefabInstance: {fileID: 2596063234185536339} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1591641544412467547 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2938167817760513538} + 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: 3026494903 + 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 &1638952835164862066 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2938167817760513538} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b59ae4328ce49c846b20d7a6d7ce7e47, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::Northbound.BuildingVisionProvider + ShowTopMostFoldoutHeaderGroup: 1 + visionRange: 15 diff --git a/Assets/Prefabs/Wall.prefab.meta b/Assets/Prefabs/Wall.prefab.meta new file mode 100644 index 0000000..7f844e2 --- /dev/null +++ b/Assets/Prefabs/Wall.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 04e95700704d92248b63ce5674bd9638 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/GameMain.unity b/Assets/Scenes/GameMain.unity index afc5a99..602e725 100644 --- a/Assets/Scenes/GameMain.unity +++ b/Assets/Scenes/GameMain.unity @@ -305,7 +305,7 @@ MonoBehaviour: m_EffectColor: {r: 0, g: 0, b: 0, a: 0.5} m_EffectDistance: {x: 1, y: -1} m_UseGraphicAlpha: 1 ---- !u!1001 &378823424 +--- !u!1001 &324420007 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 @@ -313,144 +313,68 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 1068750869} m_Modifications: - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalScale.x - value: 2 + - target: {fileID: 1591641544412467547, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: GlobalObjectIdHash + value: 2015005341 objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalScale.y - value: 2 + - target: {fileID: 1591641544412467547, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: InScenePlacedSourceGlobalObjectIdHash + value: 2718147317 objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalScale.z - value: 2 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} propertyPath: m_LocalPosition.x - value: 8 + value: -18.5 objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: -7511558181221131132, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: 'm_Materials.Array.data[0]' - value: - objectReference: {fileID: 2100000, guid: d64c307f1b4197c44970c29f9845c245, type: 2} - - target: {fileID: 919132149155446097, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} + - target: {fileID: 2938167817760513538, guid: 04e95700704d92248b63ce5674bd9638, type: 3} propertyPath: m_Name - value: Wall (2) + value: Wall (1) objectReference: {fileID: 0} m_RemovedComponents: [] m_RemovedGameObjects: [] m_AddedGameObjects: [] m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} ---- !u!1001 &383372408 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 1068750869} - m_Modifications: - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalScale.x - value: 2 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalScale.y - value: 2 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalScale.z - value: 2 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalPosition.x - value: 16 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalRotation.x - value: 0.000000021855694 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -7511558181221131132, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: 'm_Materials.Array.data[0]' - value: - objectReference: {fileID: 2100000, guid: d64c307f1b4197c44970c29f9845c245, type: 2} - - target: {fileID: 919132149155446097, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_Name - value: Wall (3) - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} + m_SourcePrefab: {fileID: 100100000, guid: 04e95700704d92248b63ce5674bd9638, type: 3} +--- !u!4 &324420008 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + m_PrefabInstance: {fileID: 324420007} + m_PrefabAsset: {fileID: 0} --- !u!1 &447015514 GameObject: m_ObjectHideFlags: 0 @@ -486,11 +410,6 @@ Transform: - {fileID: 2098115308} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &448767617 stripped -Transform: - m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - m_PrefabInstance: {fileID: 579997178} - m_PrefabAsset: {fileID: 0} --- !u!1 &457600242 GameObject: m_ObjectHideFlags: 0 @@ -794,152 +713,6 @@ MonoBehaviour: m_PostInfinity: 2 m_RotationOrder: 4 CustomBlends: {fileID: 0} ---- !u!1001 &579997178 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 1068750869} - m_Modifications: - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalScale.x - value: 2 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalScale.y - value: 2 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalScale.z - value: 2 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalPosition.x - value: -16 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalRotation.x - value: 0.000000021855694 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -7511558181221131132, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: 'm_Materials.Array.data[0]' - value: - objectReference: {fileID: 2100000, guid: d64c307f1b4197c44970c29f9845c245, type: 2} - - target: {fileID: 919132149155446097, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_Name - value: Wall (1) - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} ---- !u!1001 &588824321 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 1068750869} - m_Modifications: - - target: {fileID: -8679921383154817045, guid: b0ec490e44836ee4387c63d21980611c, type: 3} - propertyPath: m_LocalScale.x - value: 2 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: b0ec490e44836ee4387c63d21980611c, type: 3} - propertyPath: m_LocalScale.y - value: 2 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: b0ec490e44836ee4387c63d21980611c, type: 3} - propertyPath: m_LocalScale.z - value: 2 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: b0ec490e44836ee4387c63d21980611c, type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: b0ec490e44836ee4387c63d21980611c, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: b0ec490e44836ee4387c63d21980611c, type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: b0ec490e44836ee4387c63d21980611c, type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: b0ec490e44836ee4387c63d21980611c, type: 3} - propertyPath: m_LocalRotation.x - value: 0.000000021855694 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: b0ec490e44836ee4387c63d21980611c, type: 3} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: b0ec490e44836ee4387c63d21980611c, type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: b0ec490e44836ee4387c63d21980611c, type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: b0ec490e44836ee4387c63d21980611c, type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: b0ec490e44836ee4387c63d21980611c, type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -7511558181221131132, guid: b0ec490e44836ee4387c63d21980611c, type: 3} - propertyPath: 'm_Materials.Array.data[0]' - value: - objectReference: {fileID: 2100000, guid: d64c307f1b4197c44970c29f9845c245, type: 2} - - target: {fileID: 919132149155446097, guid: b0ec490e44836ee4387c63d21980611c, type: 3} - propertyPath: m_Name - value: Wall_Doorway - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: b0ec490e44836ee4387c63d21980611c, type: 3} --- !u!1001 &629469723 PrefabInstance: m_ObjectHideFlags: 0 @@ -1014,6 +787,76 @@ Transform: m_CorrespondingSourceObject: {fileID: 922888705413710451, guid: 5662d0b0d0eb5f54290edd8dd0980b57, type: 3} m_PrefabInstance: {fileID: 629469723} m_PrefabAsset: {fileID: 0} +--- !u!1001 &635112512 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1068750869} + m_Modifications: + - target: {fileID: 1591641544412467547, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: GlobalObjectIdHash + value: 3733343362 + objectReference: {fileID: 0} + - target: {fileID: 1591641544412467547, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: InScenePlacedSourceGlobalObjectIdHash + value: 2718147317 + objectReference: {fileID: 0} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_LocalPosition.x + value: 11 + objectReference: {fileID: 0} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_LocalRotation.x + value: 0.000000021855694 + objectReference: {fileID: 0} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2938167817760513538, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_Name + value: Wall (3) + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 04e95700704d92248b63ce5674bd9638, type: 3} +--- !u!4 &635112513 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + m_PrefabInstance: {fileID: 635112512} + m_PrefabAsset: {fileID: 0} --- !u!1 &782070680 GameObject: m_ObjectHideFlags: 0 @@ -1141,11 +984,6 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} ---- !u!4 &788941389 stripped -Transform: - m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - m_PrefabInstance: {fileID: 383372408} - m_PrefabAsset: {fileID: 0} --- !u!1 &908127335 GameObject: m_ObjectHideFlags: 0 @@ -1283,6 +1121,82 @@ RectTransform: m_AnchoredPosition: {x: 160, y: -70} m_SizeDelta: {x: 300, y: 40} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &946527916 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 946527919} + - component: {fileID: 946527917} + - component: {fileID: 946527918} + m_Layer: 0 + m_Name: FogOfWarSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &946527917 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 946527916} + 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: 4164509128 + 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 &946527918 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 946527916} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9e73da29c7794e445a17b7d28a61cdb3, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::Northbound.FogOfWarSystem + ShowTopMostFoldoutHeaderGroup: 1 + gridWidth: 100 + gridHeight: 1000 + cellSize: 1 + worldOrigin: {x: -50, y: 0, z: -200} + updateInterval: 0.2 +--- !u!4 &946527919 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 946527916} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 5, z: -50} + 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 &955933983 GameObject: m_ObjectHideFlags: 0 @@ -1462,17 +1376,11 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1685319252} - - {fileID: 1313237195} - - {fileID: 788941389} - - {fileID: 448767617} - - {fileID: 1113397316} + - {fileID: 324420008} + - {fileID: 1457864236} + - {fileID: 635112513} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1113397316 stripped -Transform: - m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: b0ec490e44836ee4387c63d21980611c, type: 3} - m_PrefabInstance: {fileID: 588824321} - m_PrefabAsset: {fileID: 0} --- !u!1 &1142746332 GameObject: m_ObjectHideFlags: 0 @@ -1673,11 +1581,6 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &1313237195 stripped -Transform: - m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - m_PrefabInstance: {fileID: 378823424} - m_PrefabAsset: {fileID: 0} --- !u!1 &1433142230 GameObject: m_ObjectHideFlags: 0 @@ -1800,6 +1703,76 @@ MonoBehaviour: spawnPoints: [] useRandomSpawn: 0 findSpawnPointsAutomatically: 1 +--- !u!1001 &1457864235 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1068750869} + m_Modifications: + - target: {fileID: 1591641544412467547, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: GlobalObjectIdHash + value: 1548053960 + objectReference: {fileID: 0} + - target: {fileID: 1591641544412467547, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: InScenePlacedSourceGlobalObjectIdHash + value: 2718147317 + objectReference: {fileID: 0} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_LocalPosition.x + value: -29.3 + objectReference: {fileID: 0} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_LocalRotation.x + value: 0.000000021855694 + objectReference: {fileID: 0} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2938167817760513538, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_Name + value: Wall (2) + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 04e95700704d92248b63ce5674bd9638, type: 3} +--- !u!4 &1457864236 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + m_PrefabInstance: {fileID: 1457864235} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1536695129 PrefabInstance: m_ObjectHideFlags: 0 @@ -1971,82 +1944,118 @@ MonoBehaviour: BlendHint: 0 --- !u!4 &1685319252 stripped Transform: - m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - m_PrefabInstance: {fileID: 1880237668} + m_CorrespondingSourceObject: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + m_PrefabInstance: {fileID: 6880333684802239182} m_PrefabAsset: {fileID: 0} ---- !u!1001 &1880237668 -PrefabInstance: +--- !u!1 &1701756764 +GameObject: m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1701756768} + - component: {fileID: 1701756767} + - component: {fileID: 1701756766} + - component: {fileID: 1701756765} + m_Layer: 0 + m_Name: FogOfWarOverlay + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1701756765 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1701756764} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a04555e5afcce6848ba5f06cf14a7f17, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::Northbound.FogOfWarRenderer + fogMaterial: {fileID: 2100000, guid: eb0604feb76547a488648224ebb23e77, type: 2} + updateInterval: 0.1 + fogHeight: 5 + unexploredColor: {r: 0, g: 0, b: 0, a: 1} + exploredColor: {r: 0, g: 0, b: 0, a: 0.6} + visibleColor: {r: 0, g: 0, b: 0, a: 0} +--- !u!23 &1701756766 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1701756764} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eb0604feb76547a488648224ebb23e77, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1701756767 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1701756764} + m_Mesh: {fileID: 0} +--- !u!4 &1701756768 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1701756764} serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 1068750869} - m_Modifications: - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalScale.x - value: 2 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalScale.y - value: 2 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalScale.z - value: 2 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalPosition.x - value: -8 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalRotation.x - value: 0.000000021855694 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -7511558181221131132, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: 'm_Materials.Array.data[0]' - value: - objectReference: {fileID: 2100000, guid: d64c307f1b4197c44970c29f9845c245, type: 2} - - target: {fileID: 919132149155446097, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} - propertyPath: m_Name - value: Wall - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 244a8d70d41b1a948beb2221c7c0efa9, type: 3} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.16227, y: 1.00001, z: -48.21116} + 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!1001 &1975225896 PrefabInstance: m_ObjectHideFlags: 0 @@ -2270,6 +2279,18 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: + - target: {fileID: 945062474581833766, guid: e56926eda34629f4fbf3e4c53f0f8bd4, type: 3} + propertyPath: visionRange + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 5173262576415873253, guid: e56926eda34629f4fbf3e4c53f0f8bd4, type: 3} + propertyPath: GlobalObjectIdHash + value: 3998537868 + objectReference: {fileID: 0} + - target: {fileID: 5173262576415873253, guid: e56926eda34629f4fbf3e4c53f0f8bd4, type: 3} + propertyPath: InScenePlacedSourceGlobalObjectIdHash + value: 615747208 + objectReference: {fileID: 0} - target: {fileID: 8064559726283331702, guid: e56926eda34629f4fbf3e4c53f0f8bd4, type: 3} propertyPath: m_LocalPosition.x value: 0 @@ -2317,13 +2338,7 @@ PrefabInstance: m_RemovedComponents: [] m_RemovedGameObjects: [] m_AddedGameObjects: [] - m_AddedComponents: - - targetCorrespondingSourceObject: {fileID: 8124290768227340041, guid: e56926eda34629f4fbf3e4c53f0f8bd4, type: 3} - insertIndex: -1 - addedObject: {fileID: 8940572951313384065} - - targetCorrespondingSourceObject: {fileID: 8124290768227340041, guid: e56926eda34629f4fbf3e4c53f0f8bd4, type: 3} - insertIndex: -1 - addedObject: {fileID: 8940572951313384066} + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e56926eda34629f4fbf3e4c53f0f8bd4, type: 3} --- !u!1001 &4875211098963642791 PrefabInstance: @@ -2386,61 +2401,82 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f395fcc064a3a834ba957327f1387c19, type: 3} ---- !u!1 &8940572951313384064 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 8124290768227340041, guid: e56926eda34629f4fbf3e4c53f0f8bd4, type: 3} +--- !u!1001 &6880333684802239182 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1068750869} + m_Modifications: + - target: {fileID: 1591641544412467547, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: GlobalObjectIdHash + value: 2997679665 + objectReference: {fileID: 0} + - target: {fileID: 1591641544412467547, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: InScenePlacedSourceGlobalObjectIdHash + value: 2718147317 + objectReference: {fileID: 0} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_LocalPosition.x + value: -8 + objectReference: {fileID: 0} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_LocalRotation.x + value: 0.000000021855694 + objectReference: {fileID: 0} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2561889291515577528, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2938167817760513538, guid: 04e95700704d92248b63ce5674bd9638, type: 3} + propertyPath: m_Name + value: Wall + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 04e95700704d92248b63ce5674bd9638, type: 3} +--- !u!114 &8940572951313384066 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 1287070985890992582, guid: e56926eda34629f4fbf3e4c53f0f8bd4, type: 3} m_PrefabInstance: {fileID: 4786254629656932894} m_PrefabAsset: {fileID: 0} ---- !u!114 &8940572951313384065 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8940572951313384064} - 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: 1288120633 - 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 &8940572951313384066 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8940572951313384064} + m_GameObject: {fileID: 0} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 7c94274e2af2c8d4f827fe52b26c4410, type: 3} m_Name: m_EditorClassIdentifier: Assembly-CSharp::Northbound.Core - ShowTopMostFoldoutHeaderGroup: 1 - maxStorageCapacity: 1000 - unlimitedStorage: 0 - depositAll: 1 - depositAmountPerInteraction: 10 - interactionAnimationTrigger: Deposit - equipmentData: - socketName: RightHand - equipmentPrefab: {fileID: 0} - attachOnStart: 1 - detachOnEnd: 1 - depositEffectPrefab: {fileID: 0} - effectSpawnPoint: {fileID: 0} --- !u!1660057539 &9223372036854775807 SceneRoots: m_ObjectHideFlags: 0 @@ -2458,3 +2494,5 @@ SceneRoots: - {fileID: 955933985} - {fileID: 457600247} - {fileID: 1166878644} + - {fileID: 946527919} + - {fileID: 1701756768} diff --git a/Assets/Scripts/BuildingVisionProvider.cs b/Assets/Scripts/BuildingVisionProvider.cs new file mode 100644 index 0000000..32d0de2 --- /dev/null +++ b/Assets/Scripts/BuildingVisionProvider.cs @@ -0,0 +1,48 @@ +using Unity.Netcode; +using UnityEngine; + +namespace Northbound +{ + /// + /// 건물의 시야 제공 컴포넌트 + /// + public class BuildingVisionProvider : NetworkBehaviour, IVisionProvider + { + [Header("Vision Settings")] + public float visionRange = 15f; + + private Building _building; + + private void Awake() + { + _building = GetComponent(); + } + + public override void OnNetworkSpawn() + { + if (IsServer) + { + FogOfWarSystem.Instance?.RegisterVisionProvider(this); + } + } + + public override void OnNetworkDespawn() + { + if (IsServer) + { + FogOfWarSystem.Instance?.UnregisterVisionProvider(this); + } + } + + public ulong GetOwnerId() => OwnerClientId; + public float GetVisionRange() => visionRange; + public Transform GetTransform() => transform; + public bool IsActive() => IsSpawned; + + private void OnDrawGizmosSelected() + { + Gizmos.color = Color.cyan; + Gizmos.DrawWireSphere(transform.position, visionRange); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/BuildingVisionProvider.cs.meta b/Assets/Scripts/BuildingVisionProvider.cs.meta new file mode 100644 index 0000000..651619d --- /dev/null +++ b/Assets/Scripts/BuildingVisionProvider.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: b59ae4328ce49c846b20d7a6d7ce7e47 \ No newline at end of file diff --git a/Assets/Scripts/FogOfWarRenderer.cs b/Assets/Scripts/FogOfWarRenderer.cs new file mode 100644 index 0000000..b642550 --- /dev/null +++ b/Assets/Scripts/FogOfWarRenderer.cs @@ -0,0 +1,186 @@ +using Unity.Netcode; +using UnityEngine; + +namespace Northbound +{ + /// + /// 전장의 안개 시각적 렌더링 (클라이언트) + /// + [RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))] + public class FogOfWarRenderer : MonoBehaviour + { + [Header("Settings")] + public Material fogMaterial; + public float updateInterval = 0.1f; + public float fogHeight = 5f; // 안개 높이 (지형보다 약간 위) + + [Header("Colors")] + public Color unexploredColor = new Color(0, 0, 0, 1f); // 완전히 어두움 + public Color exploredColor = new Color(0, 0, 0, 0.6f); // 반투명 + public Color visibleColor = new Color(0, 0, 0, 0f); // 투명 + + private Texture2D _fogTexture; + private Color[] _colors; + private MeshRenderer _meshRenderer; + private float _updateTimer; + private ulong _localClientId; + private bool _isInitialized; + + private void Start() + { + // NetworkManager 준비 대기 + if (NetworkManager.Singleton == null || !NetworkManager.Singleton.IsClient) + { + Debug.LogWarning("[FogOfWar] NetworkManager가 준비되지 않았습니다. 대기 중..."); + return; + } + + Initialize(); + } + + private void Initialize() + { + if (_isInitialized) return; + + _localClientId = NetworkManager.Singleton.LocalClientId; + + var fogSystem = FogOfWarSystem.Instance; + if (fogSystem == null) + { + Debug.LogError("[FogOfWar] FogOfWarSystem을 찾을 수 없습니다! 씬에 FogOfWarSystem GameObject가 있는지 확인하세요."); + return; + } + + // 텍스처 생성 + _fogTexture = new Texture2D(fogSystem.gridWidth, fogSystem.gridHeight) + { + filterMode = FilterMode.Bilinear, + wrapMode = TextureWrapMode.Clamp + }; + _colors = new Color[fogSystem.gridWidth * fogSystem.gridHeight]; + + // 초기 색상을 미탐색 상태로 설정 + for (int i = 0; i < _colors.Length; i++) + { + _colors[i] = unexploredColor; + } + _fogTexture.SetPixels(_colors); + _fogTexture.Apply(); + + // 머티리얼 설정 + _meshRenderer = GetComponent(); + if (fogMaterial != null) + { + Material instanceMaterial = new Material(fogMaterial); + instanceMaterial.mainTexture = _fogTexture; + _meshRenderer.material = instanceMaterial; + } + else + { + Debug.LogWarning("[FogOfWar] Fog Material이 설정되지 않았습니다!"); + } + + // 렌더링 레이어 설정 + gameObject.layer = LayerMask.NameToLayer("UI"); // 또는 별도 레이어 생성 + + // 메쉬 생성 + CreatePlaneMesh(fogSystem); + + _isInitialized = true; + Debug.Log($"[FogOfWar] 렌더러 초기화 완료 (Client {_localClientId})"); + } + + private void Update() + { + // NetworkManager가 준비되지 않았다면 초기화 시도 + if (!_isInitialized && NetworkManager.Singleton != null && NetworkManager.Singleton.IsClient) + { + Initialize(); + return; + } + + if (!_isInitialized) return; + + _updateTimer += Time.deltaTime; + if (_updateTimer >= updateInterval) + { + _updateTimer = 0f; + UpdateFogTexture(); + } + } + + private void UpdateFogTexture() + { + var fogSystem = FogOfWarSystem.Instance; + if (fogSystem == null) return; + + var fogData = fogSystem.GetPlayerFogData(_localClientId); + + for (int y = 0; y < fogSystem.gridHeight; y++) + { + for (int x = 0; x < fogSystem.gridWidth; x++) + { + FogOfWarState state = fogData.GetState(x, y); + int index = y * fogSystem.gridWidth + x; + + _colors[index] = state switch + { + FogOfWarState.Visible => visibleColor, + FogOfWarState.Explored => exploredColor, + FogOfWarState.Unexplored => unexploredColor, + _ => unexploredColor + }; + } + } + + _fogTexture.SetPixels(_colors); + _fogTexture.Apply(); + } + + private void CreatePlaneMesh(FogOfWarSystem fogSystem) + { + MeshFilter meshFilter = GetComponent(); + + float width = fogSystem.gridWidth * fogSystem.cellSize; + float height = fogSystem.gridHeight * fogSystem.cellSize; + + Mesh mesh = new Mesh + { + name = "FogOfWar Plane" + }; + + mesh.vertices = new Vector3[] + { + new Vector3(0, fogHeight, 0), + new Vector3(width, fogHeight, 0), + new Vector3(0, fogHeight, height), + new Vector3(width, fogHeight, height) + }; + + mesh.triangles = new int[] { 0, 2, 1, 2, 3, 1 }; + + mesh.uv = new Vector2[] + { + new Vector2(0, 0), + new Vector2(1, 0), + new Vector2(0, 1), + new Vector2(1, 1) + }; + + mesh.RecalculateNormals(); + + meshFilter.mesh = mesh; + transform.position = fogSystem.worldOrigin; + + Debug.Log($"[FogOfWar] Plane Mesh 생성 완료: {width}x{height} at {fogSystem.worldOrigin}"); + } + + private void OnDestroy() + { + if (_fogTexture != null) + { + Destroy(_fogTexture); + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/FogOfWarRenderer.cs.meta b/Assets/Scripts/FogOfWarRenderer.cs.meta new file mode 100644 index 0000000..d46af99 --- /dev/null +++ b/Assets/Scripts/FogOfWarRenderer.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: a04555e5afcce6848ba5f06cf14a7f17 \ No newline at end of file diff --git a/Assets/Scripts/FogOfWarSystem.cs b/Assets/Scripts/FogOfWarSystem.cs new file mode 100644 index 0000000..826859d --- /dev/null +++ b/Assets/Scripts/FogOfWarSystem.cs @@ -0,0 +1,397 @@ +using System.Collections.Generic; +using Unity.Netcode; +using UnityEngine; + +namespace Northbound +{ + /// + /// 전장의 안개 시스템 - 플레이어별 시야 관리 + /// + public class FogOfWarSystem : NetworkBehaviour + { + public static FogOfWarSystem Instance { get; private set; } + + [Header("Grid Settings")] + public int gridWidth = 100; + public int gridHeight = 100; + public float cellSize = 1f; + public Vector3 worldOrigin = Vector3.zero; + + [Header("Visibility Settings")] + public float updateInterval = 0.2f; + + // 서버: 각 플레이어별 가시성 맵 + private Dictionary _serverFogData = new Dictionary(); + + // 클라이언트: 로컬 플레이어의 가시성 맵 + private FogOfWarData _localFogData; + + private List _visionProviders = new List(); + private float _updateTimer; + + private void Awake() + { + if (Instance != null && Instance != this) + { + Destroy(gameObject); + return; + } + Instance = this; + } + + public override void OnNetworkSpawn() + { + base.OnNetworkSpawn(); + + if (IsClient && !IsServer) + { + // 클라이언트는 로컬 데이터 초기화 + _localFogData = new FogOfWarData(gridWidth, gridHeight); + Debug.Log($"[FogOfWar] 클라이언트 {NetworkManager.LocalClientId} 초기화"); + } + } + + private void Update() + { + if (!IsServer) return; + + _updateTimer += Time.deltaTime; + if (_updateTimer >= updateInterval) + { + _updateTimer = 0f; + UpdateAllVision(); + } + } + + /// + /// 시야 제공자 등록 (플레이어, 건물 등) + /// + public void RegisterVisionProvider(IVisionProvider provider) + { + if (!_visionProviders.Contains(provider)) + { + _visionProviders.Add(provider); + Debug.Log($"[FogOfWar] Vision Provider 등록: {provider.GetTransform().name} (Owner: {provider.GetOwnerId()})"); + } + } + + /// + /// 시야 제공자 등록 해제 + /// + public void UnregisterVisionProvider(IVisionProvider provider) + { + _visionProviders.Remove(provider); + } + + /// + /// 플레이어별 FogOfWar 데이터 가져오기 + /// + public FogOfWarData GetPlayerFogData(ulong clientId) + { + // 클라이언트는 자신의 로컬 데이터 반환 + if (IsClient && !IsServer) + { + return _localFogData; + } + + // 서버는 해당 클라이언트의 데이터 반환 + if (!_serverFogData.ContainsKey(clientId)) + { + _serverFogData[clientId] = new FogOfWarData(gridWidth, gridHeight); + } + return _serverFogData[clientId]; + } + + /// + /// 모든 시야 업데이트 (서버만) + /// + private void UpdateAllVision() + { + // 각 플레이어의 현재 시야 초기화 + foreach (var fogData in _serverFogData.Values) + { + fogData.ClearCurrentVision(); + } + + // 모든 시야 제공자의 시야 범위 계산 + foreach (var provider in _visionProviders) + { + if (provider == null || !provider.IsActive()) continue; + + ulong ownerId = provider.GetOwnerId(); + if (!_serverFogData.ContainsKey(ownerId)) + { + _serverFogData[ownerId] = new FogOfWarData(gridWidth, gridHeight); + } + + Vector3 position = provider.GetTransform().position; + float visionRange = provider.GetVisionRange(); + + RevealArea(ownerId, position, visionRange); + } + + // 각 클라이언트에게 시야 데이터 전송 + foreach (var kvp in _serverFogData) + { + ulong clientId = kvp.Key; + FogOfWarData fogData = kvp.Value; + + // 압축된 데이터로 전송 + byte[] visibleData = fogData.GetVisibleData(); + byte[] exploredData = fogData.GetExploredData(); + + SendFogDataToClientRpc(visibleData, exploredData, + new ClientRpcParams + { + Send = new ClientRpcSendParams + { + TargetClientIds = new ulong[] { clientId } + } + }); + } + } + + /// + /// 클라이언트에게 안개 데이터 전송 + /// + [ClientRpc] + private void SendFogDataToClientRpc(byte[] visibleData, byte[] exploredData, ClientRpcParams clientRpcParams = default) + { + if (_localFogData == null) + { + _localFogData = new FogOfWarData(gridWidth, gridHeight); + } + + _localFogData.SetVisibleData(visibleData); + _localFogData.SetExploredData(exploredData); + } + + /// + /// 특정 영역을 밝힘 (서버만) + /// + private void RevealArea(ulong clientId, Vector3 worldPosition, float radius) + { + FogOfWarData fogData = _serverFogData[clientId]; + Vector2Int gridPos = WorldToGrid(worldPosition); + + int cellRadius = Mathf.CeilToInt(radius / cellSize); + + for (int x = -cellRadius; x <= cellRadius; x++) + { + for (int y = -cellRadius; y <= cellRadius; y++) + { + if (x * x + y * y > cellRadius * cellRadius) continue; + + int gridX = gridPos.x + x; + int gridY = gridPos.y + y; + + if (gridX < 0 || gridX >= gridWidth || gridY < 0 || gridY >= gridHeight) + continue; + + // 현재 시야에 표시 + 방문한 적 있음으로 기록 + fogData.SetVisible(gridX, gridY, true); + fogData.SetExplored(gridX, gridY, true); + } + } + } + + /// + /// 월드 좌표를 그리드 좌표로 변환 + /// + public Vector2Int WorldToGrid(Vector3 worldPos) + { + Vector3 localPos = worldPos - worldOrigin; + int x = Mathf.FloorToInt(localPos.x / cellSize); + int z = Mathf.FloorToInt(localPos.z / cellSize); + return new Vector2Int(x, z); + } + + /// + /// 그리드 좌표를 월드 좌표로 변환 + /// + public Vector3 GridToWorld(int x, int y) + { + return worldOrigin + new Vector3(x * cellSize, 0, y * cellSize); + } + + /// + /// 특정 위치가 플레이어에게 보이는지 확인 + /// + public FogOfWarState GetVisibilityState(ulong clientId, Vector3 worldPosition) + { + FogOfWarData fogData = GetPlayerFogData(clientId); + if (fogData == null) + return FogOfWarState.Unexplored; + + Vector2Int gridPos = WorldToGrid(worldPosition); + return fogData.GetState(gridPos.x, gridPos.y); + } + + private void OnDrawGizmos() + { + // 그리드 시각화 + Gizmos.color = Color.yellow; + Vector3 size = new Vector3(gridWidth * cellSize, 0.1f, gridHeight * cellSize); + Gizmos.DrawWireCube(worldOrigin + size / 2f, size); + } + } + + /// + /// 플레이어별 안개 데이터 + /// + public class FogOfWarData + { + private bool[,] _explored; // 한번이라도 방문한 적이 있는가 + private bool[,] _currentlyVisible; // 현재 보이는가 + private int _width; + private int _height; + + public FogOfWarData(int width, int height) + { + _width = width; + _height = height; + _explored = new bool[width, height]; + _currentlyVisible = new bool[width, height]; + } + + public void SetExplored(int x, int y, bool value) + { + if (IsValidCoord(x, y)) + _explored[x, y] = value; + } + + public void SetVisible(int x, int y, bool value) + { + if (IsValidCoord(x, y)) + _currentlyVisible[x, y] = value; + } + + public void ClearCurrentVision() + { + System.Array.Clear(_currentlyVisible, 0, _currentlyVisible.Length); + } + + public FogOfWarState GetState(int x, int y) + { + if (!IsValidCoord(x, y)) + return FogOfWarState.Unexplored; + + if (_currentlyVisible[x, y]) + return FogOfWarState.Visible; + + if (_explored[x, y]) + return FogOfWarState.Explored; + + return FogOfWarState.Unexplored; + } + + private bool IsValidCoord(int x, int y) + { + return x >= 0 && x < _explored.GetLength(0) && + y >= 0 && y < _explored.GetLength(1); + } + + /// + /// Visible 데이터를 바이트 배열로 압축 + /// + public byte[] GetVisibleData() + { + int totalCells = _width * _height; + int byteCount = (totalCells + 7) / 8; // 8비트 = 1바이트 + byte[] data = new byte[byteCount]; + + for (int i = 0; i < totalCells; i++) + { + int x = i % _width; + int y = i / _width; + + if (_currentlyVisible[x, y]) + { + int byteIndex = i / 8; + int bitIndex = i % 8; + data[byteIndex] |= (byte)(1 << bitIndex); + } + } + + return data; + } + + /// + /// Explored 데이터를 바이트 배열로 압축 + /// + public byte[] GetExploredData() + { + int totalCells = _width * _height; + int byteCount = (totalCells + 7) / 8; + byte[] data = new byte[byteCount]; + + for (int i = 0; i < totalCells; i++) + { + int x = i % _width; + int y = i / _width; + + if (_explored[x, y]) + { + int byteIndex = i / 8; + int bitIndex = i % 8; + data[byteIndex] |= (byte)(1 << bitIndex); + } + } + + return data; + } + + /// + /// 바이트 배열에서 Visible 데이터 복원 + /// + public void SetVisibleData(byte[] data) + { + System.Array.Clear(_currentlyVisible, 0, _currentlyVisible.Length); + + int totalCells = _width * _height; + for (int i = 0; i < totalCells && i / 8 < data.Length; i++) + { + int byteIndex = i / 8; + int bitIndex = i % 8; + + bool isVisible = (data[byteIndex] & (1 << bitIndex)) != 0; + + int x = i % _width; + int y = i / _width; + _currentlyVisible[x, y] = isVisible; + } + } + + /// + /// 바이트 배열에서 Explored 데이터 복원 + /// + public void SetExploredData(byte[] data) + { + int totalCells = _width * _height; + for (int i = 0; i < totalCells && i / 8 < data.Length; i++) + { + int byteIndex = i / 8; + int bitIndex = i % 8; + + bool isExplored = (data[byteIndex] & (1 << bitIndex)) != 0; + + int x = i % _width; + int y = i / _width; + + // Explored는 누적 (한번 탐색하면 계속 유지) + if (isExplored) + _explored[x, y] = true; + } + } + } + + /// + /// 안개 상태 + /// + public enum FogOfWarState + { + Unexplored, // 방문한 적 없음 (완전히 어두움) + Explored, // 방문했지만 현재 시야 밖 (지형/건물만 보임) + Visible // 현재 시야 안 (모두 보임) + } +} \ No newline at end of file diff --git a/Assets/Scripts/FogOfWarSystem.cs.meta b/Assets/Scripts/FogOfWarSystem.cs.meta new file mode 100644 index 0000000..da8e4fd --- /dev/null +++ b/Assets/Scripts/FogOfWarSystem.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 9e73da29c7794e445a17b7d28a61cdb3 \ No newline at end of file diff --git a/Assets/Scripts/IVisionProvider.cs b/Assets/Scripts/IVisionProvider.cs new file mode 100644 index 0000000..a9ac83c --- /dev/null +++ b/Assets/Scripts/IVisionProvider.cs @@ -0,0 +1,30 @@ +using UnityEngine; + +namespace Northbound +{ + /// + /// 시야를 제공하는 객체 인터페이스 (플레이어, 건물 등) + /// + public interface IVisionProvider + { + /// + /// 소유자 클라이언트 ID + /// + ulong GetOwnerId(); + + /// + /// 시야 범위 + /// + float GetVisionRange(); + + /// + /// Transform + /// + Transform GetTransform(); + + /// + /// 현재 활성화 상태인지 + /// + bool IsActive(); + } +} \ No newline at end of file diff --git a/Assets/Scripts/IVisionProvider.cs.meta b/Assets/Scripts/IVisionProvider.cs.meta new file mode 100644 index 0000000..d411bb9 --- /dev/null +++ b/Assets/Scripts/IVisionProvider.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 2b23d5408ff532f49a541af63882a724 \ No newline at end of file diff --git a/Assets/Scripts/PlayerVisionProvider.cs b/Assets/Scripts/PlayerVisionProvider.cs new file mode 100644 index 0000000..72f5cdb --- /dev/null +++ b/Assets/Scripts/PlayerVisionProvider.cs @@ -0,0 +1,41 @@ +using Unity.Netcode; +using UnityEngine; + +namespace Northbound +{ + /// + /// 플레이어의 시야 제공 컴포넌트 + /// + public class PlayerVisionProvider : NetworkBehaviour, IVisionProvider + { + [Header("Vision Settings")] + public float visionRange = 10f; + + public override void OnNetworkSpawn() + { + if (IsServer) + { + FogOfWarSystem.Instance?.RegisterVisionProvider(this); + } + } + + public override void OnNetworkDespawn() + { + if (IsServer) + { + FogOfWarSystem.Instance?.UnregisterVisionProvider(this); + } + } + + public ulong GetOwnerId() => OwnerClientId; + public float GetVisionRange() => visionRange; + public Transform GetTransform() => transform; + public bool IsActive() => IsSpawned; + + private void OnDrawGizmosSelected() + { + Gizmos.color = Color.yellow; + Gizmos.DrawWireSphere(transform.position, visionRange); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/PlayerVisionProvider.cs.meta b/Assets/Scripts/PlayerVisionProvider.cs.meta new file mode 100644 index 0000000..c9b5cd9 --- /dev/null +++ b/Assets/Scripts/PlayerVisionProvider.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 81d070574968f0d45be51307e2dfed64 \ No newline at end of file diff --git a/Assets/Scripts/Resource.cs b/Assets/Scripts/Resource.cs index 38f9ad1..8eeb929 100644 --- a/Assets/Scripts/Resource.cs +++ b/Assets/Scripts/Resource.cs @@ -64,7 +64,7 @@ namespace Northbound int rechargeAmountToAdd = Mathf.Min(rechargeAmount, maxResources - _currentResources.Value); _currentResources.Value += rechargeAmountToAdd; - Debug.Log($"{resourceName} {rechargeAmountToAdd} 충전됨. 현재: {_currentResources.Value}/{maxResources}"); + // Debug.Log($"{resourceName} {rechargeAmountToAdd} 충전됨. 현재: {_currentResources.Value}/{maxResources}"); } _lastRechargeTime = Time.time; diff --git a/Assets/Shaders.meta b/Assets/Shaders.meta new file mode 100644 index 0000000..6828a86 --- /dev/null +++ b/Assets/Shaders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c8309f1a91f45bc4394594cdecabaa0c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Shaders/FogOfWar.shader b/Assets/Shaders/FogOfWar.shader new file mode 100644 index 0000000..7b40b14 --- /dev/null +++ b/Assets/Shaders/FogOfWar.shader @@ -0,0 +1,64 @@ +Shader "Custom/FogOfWar" +{ + Properties + { + _MainTex ("Fog Texture", 2D) = "white" {} + _FogColor ("Fog Color", Color) = (0,0,0,1) + _ExploredColor ("Explored Color", Color) = (0,0,0,0.5) + } + + SubShader + { + Tags + { + "Queue"="Transparent+100" + "RenderType"="Transparent" + "IgnoreProjector"="True" + } + + LOD 100 + Blend SrcAlpha OneMinusSrcAlpha + ZWrite Off + Cull Off + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + }; + + struct v2f + { + float2 uv : TEXCOORD0; + float4 vertex : SV_POSITION; + }; + + sampler2D _MainTex; + float4 _MainTex_ST; + fixed4 _FogColor; + fixed4 _ExploredColor; + + v2f vert (appdata v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + o.uv = TRANSFORM_TEX(v.uv, _MainTex); + return o; + } + + fixed4 frag (v2f i) : SV_Target + { + fixed4 col = tex2D(_MainTex, i.uv); + return col; + } + ENDCG + } + } +} \ No newline at end of file diff --git a/Assets/Shaders/FogOfWar.shader.meta b/Assets/Shaders/FogOfWar.shader.meta new file mode 100644 index 0000000..fe9b320 --- /dev/null +++ b/Assets/Shaders/FogOfWar.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1a32b22331996294f8eb2b7ac12d1c6b +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: