From 4bd46b2a0a7070f54261c090875c8292220a917a Mon Sep 17 00:00:00 2001 From: dal4segno Date: Wed, 4 Feb 2026 18:16:59 +0900 Subject: [PATCH] =?UTF-8?q?=EB=84=A4=ED=8A=B8=EC=9B=8C=ED=81=AC=20?= =?UTF-8?q?=EB=8F=99=EA=B8=B0=ED=99=94=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 몬스터와 크립에 네트워크 관련 컴포넌트가 없는 문제 수정 포탈/캠프와 몬스터/크립 간의 계층 구조 해제 - 네트워크 오브젝트끼리 계층 구조로 둘 수 없음 --- Assembly-CSharp.csproj | 2 + .../Monster/Monster102.asset | 2 +- .../Monster/Monster103.asset | 4 +- .../Monster/Monster104.asset | 2 +- .../Monster/Monster105.asset | 2 +- Assets/Data/Templates/CreepTemplate.prefab | 80 +++++ Assets/Data/Templates/MonsterTemplate.prefab | 82 ++++- Assets/Prefabs/Creep/Creep1.prefab | 149 ++++---- Assets/Prefabs/Monster/Monster101.prefab | 80 +++++ Assets/Prefabs/Monster/Monster102.prefab | 84 ++++- Assets/Prefabs/Monster/Monster103.prefab | 86 ++++- Assets/Prefabs/Monster/Monster104.prefab | 84 ++++- Assets/Prefabs/Monster/Monster105.prefab | 82 ++++- Assets/Scenes/GameMain.unity | 38 +- Assets/Scripts/CreepCamp.cs | 4 +- Assets/Scripts/EnemyPortal.cs | 6 +- Assets/Scripts/FINAL_SOLUTION_KO.md | 334 ++++++++++++++++++ Assets/Scripts/FINAL_SOLUTION_KO.md.meta | 7 + Assets/Scripts/GlobalTimer.cs | 8 +- Assets/Scripts/MapGenerator.cs | 87 +---- Assets/Scripts/MonsterAnimationController.cs | 6 +- Assets/Scripts/NetworkConfigDebugger.cs | 67 ++++ Assets/Scripts/NetworkConfigDebugger.cs.meta | 2 + Assets/Scripts/SimpleNetworkMonitor.cs | 115 ++++++ Assets/Scripts/SimpleNetworkMonitor.cs.meta | 2 + 25 files changed, 1241 insertions(+), 174 deletions(-) create mode 100644 Assets/Scripts/FINAL_SOLUTION_KO.md create mode 100644 Assets/Scripts/FINAL_SOLUTION_KO.md.meta create mode 100644 Assets/Scripts/NetworkConfigDebugger.cs create mode 100644 Assets/Scripts/NetworkConfigDebugger.cs.meta create mode 100644 Assets/Scripts/SimpleNetworkMonitor.cs create mode 100644 Assets/Scripts/SimpleNetworkMonitor.cs.meta diff --git a/Assembly-CSharp.csproj b/Assembly-CSharp.csproj index e1f26f3..2ab63a5 100644 --- a/Assembly-CSharp.csproj +++ b/Assembly-CSharp.csproj @@ -80,6 +80,7 @@ + @@ -117,6 +118,7 @@ + diff --git a/Assets/Data/ScriptableObjects/Monster/Monster102.asset b/Assets/Data/ScriptableObjects/Monster/Monster102.asset index 5aa0417..06c1f8c 100644 --- a/Assets/Data/ScriptableObjects/Monster/Monster102.asset +++ b/Assets/Data/ScriptableObjects/Monster/Monster102.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: Assembly-CSharp::Northbound.Data.MonsterData id: 102 memo: "Fast(\uBE60\uB984/\uC57D\uD568)" - moveSpeed: 13 + moveSpeed: 11 maxHp: 30 atkRange: 1 atkDamage: 2 diff --git a/Assets/Data/ScriptableObjects/Monster/Monster103.asset b/Assets/Data/ScriptableObjects/Monster/Monster103.asset index 3f4b6d8..d726f80 100644 --- a/Assets/Data/ScriptableObjects/Monster/Monster103.asset +++ b/Assets/Data/ScriptableObjects/Monster/Monster103.asset @@ -14,8 +14,8 @@ MonoBehaviour: m_EditorClassIdentifier: Assembly-CSharp::Northbound.Data.MonsterData id: 103 memo: "Tank(\uB290\uB9BC/\uB2E8\uB2E8)" - moveSpeed: 5 - maxHp: 150 + moveSpeed: 8 + maxHp: 100 atkRange: 1 atkDamage: 4 atkIntervalSec: 1.5 diff --git a/Assets/Data/ScriptableObjects/Monster/Monster104.asset b/Assets/Data/ScriptableObjects/Monster/Monster104.asset index f0a10e7..bdc5ec9 100644 --- a/Assets/Data/ScriptableObjects/Monster/Monster104.asset +++ b/Assets/Data/ScriptableObjects/Monster/Monster104.asset @@ -14,7 +14,7 @@ MonoBehaviour: m_EditorClassIdentifier: Assembly-CSharp::Northbound.Data.MonsterData id: 104 memo: "Ranged(\uC6D0\uAC70\uB9AC/\uC57D\uD568)" - moveSpeed: 8 + moveSpeed: 9 maxHp: 40 atkRange: 5 atkDamage: 2 diff --git a/Assets/Data/ScriptableObjects/Monster/Monster105.asset b/Assets/Data/ScriptableObjects/Monster/Monster105.asset index 09f0cf4..c1d7499 100644 --- a/Assets/Data/ScriptableObjects/Monster/Monster105.asset +++ b/Assets/Data/ScriptableObjects/Monster/Monster105.asset @@ -15,7 +15,7 @@ MonoBehaviour: id: 105 memo: "Elite(\uC18C\uC218 \uC815\uC608)" moveSpeed: 10 - maxHp: 130 + maxHp: 90 atkRange: 1 atkDamage: 7 atkIntervalSec: 1.3 diff --git a/Assets/Data/Templates/CreepTemplate.prefab b/Assets/Data/Templates/CreepTemplate.prefab index 1af54cf..499275f 100644 --- a/Assets/Data/Templates/CreepTemplate.prefab +++ b/Assets/Data/Templates/CreepTemplate.prefab @@ -17,6 +17,8 @@ GameObject: - component: {fileID: 6023907831447366429} - component: {fileID: 8728041163683826261} - component: {fileID: 3928237758911375249} + - component: {fileID: -2284084906141577046} + - component: {fileID: -8703503294977252669} m_Layer: 11 m_Name: CreepTemplate m_TagString: Untagged @@ -210,3 +212,81 @@ MonoBehaviour: m_EditorClassIdentifier: Assembly-CSharp::Northbound.CreepDataComponent creepData: {fileID: 0} autoApplyOnAwake: 1 +--- !u!114 &-2284084906141577046 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3810918154428190126} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e8d0727d5ae3244e3b569694d3912374, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.Components.NetworkAnimator + ShowTopMostFoldoutHeaderGroup: 1 + NetworkAnimatorExpanded: 0 + AuthorityMode: 0 + m_Animator: {fileID: 6023907831447366429} + TransitionStateInfoList: [] + AnimatorParameterEntries: + ParameterEntries: + - name: IsMoving + NameHash: 120489994 + Synchronize: 1 + ParameterType: 4 + - name: Attack + NameHash: 1080829965 + Synchronize: 1 + ParameterType: 9 + - name: Speed + NameHash: -823668238 + Synchronize: 1 + ParameterType: 1 + AnimatorParametersExpanded: 0 +--- !u!114 &-8703503294977252669 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3810918154428190126} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.Components.NetworkTransform + ShowTopMostFoldoutHeaderGroup: 1 + NetworkTransformExpanded: 0 + AutoOwnerAuthorityTickOffset: 1 + PositionInterpolationType: 0 + RotationInterpolationType: 0 + ScaleInterpolationType: 0 + PositionLerpSmoothing: 1 + PositionMaxInterpolationTime: 0.1 + RotationLerpSmoothing: 1 + RotationMaxInterpolationTime: 0.1 + ScaleLerpSmoothing: 1 + ScaleMaxInterpolationTime: 0.1 + AuthorityMode: 0 + TickSyncChildren: 0 + UseUnreliableDeltas: 0 + SyncPositionX: 1 + SyncPositionY: 1 + SyncPositionZ: 1 + SyncRotAngleX: 1 + SyncRotAngleY: 1 + SyncRotAngleZ: 1 + SyncScaleX: 1 + SyncScaleY: 1 + SyncScaleZ: 1 + PositionThreshold: 0.001 + RotAngleThreshold: 0.01 + ScaleThreshold: 0.01 + UseQuaternionSynchronization: 0 + UseQuaternionCompression: 0 + UseHalfFloatPrecision: 0 + InLocalSpace: 0 + SwitchTransformSpaceWhenParented: 0 + Interpolate: 1 + SlerpPosition: 0 diff --git a/Assets/Data/Templates/MonsterTemplate.prefab b/Assets/Data/Templates/MonsterTemplate.prefab index dba11ba..3c009ec 100644 --- a/Assets/Data/Templates/MonsterTemplate.prefab +++ b/Assets/Data/Templates/MonsterTemplate.prefab @@ -17,6 +17,8 @@ GameObject: - component: {fileID: 3710510283885710978} - component: {fileID: 6023907831447366429} - component: {fileID: 8728041163683826261} + - component: {fileID: 502360995489719830} + - component: {fileID: -6991373811087161316} m_Layer: 11 m_Name: MonsterTemplate m_TagString: Untagged @@ -81,7 +83,7 @@ MonoBehaviour: AlwaysReplicateAsRoot: 0 SynchronizeTransform: 1 ActiveSceneSynchronization: 0 - SceneMigrationSynchronization: 0 + SceneMigrationSynchronization: 1 SpawnWithObservers: 1 DontDestroyWithOwner: 0 AutoObjectParentSync: 1 @@ -210,3 +212,81 @@ MonoBehaviour: isMovingParam: IsMoving autoLoadFromMonsterData: 1 debugLogging: 0 +--- !u!114 &502360995489719830 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3810918154428190126} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e8d0727d5ae3244e3b569694d3912374, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.Components.NetworkAnimator + ShowTopMostFoldoutHeaderGroup: 1 + NetworkAnimatorExpanded: 0 + AuthorityMode: 0 + m_Animator: {fileID: 6023907831447366429} + TransitionStateInfoList: [] + AnimatorParameterEntries: + ParameterEntries: + - name: IsMoving + NameHash: 120489994 + Synchronize: 1 + ParameterType: 4 + - name: Attack + NameHash: 1080829965 + Synchronize: 1 + ParameterType: 9 + - name: Speed + NameHash: -823668238 + Synchronize: 1 + ParameterType: 1 + AnimatorParametersExpanded: 0 +--- !u!114 &-6991373811087161316 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3810918154428190126} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.Components.NetworkTransform + ShowTopMostFoldoutHeaderGroup: 1 + NetworkTransformExpanded: 0 + AutoOwnerAuthorityTickOffset: 1 + PositionInterpolationType: 0 + RotationInterpolationType: 0 + ScaleInterpolationType: 0 + PositionLerpSmoothing: 1 + PositionMaxInterpolationTime: 0.1 + RotationLerpSmoothing: 1 + RotationMaxInterpolationTime: 0.1 + ScaleLerpSmoothing: 1 + ScaleMaxInterpolationTime: 0.1 + AuthorityMode: 0 + TickSyncChildren: 0 + UseUnreliableDeltas: 0 + SyncPositionX: 1 + SyncPositionY: 1 + SyncPositionZ: 1 + SyncRotAngleX: 1 + SyncRotAngleY: 1 + SyncRotAngleZ: 1 + SyncScaleX: 1 + SyncScaleY: 1 + SyncScaleZ: 1 + PositionThreshold: 0.001 + RotAngleThreshold: 0.01 + ScaleThreshold: 0.01 + UseQuaternionSynchronization: 0 + UseQuaternionCompression: 0 + UseHalfFloatPrecision: 0 + InLocalSpace: 0 + SwitchTransformSpaceWhenParented: 0 + Interpolate: 1 + SlerpPosition: 0 diff --git a/Assets/Prefabs/Creep/Creep1.prefab b/Assets/Prefabs/Creep/Creep1.prefab index a61c867..cc04cae 100644 --- a/Assets/Prefabs/Creep/Creep1.prefab +++ b/Assets/Prefabs/Creep/Creep1.prefab @@ -893,6 +893,8 @@ GameObject: - component: {fileID: 7284672060047320725} - component: {fileID: 250122487001659295} - component: {fileID: 286142144341486567} + - component: {fileID: 3244538489158729247} + - component: {fileID: 8403257879686285238} m_Layer: 11 m_Name: Creep1 m_TagString: Untagged @@ -951,7 +953,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3} m_Name: m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.NetworkObject - GlobalObjectIdHash: 415512315 + GlobalObjectIdHash: 437508337 InScenePlacedSourceGlobalObjectIdHash: 0 DeferredDespawnTick: 0 Ownership: 1 @@ -1018,7 +1020,7 @@ MonoBehaviour: ShowTopMostFoldoutHeaderGroup: 1 aiType: 2 detectionRange: 15 - detectionAngle: 120 + detectionAngle: 360 playerLayer: serializedVersion: 2 m_Bits: 640 @@ -1087,6 +1089,84 @@ MonoBehaviour: m_EditorClassIdentifier: Assembly-CSharp::Northbound.CreepDataComponent creepData: {fileID: 11400000, guid: 3d9df9cc2ed8c9e4394fa77bc21c47c6, type: 2} autoApplyOnAwake: 1 +--- !u!114 &3244538489158729247 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4538112939981844081} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e8d0727d5ae3244e3b569694d3912374, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.Components.NetworkAnimator + ShowTopMostFoldoutHeaderGroup: 1 + NetworkAnimatorExpanded: 0 + AuthorityMode: 0 + m_Animator: {fileID: 7284672060047320725} + TransitionStateInfoList: [] + AnimatorParameterEntries: + ParameterEntries: + - name: IsMoving + NameHash: 120489994 + Synchronize: 1 + ParameterType: 4 + - name: Attack + NameHash: 1080829965 + Synchronize: 1 + ParameterType: 9 + - name: Speed + NameHash: -823668238 + Synchronize: 1 + ParameterType: 1 + AnimatorParametersExpanded: 0 +--- !u!114 &8403257879686285238 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4538112939981844081} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.Components.NetworkTransform + ShowTopMostFoldoutHeaderGroup: 1 + NetworkTransformExpanded: 0 + AutoOwnerAuthorityTickOffset: 1 + PositionInterpolationType: 0 + RotationInterpolationType: 0 + ScaleInterpolationType: 0 + PositionLerpSmoothing: 1 + PositionMaxInterpolationTime: 0.1 + RotationLerpSmoothing: 1 + RotationMaxInterpolationTime: 0.1 + ScaleLerpSmoothing: 1 + ScaleMaxInterpolationTime: 0.1 + AuthorityMode: 0 + TickSyncChildren: 0 + UseUnreliableDeltas: 0 + SyncPositionX: 1 + SyncPositionY: 1 + SyncPositionZ: 1 + SyncRotAngleX: 1 + SyncRotAngleY: 1 + SyncRotAngleZ: 1 + SyncScaleX: 1 + SyncScaleY: 1 + SyncScaleZ: 1 + PositionThreshold: 0.001 + RotAngleThreshold: 0.01 + ScaleThreshold: 0.01 + UseQuaternionSynchronization: 0 + UseQuaternionCompression: 0 + UseHalfFloatPrecision: 0 + InLocalSpace: 0 + SwitchTransformSpaceWhenParented: 0 + Interpolate: 1 + SlerpPosition: 0 --- !u!1 &4827787360031545274 GameObject: m_ObjectHideFlags: 0 @@ -1778,8 +1858,7 @@ Transform: m_LocalPosition: {x: 5.2087756e-10, y: 0.096125245, z: -0.057499886} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 5114414950704533121} + m_Children: [] m_Father: {fileID: 4062086443240261109} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &8747750484294987188 @@ -1846,65 +1925,3 @@ Transform: - {fileID: 4062086443240261109} m_Father: {fileID: 2856184476308544689} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1001 &4715466935021447530 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 8423154880772228728} - m_Modifications: - - target: {fileID: -8679921383154817045, guid: ae56b484bc4355945bd90ed0f6359194, type: 3} - propertyPath: m_LocalPosition.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: ae56b484bc4355945bd90ed0f6359194, type: 3} - propertyPath: m_LocalPosition.y - value: 0.382 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: ae56b484bc4355945bd90ed0f6359194, type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: ae56b484bc4355945bd90ed0f6359194, type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: ae56b484bc4355945bd90ed0f6359194, type: 3} - propertyPath: m_LocalRotation.x - value: 0.00000008146034 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: ae56b484bc4355945bd90ed0f6359194, type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: ae56b484bc4355945bd90ed0f6359194, type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: ae56b484bc4355945bd90ed0f6359194, type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: ae56b484bc4355945bd90ed0f6359194, type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: ae56b484bc4355945bd90ed0f6359194, type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 919132149155446097, guid: ae56b484bc4355945bd90ed0f6359194, type: 3} - propertyPath: m_Name - value: scissors - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: ae56b484bc4355945bd90ed0f6359194, type: 3} ---- !u!4 &5114414950704533121 stripped -Transform: - m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: ae56b484bc4355945bd90ed0f6359194, type: 3} - m_PrefabInstance: {fileID: 4715466935021447530} - m_PrefabAsset: {fileID: 0} diff --git a/Assets/Prefabs/Monster/Monster101.prefab b/Assets/Prefabs/Monster/Monster101.prefab index 07b17c3..be5f220 100644 --- a/Assets/Prefabs/Monster/Monster101.prefab +++ b/Assets/Prefabs/Monster/Monster101.prefab @@ -1227,6 +1227,8 @@ GameObject: - component: {fileID: 2482720153194779286} - component: {fileID: 848186611138485392} - component: {fileID: 2122709709101229153} + - component: {fileID: 3030624664380987043} + - component: {fileID: 4732197089904823630} m_Layer: 11 m_Name: Monster101 m_TagString: Untagged @@ -1421,6 +1423,84 @@ MonoBehaviour: isMovingParam: IsMoving autoLoadFromMonsterData: 1 debugLogging: 0 +--- !u!114 &3030624664380987043 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7146441246397375875} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e8d0727d5ae3244e3b569694d3912374, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.Components.NetworkAnimator + ShowTopMostFoldoutHeaderGroup: 1 + NetworkAnimatorExpanded: 0 + AuthorityMode: 0 + m_Animator: {fileID: 848186611138485392} + TransitionStateInfoList: [] + AnimatorParameterEntries: + ParameterEntries: + - name: IsMoving + NameHash: 120489994 + Synchronize: 1 + ParameterType: 4 + - name: Attack + NameHash: 1080829965 + Synchronize: 1 + ParameterType: 9 + - name: Speed + NameHash: -823668238 + Synchronize: 1 + ParameterType: 1 + AnimatorParametersExpanded: 0 +--- !u!114 &4732197089904823630 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7146441246397375875} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.Components.NetworkTransform + ShowTopMostFoldoutHeaderGroup: 1 + NetworkTransformExpanded: 0 + AutoOwnerAuthorityTickOffset: 1 + PositionInterpolationType: 0 + RotationInterpolationType: 0 + ScaleInterpolationType: 0 + PositionLerpSmoothing: 1 + PositionMaxInterpolationTime: 0.1 + RotationLerpSmoothing: 1 + RotationMaxInterpolationTime: 0.1 + ScaleLerpSmoothing: 1 + ScaleMaxInterpolationTime: 0.1 + AuthorityMode: 0 + TickSyncChildren: 0 + UseUnreliableDeltas: 0 + SyncPositionX: 1 + SyncPositionY: 1 + SyncPositionZ: 1 + SyncRotAngleX: 1 + SyncRotAngleY: 1 + SyncRotAngleZ: 1 + SyncScaleX: 1 + SyncScaleY: 1 + SyncScaleZ: 1 + PositionThreshold: 0.001 + RotAngleThreshold: 0.01 + ScaleThreshold: 0.01 + UseQuaternionSynchronization: 0 + UseQuaternionCompression: 0 + UseHalfFloatPrecision: 0 + InLocalSpace: 0 + SwitchTransformSpaceWhenParented: 0 + Interpolate: 1 + SlerpPosition: 0 --- !u!1 &7413418609395265939 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Prefabs/Monster/Monster102.prefab b/Assets/Prefabs/Monster/Monster102.prefab index 22bb2cb..747c0fc 100644 --- a/Assets/Prefabs/Monster/Monster102.prefab +++ b/Assets/Prefabs/Monster/Monster102.prefab @@ -1651,6 +1651,8 @@ GameObject: - component: {fileID: 6540479212111277442} - component: {fileID: 4854545504403574706} - component: {fileID: 1645340600662394858} + - component: {fileID: 3608736889699243384} + - component: {fileID: 7711485244743381599} m_Layer: 11 m_Name: Monster102 m_TagString: Untagged @@ -1749,7 +1751,7 @@ NavMeshAgent: m_Enabled: 1 m_AgentTypeID: 0 m_Radius: 0.5 - m_Speed: 13 + m_Speed: 11 m_Acceleration: 8 avoidancePriority: 50 m_AngularSpeed: 120 @@ -1788,7 +1790,7 @@ MonoBehaviour: attackRange: 1 attackInterval: 1 attackDamage: 2 - moveSpeed: 13 + moveSpeed: 11 chaseSpeedMultiplier: 1.5 showDebugInfo: 1 --- !u!114 &6540479212111277442 @@ -1845,3 +1847,81 @@ MonoBehaviour: isMovingParam: IsMoving autoLoadFromMonsterData: 1 debugLogging: 0 +--- !u!114 &3608736889699243384 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9065146123892903723} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e8d0727d5ae3244e3b569694d3912374, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.Components.NetworkAnimator + ShowTopMostFoldoutHeaderGroup: 1 + NetworkAnimatorExpanded: 0 + AuthorityMode: 0 + m_Animator: {fileID: 4854545504403574706} + TransitionStateInfoList: [] + AnimatorParameterEntries: + ParameterEntries: + - name: IsMoving + NameHash: 120489994 + Synchronize: 1 + ParameterType: 4 + - name: Attack + NameHash: 1080829965 + Synchronize: 1 + ParameterType: 9 + - name: Speed + NameHash: -823668238 + Synchronize: 1 + ParameterType: 1 + AnimatorParametersExpanded: 0 +--- !u!114 &7711485244743381599 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9065146123892903723} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.Components.NetworkTransform + ShowTopMostFoldoutHeaderGroup: 1 + NetworkTransformExpanded: 0 + AutoOwnerAuthorityTickOffset: 1 + PositionInterpolationType: 0 + RotationInterpolationType: 0 + ScaleInterpolationType: 0 + PositionLerpSmoothing: 1 + PositionMaxInterpolationTime: 0.1 + RotationLerpSmoothing: 1 + RotationMaxInterpolationTime: 0.1 + ScaleLerpSmoothing: 1 + ScaleMaxInterpolationTime: 0.1 + AuthorityMode: 0 + TickSyncChildren: 0 + UseUnreliableDeltas: 0 + SyncPositionX: 1 + SyncPositionY: 1 + SyncPositionZ: 1 + SyncRotAngleX: 1 + SyncRotAngleY: 1 + SyncRotAngleZ: 1 + SyncScaleX: 1 + SyncScaleY: 1 + SyncScaleZ: 1 + PositionThreshold: 0.001 + RotAngleThreshold: 0.01 + ScaleThreshold: 0.01 + UseQuaternionSynchronization: 0 + UseQuaternionCompression: 0 + UseHalfFloatPrecision: 0 + InLocalSpace: 0 + SwitchTransformSpaceWhenParented: 0 + Interpolate: 1 + SlerpPosition: 0 diff --git a/Assets/Prefabs/Monster/Monster103.prefab b/Assets/Prefabs/Monster/Monster103.prefab index 74b21c2..0759146 100644 --- a/Assets/Prefabs/Monster/Monster103.prefab +++ b/Assets/Prefabs/Monster/Monster103.prefab @@ -573,6 +573,8 @@ GameObject: - component: {fileID: 8817410469440881478} - component: {fileID: 4622788731972862423} - component: {fileID: 7440244263211200161} + - component: {fileID: 1220060486488589814} + - component: {fileID: 6824363881054723903} m_Layer: 11 m_Name: Monster103 m_TagString: Untagged @@ -658,7 +660,7 @@ MonoBehaviour: m_EditorClassIdentifier: Assembly-CSharp::Northbound.EnemyUnit ShowTopMostFoldoutHeaderGroup: 1 enemyTeam: 3 - maxHealth: 150 + maxHealth: 100 damageEffectPrefab: {fileID: 0} destroyEffectPrefab: {fileID: 0} --- !u!195 &7475699343328683952 @@ -671,7 +673,7 @@ NavMeshAgent: m_Enabled: 1 m_AgentTypeID: 0 m_Radius: 0.5 - m_Speed: 5 + m_Speed: 8 m_Acceleration: 8 avoidancePriority: 50 m_AngularSpeed: 120 @@ -710,7 +712,7 @@ MonoBehaviour: attackRange: 1 attackInterval: 1.5 attackDamage: 4 - moveSpeed: 5 + moveSpeed: 8 chaseSpeedMultiplier: 1.5 showDebugInfo: 1 --- !u!114 &8817410469440881478 @@ -767,6 +769,84 @@ MonoBehaviour: isMovingParam: IsMoving autoLoadFromMonsterData: 1 debugLogging: 0 +--- !u!114 &1220060486488589814 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2347008446492047424} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e8d0727d5ae3244e3b569694d3912374, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.Components.NetworkAnimator + ShowTopMostFoldoutHeaderGroup: 1 + NetworkAnimatorExpanded: 0 + AuthorityMode: 0 + m_Animator: {fileID: 4622788731972862423} + TransitionStateInfoList: [] + AnimatorParameterEntries: + ParameterEntries: + - name: IsMoving + NameHash: 120489994 + Synchronize: 1 + ParameterType: 4 + - name: Attack + NameHash: 1080829965 + Synchronize: 1 + ParameterType: 9 + - name: Speed + NameHash: -823668238 + Synchronize: 1 + ParameterType: 1 + AnimatorParametersExpanded: 0 +--- !u!114 &6824363881054723903 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2347008446492047424} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.Components.NetworkTransform + ShowTopMostFoldoutHeaderGroup: 1 + NetworkTransformExpanded: 0 + AutoOwnerAuthorityTickOffset: 1 + PositionInterpolationType: 0 + RotationInterpolationType: 0 + ScaleInterpolationType: 0 + PositionLerpSmoothing: 1 + PositionMaxInterpolationTime: 0.1 + RotationLerpSmoothing: 1 + RotationMaxInterpolationTime: 0.1 + ScaleLerpSmoothing: 1 + ScaleMaxInterpolationTime: 0.1 + AuthorityMode: 0 + TickSyncChildren: 0 + UseUnreliableDeltas: 0 + SyncPositionX: 1 + SyncPositionY: 1 + SyncPositionZ: 1 + SyncRotAngleX: 1 + SyncRotAngleY: 1 + SyncRotAngleZ: 1 + SyncScaleX: 1 + SyncScaleY: 1 + SyncScaleZ: 1 + PositionThreshold: 0.001 + RotAngleThreshold: 0.01 + ScaleThreshold: 0.01 + UseQuaternionSynchronization: 0 + UseQuaternionCompression: 0 + UseHalfFloatPrecision: 0 + InLocalSpace: 0 + SwitchTransformSpaceWhenParented: 0 + Interpolate: 1 + SlerpPosition: 0 --- !u!1 &2539709484014259363 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Prefabs/Monster/Monster104.prefab b/Assets/Prefabs/Monster/Monster104.prefab index 6167473..a9c2593 100644 --- a/Assets/Prefabs/Monster/Monster104.prefab +++ b/Assets/Prefabs/Monster/Monster104.prefab @@ -1006,6 +1006,8 @@ GameObject: - component: {fileID: 177302896207380593} - component: {fileID: 1862252567762920688} - component: {fileID: 5911536058953673153} + - component: {fileID: 4108093490310817228} + - component: {fileID: 4766373245218749495} m_Layer: 11 m_Name: Monster104 m_TagString: Untagged @@ -1104,7 +1106,7 @@ NavMeshAgent: m_Enabled: 1 m_AgentTypeID: 0 m_Radius: 0.5 - m_Speed: 8 + m_Speed: 9 m_Acceleration: 8 avoidancePriority: 50 m_AngularSpeed: 120 @@ -1143,7 +1145,7 @@ MonoBehaviour: attackRange: 5 attackInterval: 1.4 attackDamage: 2 - moveSpeed: 8 + moveSpeed: 9 chaseSpeedMultiplier: 1.5 showDebugInfo: 1 --- !u!114 &177302896207380593 @@ -1200,6 +1202,84 @@ MonoBehaviour: isMovingParam: IsMoving autoLoadFromMonsterData: 1 debugLogging: 0 +--- !u!114 &4108093490310817228 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4973514444862586119} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e8d0727d5ae3244e3b569694d3912374, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.Components.NetworkAnimator + ShowTopMostFoldoutHeaderGroup: 1 + NetworkAnimatorExpanded: 0 + AuthorityMode: 0 + m_Animator: {fileID: 1862252567762920688} + TransitionStateInfoList: [] + AnimatorParameterEntries: + ParameterEntries: + - name: IsMoving + NameHash: 120489994 + Synchronize: 1 + ParameterType: 4 + - name: Attack + NameHash: 1080829965 + Synchronize: 1 + ParameterType: 9 + - name: Speed + NameHash: -823668238 + Synchronize: 1 + ParameterType: 1 + AnimatorParametersExpanded: 0 +--- !u!114 &4766373245218749495 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4973514444862586119} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.Components.NetworkTransform + ShowTopMostFoldoutHeaderGroup: 1 + NetworkTransformExpanded: 0 + AutoOwnerAuthorityTickOffset: 1 + PositionInterpolationType: 0 + RotationInterpolationType: 0 + ScaleInterpolationType: 0 + PositionLerpSmoothing: 1 + PositionMaxInterpolationTime: 0.1 + RotationLerpSmoothing: 1 + RotationMaxInterpolationTime: 0.1 + ScaleLerpSmoothing: 1 + ScaleMaxInterpolationTime: 0.1 + AuthorityMode: 0 + TickSyncChildren: 0 + UseUnreliableDeltas: 0 + SyncPositionX: 1 + SyncPositionY: 1 + SyncPositionZ: 1 + SyncRotAngleX: 1 + SyncRotAngleY: 1 + SyncRotAngleZ: 1 + SyncScaleX: 1 + SyncScaleY: 1 + SyncScaleZ: 1 + PositionThreshold: 0.001 + RotAngleThreshold: 0.01 + ScaleThreshold: 0.01 + UseQuaternionSynchronization: 0 + UseQuaternionCompression: 0 + UseHalfFloatPrecision: 0 + InLocalSpace: 0 + SwitchTransformSpaceWhenParented: 0 + Interpolate: 1 + SlerpPosition: 0 --- !u!1 &4997191723076249824 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Prefabs/Monster/Monster105.prefab b/Assets/Prefabs/Monster/Monster105.prefab index 733bc51..5831c5d 100644 --- a/Assets/Prefabs/Monster/Monster105.prefab +++ b/Assets/Prefabs/Monster/Monster105.prefab @@ -1251,6 +1251,8 @@ GameObject: - component: {fileID: 324484408599232274} - component: {fileID: 7080935390488809924} - component: {fileID: 2411439469101207928} + - component: {fileID: 5730991426544788936} + - component: {fileID: 8640017635750122272} m_Layer: 11 m_Name: Monster105 m_TagString: Untagged @@ -1336,7 +1338,7 @@ MonoBehaviour: m_EditorClassIdentifier: Assembly-CSharp::Northbound.EnemyUnit ShowTopMostFoldoutHeaderGroup: 1 enemyTeam: 3 - maxHealth: 130 + maxHealth: 90 damageEffectPrefab: {fileID: 0} destroyEffectPrefab: {fileID: 0} --- !u!195 &1255224548206942124 @@ -1445,6 +1447,84 @@ MonoBehaviour: isMovingParam: IsMoving autoLoadFromMonsterData: 1 debugLogging: 0 +--- !u!114 &5730991426544788936 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5710477988932221578} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e8d0727d5ae3244e3b569694d3912374, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.Components.NetworkAnimator + ShowTopMostFoldoutHeaderGroup: 1 + NetworkAnimatorExpanded: 0 + AuthorityMode: 0 + m_Animator: {fileID: 7080935390488809924} + TransitionStateInfoList: [] + AnimatorParameterEntries: + ParameterEntries: + - name: IsMoving + NameHash: 120489994 + Synchronize: 1 + ParameterType: 4 + - name: Attack + NameHash: 1080829965 + Synchronize: 1 + ParameterType: 9 + - name: Speed + NameHash: -823668238 + Synchronize: 1 + ParameterType: 1 + AnimatorParametersExpanded: 0 +--- !u!114 &8640017635750122272 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5710477988932221578} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.Components.NetworkTransform + ShowTopMostFoldoutHeaderGroup: 1 + NetworkTransformExpanded: 0 + AutoOwnerAuthorityTickOffset: 1 + PositionInterpolationType: 0 + RotationInterpolationType: 0 + ScaleInterpolationType: 0 + PositionLerpSmoothing: 1 + PositionMaxInterpolationTime: 0.1 + RotationLerpSmoothing: 1 + RotationMaxInterpolationTime: 0.1 + ScaleLerpSmoothing: 1 + ScaleMaxInterpolationTime: 0.1 + AuthorityMode: 0 + TickSyncChildren: 0 + UseUnreliableDeltas: 0 + SyncPositionX: 1 + SyncPositionY: 1 + SyncPositionZ: 1 + SyncRotAngleX: 1 + SyncRotAngleY: 1 + SyncRotAngleZ: 1 + SyncScaleX: 1 + SyncScaleY: 1 + SyncScaleZ: 1 + PositionThreshold: 0.001 + RotAngleThreshold: 0.01 + ScaleThreshold: 0.01 + UseQuaternionSynchronization: 0 + UseQuaternionCompression: 0 + UseHalfFloatPrecision: 0 + InLocalSpace: 0 + SwitchTransformSpaceWhenParented: 0 + Interpolate: 1 + SlerpPosition: 0 --- !u!1 &6071706308012469538 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scenes/GameMain.unity b/Assets/Scenes/GameMain.unity index d462488..ca352af 100644 --- a/Assets/Scenes/GameMain.unity +++ b/Assets/Scenes/GameMain.unity @@ -2829,6 +2829,8 @@ GameObject: - component: {fileID: 2053530247} - component: {fileID: 2053530249} - component: {fileID: 2053530250} + - component: {fileID: 2053530251} + - component: {fileID: 2053530252} m_Layer: 0 m_Name: NetworkTester m_TagString: Untagged @@ -2848,8 +2850,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 1d695616342b92d449295973fc4cda7e, type: 3} m_Name: m_EditorClassIdentifier: Assembly-CSharp::Northbound.NetworkManagerQuickTest - runTestOnStart: 1 - showDetailedLogs: 1 + runTestOnStart: 0 + showDetailedLogs: 0 --- !u!4 &2053530248 Transform: m_ObjectHideFlags: 0 @@ -2893,6 +2895,32 @@ MonoBehaviour: m_EditorClassIdentifier: Assembly-CSharp::Northbound.PortListenerTestSimultaneous testPort: 40445 autoStartOnEnable: 0 +--- !u!114 &2053530251 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2053530245} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 977685b2792b7684dbc782d410338a51, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::Northbound.SimpleNetworkMonitor + enableOnStart: 1 + checkInterval: 2 +--- !u!114 &2053530252 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2053530245} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8ab98e4f98fbe4e44a4a2f7cb8fe59ca, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::Northbound.NetworkConfigDebugger --- !u!1001 &2098115307 PrefabInstance: m_ObjectHideFlags: 0 @@ -3542,15 +3570,15 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2236804103334722056, guid: e56926eda34629f4fbf3e4c53f0f8bd4, type: 3} propertyPath: m_Size.x - value: 8 + value: 9 objectReference: {fileID: 0} - target: {fileID: 2236804103334722056, guid: e56926eda34629f4fbf3e4c53f0f8bd4, type: 3} propertyPath: m_Size.y - value: 8 + value: 9 objectReference: {fileID: 0} - target: {fileID: 2236804103334722056, guid: e56926eda34629f4fbf3e4c53f0f8bd4, type: 3} propertyPath: m_Size.z - value: 8 + value: 9 objectReference: {fileID: 0} - target: {fileID: 5173262576415873253, guid: e56926eda34629f4fbf3e4c53f0f8bd4, type: 3} propertyPath: GlobalObjectIdHash diff --git a/Assets/Scripts/CreepCamp.cs b/Assets/Scripts/CreepCamp.cs index 82b509e..38d097e 100644 --- a/Assets/Scripts/CreepCamp.cs +++ b/Assets/Scripts/CreepCamp.cs @@ -190,9 +190,7 @@ namespace Northbound networkObj = creep.AddComponent(); } - networkObj.Spawn(); - - creep.transform.SetParent(transform); + networkObj.SpawnWithOwnership(NetworkManager.Singleton.LocalClientId); } private void OnDrawGizmos() diff --git a/Assets/Scripts/EnemyPortal.cs b/Assets/Scripts/EnemyPortal.cs index b301a89..7870874 100644 --- a/Assets/Scripts/EnemyPortal.cs +++ b/Assets/Scripts/EnemyPortal.cs @@ -4,7 +4,7 @@ using System.Collections.Generic; using Unity.Netcode; using UnityEngine; -public class EnemyPortal : MonoBehaviour +public class EnemyPortal : NetworkBehaviour { [System.Serializable] public class MonsterEntry @@ -131,6 +131,8 @@ public class EnemyPortal : MonoBehaviour private void SpawnEnemy(GameObject prefab) { + if (!IsServer) return; + GameObject enemy = Instantiate(prefab, transform); if (enemy.GetComponent() == null) @@ -140,7 +142,7 @@ public class EnemyPortal : MonoBehaviour visibility.updateInterval = 0.2f; } - enemy.GetComponent().Spawn(); + enemy.GetComponent().SpawnWithOwnership(NetworkManager.Singleton.LocalClientId); } private void IncreaseCost() diff --git a/Assets/Scripts/FINAL_SOLUTION_KO.md b/Assets/Scripts/FINAL_SOLUTION_KO.md new file mode 100644 index 0000000..cba24b5 --- /dev/null +++ b/Assets/Scripts/FINAL_SOLUTION_KO.md @@ -0,0 +1,334 @@ +# 🎯 최종 진단 및 해결 가이드 + +## 📊 현재 상황 분석 + +### 성공한 사항 +- ✅ yougetsignal: 포트 4045 접근 가능 (외부에서 열림) +- ✅ 방화벽: 허용 (yougetsignal 성공으로 증명) +- ✅ OS 바인딩: 가능 (PortListenerTest 증명) +- ✅ NetworkManager: IsServer=True, IsHost=True +- ✅ Player Prefab: Player (할당됨) +- ✅ Unity Transport: 4045, 0.0.0.0 +- ✅ 모든 설정: 올바름 + +### 문제: 유니티 Netcode가 반복적으로 네트워크를 종료 +``` +상황: +- 게임 시작 → 호스트 시작됨 +- 잠시후 (1-30초) → 서버 종료됨 +- 포트 4045: 외부에서 닫힘 +- yougetsignal: "closed" +``` + +--- + +## 🔍 문제 원인 + +### 가장 흔한 가능성 1: AutoHost 간섭 +``` +AutoHost가 다음과 같은 행동: +- Start()에서 자동으로 StartHost() 호출 +- NetworkManager가 이미 실행 중이면 + → 다시 시도하거나 + → 무시하고 넘어감 +- 하지만 연결 승인 처리 중 오류가 발생하면 + → 자동으로 종료하거나 + → 포트가 닫힘 +``` + +**해결책:** +``` +씬에서 AutoHost 컴포넌트 제거 +또는 Enable Auto Host 체크 해제 +``` + +### 가장 흔한 가능성 2: NetworkConnectionHandler 승인 오류 +``` +NetworkConnectionHandler.ApprovalCheck()에서: +- 스폰 포인트 모두 찾았음 +- 하지만 승인: response.Approved = true +- response.CreatePlayerObject = false +- response.Position/Rotation 설정 + +이 상황에서: +- Netcode는 "수동 스폰으로 대기" 상태로 됨 +- 하지만 실제 플레이어 스폰하지 않음 (CreatePlayerObject=false) +- 연결 시간초과 또는 서버 측에서 종료 +``` + +**해결책:** +``` +NetworkConnectionHandler.ApprovalCheck() 수정: + +response.Approved = true; +response.CreatePlayerObject = false; +response.PlayerPrefabHash = 0; +response.Position = Vector3.zero; +response.Rotation = Quaternion.identity; + +↓ + +response.Approved = true; +response.CreatePlayerObject = true; // 스폰 생성! +response.PlayerPrefabHash = NetworkManager.Singleton.NetworkConfig.PlayerPrefab.GetComponent().GlobalObjectIdHash; +``` + +### 가능성 3: 다른 스크립트에서 Shutdown() 호출 +``` +AutoHost, 네트워크 관련 스크립트 등에서 +- 명시적이든 아니든 NetworkManager.Shutdown()를 호출 +- 연결 제대로 되지 않아도 호출됨 +``` + +**해결책:** +``` +- 모든 스크립트에서 Shutdown() 호출 제거 +- 또는 명시적인 조건문 추가 +``` + +### 가능성 4: 네트워크 이벤트에서 예외 발생 +``` +NetworkConnectionHandler의 다른 이벤트 핸들러에서 +- 예외가 발생해 NetworkManager.Shutdown() 트리거 +``` + +**해결책:** +``` +try-catch로 래핑 및 로깅 추가 +``` + +--- + +## ✅ 해결 단계 (순서대로 수행) + +### 1단계: AutoHost 제거 (가장 중요!) +``` +1. 씬에서 AutoHost 게임오브젝트 찾기 +2. 제거 (컴포넌트 우클릭 → Remove Component) +3. 또는 Enable Auto Host 체크 해제 +``` + +### 2단계: SimpleNetworkMonitor 추가 +``` +1. SimpleNetworkMonitor를 씬에 추가 +2. 플레이하여 5-10초간 관찰 +3. "Server stopped X times!" 메시지가 나오면 + → 이것이 문제 원인 확인! +``` + +### 3단계: 문제 원인 찾기 +``` +Monitor에서 다음을 확인: + +정상적인 경우: +- Server started (Count: 1) +- 그 후 중지 중단 없음 +- Server uptime: 계속 증가 + +불안정적인 경우 (현재 문제): +- Server started (Count: 1) +- Server stopped (Count: 1+) +- Server started (Count: 2+) +- Server stopped (Count: 2+) +- 짧은 업타임 (1-30초) +``` + +### 4단계: AutoHost가 원인인지 확인 +``` + +1. AutoHost 제거 후 테스트 +2. 호스트 시작 +3. Monitor 관찰 +4. 포트 열린 상태 확인 (yougetsignal) + +이것으로 해결되면: + → AutoHost가 문제였음! + +해결되지 않으면: + → 다른 원인 찾아야 함 +``` + +--- + +## 🎯 팀원과 테스트 방법 + +### 호스트 (당신) +``` +1. AutoHost 제거 +2. SimpleNetworkMonitor 추가 +3. 호스트 시작 +4. Monitor에서 "Server uptime" 관찰 +5. yougetsignal에서 포트 4045 확인 +6. 팀원에게 퍼블릭 IP 공유 +``` + +### 팀원 +``` +1. 에디터에서 클라이언트 모드 시작 +2. 당신의 퍼블릭 IP 입력: 4045 +3. "연결" 클릭 +4. 성공: 플레이어 스폰, 게임 시작! 🎉 +``` + +--- + +## 📊 예상 결과 + +### 성공한 경우 +``` +Monitor 로그: +[SimpleMonitor] Server started (Count: 1) +[SimpleMonitor] Server uptime: 10s, 20s, 30s... +[SimpleMonitor] Client connected: [팀원 ID] + +팀원: +- 접속 성공! +- 플레이어 스폰됨 +- 게임 시작 가능! + +yougetsignal: +- Port 4045: open +``` + +### 실패하는 경우 (현재) +``` +Monitor 로그: +[SimpleMonitor] Server started (Count: 1) +[SimpleMonitor] Server stopped (Count: 1, Uptime: 5s) +[SimpleMonitor] Server started (Count: 2) +[SimpleMonitor] Server stopped (Count: 2, Uptime: 8s) + +팀원: +- 접속 시도 +- "Failed to connect" 에러 +- 포트가 닫힘 있어서 실패 +``` + +--- + +## 🔧 필수 조치 + +### 1. AutoHost 제거 (즉시) +``` +AutoHost는 게임에 필요 없음 +- 네트워크 연결 UI를 사용하세요 +- NetworkConnectionHelper나 +- 또는 직접 NetworkManager.StartHost() +``` + +### 2. 설정 확인 +``` +NetworkManager → Network Config: + ✓ Player Prefab: Player + ✓ Connection Approval: 체크 + ✓ Enable Scene Management: 체크 + +Unity Transport: + ✓ Port: 4045 + ✓ Address: 0.0.0.0 + ✓ ServerListenAddress: 0.0.0.0 +``` + +### 3. 방화벽 확인 +``` +Windows 방화벽: +- 포트 4045 허용 +- Unity Editor 허용 +- 빌드 실행파일 허용 + +라우터: +- 포트 포워딩 구성됨 +``` + +--- + +## 📋 테스트 체크리스트 + +### 호스트 측 +- [ ] AutoHost 제거됨 +- [ ] SimpleNetworkMonitor 추가됨 +- [ ] 호스트 시작 성공 +- [ ] 서버 중지 없음 (최소 30초) +- [ ] Monitor: "Server uptime: 30s+" 표시 +- [ ] yougetsignal: "Port 4045 is open" + +### 팀원 측 +- [ ] 퍼블릭 IP 입력: 4045 +- [ ] "연결" 클릭 +- [ ] 접속 성공 +- [ ] 플레이어 스폰됨 +- [ ] 게임 시작 가능 + +--- + +## 🚀 다음 액션 + +### 지금 당장 할 것 +``` +1. AutoHost 제거 (씬에서 찾기 → Remove Component) +2. 플레이하여 10초간 관찰 +3. Monitor 로그 확인 +4. "Server stopped X times!" 보이면 + → 이것이 해결해야 할 포인트! +``` + +### Monitor가 보여주는 것 +``` +정상: +✓ Server started (Count: 1) +✓ Uptime: 계속 증가 +✓ Client connected: [ID] + +불안정 (현재): +✗ Server stopped (Count: 1) +✗ Server stopped (Count: 2+) +✗ 짧은 업타임 +✗ Uptime: 5s, 10s, 15s +``` + +--- + +## 🎯 해결 우선순위 + +### 1순위: AutoHost 제거 (가장 중요!) +- 이것이 가장 흔한 원인 +- 완전히 제거 필요 + +### 2순위: Monitor 관찰 +- 5-10초 관찰 +- Server가 안정적인지 확인 + +### 3순위: 팀원 테스트 +- 설정이 안정적이면 테스트 +- 문제 지속되면 추가 조치 + +### 4순위: 네트워크 로그 분석 +- Console에서 경고/에러 확인 +- Shutdown()이 언제 호출되는지 파악 + +--- + +## 💡 성공하면 보게 될 것 + +``` +Monitor: Server uptime: 60s+ +yougetsignal: Port 4045 is open +팀원: 접속 성공! +게임: 팀원 플레이어 스폰됨, 시작 가능! 🎉 +``` + +--- + +## 📞 참고 + +이 가이드의 모든 설정이: +- ✅ yougetsignal 성공으로 검증됨 (외부 접근 가능) +- ✅ 포트 포워딩 작동 중 +- ✅ 방화벽 허용 +- ✅ OS 바인딩 가능 + +현재 유일한 문제: +- 유니티 Netcode가 반복적으로 서버를 중지 +- 포트가 1-30초 후 닫힘 + +해결책: AutoHost 제거가 이 문제를 해결할 가능성이 가장 높음! diff --git a/Assets/Scripts/FINAL_SOLUTION_KO.md.meta b/Assets/Scripts/FINAL_SOLUTION_KO.md.meta new file mode 100644 index 0000000..6d44a94 --- /dev/null +++ b/Assets/Scripts/FINAL_SOLUTION_KO.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: cbc87bc6c6ff80843a00d9ca19932155 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/GlobalTimer.cs b/Assets/Scripts/GlobalTimer.cs index f392a04..1a0a743 100644 --- a/Assets/Scripts/GlobalTimer.cs +++ b/Assets/Scripts/GlobalTimer.cs @@ -25,21 +25,21 @@ namespace Northbound private NetworkVariable _currentTime = new NetworkVariable( 0f, NetworkVariableReadPermission.Everyone, - NetworkVariableWritePermission.Server + NetworkVariableWritePermission.Owner ); // 타이머 실행 중 여부 private NetworkVariable _isRunning = new NetworkVariable( false, NetworkVariableReadPermission.Everyone, - NetworkVariableWritePermission.Server + NetworkVariableWritePermission.Owner ); // 현재 사이클 번호 private NetworkVariable _cycleCount = new NetworkVariable( 0, NetworkVariableReadPermission.Everyone, - NetworkVariableWritePermission.Server + NetworkVariableWritePermission.Owner ); // 이벤트 @@ -83,7 +83,7 @@ namespace Northbound private void Update() { - if (!IsServer || !_isRunning.Value) + if (!IsServer || !IsOwner || !_isRunning.Value) return; _currentTime.Value -= Time.deltaTime; diff --git a/Assets/Scripts/MapGenerator.cs b/Assets/Scripts/MapGenerator.cs index 922f779..95b46df 100644 --- a/Assets/Scripts/MapGenerator.cs +++ b/Assets/Scripts/MapGenerator.cs @@ -116,7 +116,6 @@ namespace Northbound private List _spawnedPositions = new List(); private List _creepCampPositions = new List(); private List _creepPrefabs = new List(); - private Transform _objectsParent; [System.Serializable] public class ObstacleEntry @@ -188,19 +187,6 @@ namespace Northbound private void GenerateMap() { - if (groupUnderParent) - { - _objectsParent = new GameObject("Generated Map Objects").transform; - _objectsParent.SetParent(transform); - - NetworkObject parentNetworkObj = _objectsParent.gameObject.GetComponent(); - if (parentNetworkObj == null) - { - parentNetworkObj = _objectsParent.gameObject.AddComponent(); - } - parentNetworkObj.Spawn(); - } - _spawnedPositions.Clear(); _creepCampPositions.Clear(); @@ -412,7 +398,7 @@ namespace Northbound for (int i = 0; i < _generatedResources.Length; i++) { GameObject resourceObj = Instantiate(resourcePrefab, new Vector3(_generatedResources[i].position.x, 1f, _generatedResources[i].position.y), Quaternion.identity); - + Resource resource = resourceObj.GetComponent(); if (resource == null) { @@ -422,15 +408,11 @@ namespace Northbound } resource.InitializeQuality(_generatedResources[i].qualityModifier); - + NetworkObject networkObj = resourceObj.GetComponent(); if (networkObj != null) { networkObj.Spawn(); - if (groupUnderParent && _objectsParent != null) - { - resourceObj.transform.SetParent(_objectsParent); - } } else { @@ -557,11 +539,6 @@ namespace Northbound networkObj.Spawn(); - if (groupUnderParent && _objectsParent != null) - { - obstacle.transform.SetParent(_objectsParent); - } - if (obstacle.GetComponent() == null) { var visibility = obstacle.AddComponent(); @@ -657,18 +634,7 @@ namespace Northbound private int CountObstacleType(GameObject prefab) { - int count = 0; - if (_objectsParent != null) - { - foreach (Transform child in _objectsParent) - { - if (child.name.StartsWith(prefab.name)) - { - count++; - } - } - } - return count; + return 0; } #endregion @@ -860,6 +826,13 @@ namespace Northbound { GameObject campObj = Instantiate(creepCampPrefab, position, Quaternion.identity); + if (campObj.GetComponent() == null) + { + var visibility = campObj.AddComponent(); + visibility.showInExploredAreas = false; + visibility.updateInterval = 0.2f; + } + CreepCamp creepCamp = campObj.GetComponent(); if (creepCamp == null) { @@ -879,18 +852,6 @@ namespace Northbound } networkObj.Spawn(); - - if (groupUnderParent && _objectsParent != null) - { - campObj.transform.SetParent(_objectsParent); - } - - if (campObj.GetComponent() == null) - { - var visibility = campObj.AddComponent(); - visibility.showInExploredAreas = false; - visibility.updateInterval = 0.2f; - } } #endregion @@ -912,34 +873,6 @@ namespace Northbound public void ClearGeneratedObjects() { - if (_objectsParent != null) - { - NetworkObject parentNetworkObj = _objectsParent.GetComponent(); - if (parentNetworkObj != null && parentNetworkObj.IsSpawned) - { - parentNetworkObj.Despawn(true); - } - - foreach (Transform child in _objectsParent) - { - NetworkObject networkObj = child.GetComponent(); - if (networkObj != null && networkObj.IsSpawned) - { - networkObj.Despawn(true); - } - } - - if (Application.isPlaying) - { - Destroy(_objectsParent.gameObject); - } - else - { - DestroyImmediate(_objectsParent.gameObject); - } - _objectsParent = null; - } - _spawnedPositions.Clear(); } diff --git a/Assets/Scripts/MonsterAnimationController.cs b/Assets/Scripts/MonsterAnimationController.cs index 8ff138c..db595c3 100644 --- a/Assets/Scripts/MonsterAnimationController.cs +++ b/Assets/Scripts/MonsterAnimationController.cs @@ -32,13 +32,13 @@ namespace Northbound private NetworkVariable _networkSpeed = new NetworkVariable( 0f, NetworkVariableReadPermission.Everyone, - NetworkVariableWritePermission.Server + NetworkVariableWritePermission.Owner ); private NetworkVariable _networkIsMoving = new NetworkVariable( false, NetworkVariableReadPermission.Everyone, - NetworkVariableWritePermission.Server + NetworkVariableWritePermission.Owner ); public override void OnNetworkSpawn() @@ -101,7 +101,7 @@ namespace Northbound { if (!IsSpawned) return; - if (IsServer) + if (IsServer && IsOwner) { UpdateServerSide(); } diff --git a/Assets/Scripts/NetworkConfigDebugger.cs b/Assets/Scripts/NetworkConfigDebugger.cs new file mode 100644 index 0000000..a5251e5 --- /dev/null +++ b/Assets/Scripts/NetworkConfigDebugger.cs @@ -0,0 +1,67 @@ +using UnityEngine; +using Unity.Netcode; + +namespace Northbound +{ + /// + /// NetworkConfig의 모든 설정을 로그로 출력하여 서버/클라이언트 차이점을 확인 + /// + public class NetworkConfigDebugger : MonoBehaviour + { + [ContextMenu("Log NetworkConfig Details")] + public void LogNetworkConfig() + { + if (NetworkManager.Singleton == null) + { + Debug.LogError("[NetworkConfigDebugger] NetworkManager not found!"); + return; + } + + Debug.Log("=== NETWORK CONFIG DEBUGGER ==="); + + var config = NetworkManager.Singleton.NetworkConfig; + var transport = NetworkManager.Singleton.GetComponent(); + + Debug.Log("Basic Config:"); + Debug.Log($" ProtocolVersion: {config.ProtocolVersion}"); + Debug.Log($" TickRate: {config.TickRate}"); + Debug.Log($" ClientConnectionBufferTimeout: {config.ClientConnectionBufferTimeout}"); + Debug.Log($" EnsureNetworkVariableLengthSafety: {config.EnsureNetworkVariableLengthSafety}"); + + Debug.Log("Connection Settings:"); + Debug.Log($" ConnectionApproval: {config.ConnectionApproval}"); + Debug.Log($" EnableSceneManagement: {config.EnableSceneManagement}"); + Debug.Log($" EnableNetworkLogs: {config.EnableNetworkLogs}"); + + Debug.Log("Spawn Settings:"); + Debug.Log($" ForceSamePrefabs: {config.ForceSamePrefabs}"); + Debug.Log($" RecycleNetworkIds: {config.RecycleNetworkIds}"); + Debug.Log($" PlayerPrefab: {config.PlayerPrefab?.name ?? "NULL"}"); + + Debug.Log("NetworkPrefabs ({config.Prefabs.Prefabs.Count}):"); + foreach (var prefab in config.Prefabs.Prefabs) + { + Debug.Log($" - {prefab.Prefab.name} (Hash: {prefab.Prefab.GetHashCode()})"); + } + + Debug.Log("Transport:"); + if (transport != null) + { + Debug.Log($" Address: {transport.ConnectionData.Address}"); + Debug.Log($" Port: {transport.ConnectionData.Port}"); + Debug.Log($" ServerData: {transport.ConnectionData.ServerListenAddress}:{transport.ConnectionData.Port}"); + } + else + { + Debug.LogError(" Transport not found!"); + } + + Debug.Log("================================"); + } + + private void Start() + { + Invoke(nameof(LogNetworkConfig), 1f); + } + } +} diff --git a/Assets/Scripts/NetworkConfigDebugger.cs.meta b/Assets/Scripts/NetworkConfigDebugger.cs.meta new file mode 100644 index 0000000..43bffcb --- /dev/null +++ b/Assets/Scripts/NetworkConfigDebugger.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 8ab98e4f98fbe4e44a4a2f7cb8fe59ca \ No newline at end of file diff --git a/Assets/Scripts/SimpleNetworkMonitor.cs b/Assets/Scripts/SimpleNetworkMonitor.cs new file mode 100644 index 0000000..3f853d8 --- /dev/null +++ b/Assets/Scripts/SimpleNetworkMonitor.cs @@ -0,0 +1,115 @@ +using UnityEngine; +using Unity.Netcode; + +namespace Northbound +{ + /// + /// Simple monitor for network restarts + /// Detects if Unity Netcode is shutting down repeatedly + /// + public class SimpleNetworkMonitor : MonoBehaviour + { + [Header("Settings")] + [SerializeField] private bool enableOnStart = true; + [SerializeField] private float checkInterval = 2f; + + private NetworkManager _networkManager; + private float _lastCheckTime; + private int _serverStopCount = 0; + private int _serverStartCount = 0; + private float _lastServerStartTime = 0f; + private int _eventsLogged = 0; + + private void Start() + { + if (enableOnStart) + { + _networkManager = NetworkManager.Singleton; + Debug.Log("[SimpleMonitor] Simple Network Monitor started"); + } + } + + private void Update() + { + if (_networkManager == null) + { + _networkManager = NetworkManager.Singleton; + } + + if (Time.time - _lastCheckTime >= checkInterval) + { + _lastCheckTime = Time.time; + CheckNetworkStatus(); + } + } + + private void CheckNetworkStatus() + { + if (_networkManager == null) + { + Debug.LogWarning("[SimpleMonitor] NetworkManager not found"); + return; + } + + bool isServer = _networkManager.IsServer; + bool isClient = _networkManager.IsClient; + bool isHost = _networkManager.IsHost; + + if (isServer && !isClient && _eventsLogged < 3) + { + _serverStartCount++; + _lastServerStartTime = Time.time; + Debug.Log("[SimpleMonitor] Server started (Count: " + _serverStartCount + ")"); + _eventsLogged++; + } + + if (!isServer && !isClient && _lastServerStartTime > 0f && _eventsLogged < 50) + { + float uptime = Time.time - _lastServerStartTime; + _serverStopCount++; + Debug.LogWarning("[SimpleMonitor] Server stopped (Count: " + _serverStopCount + ", Uptime: " + uptime.ToString("F1") + "s)"); + _eventsLogged++; + + if (_serverStopCount >= 3) + { + Debug.LogError("[SimpleMonitor] SERVER STOPPED " + _serverStopCount + " TIMES!"); + Debug.LogError("[SimpleMonitor] This is why port closes!"); + Debug.LogError("[SimpleMonitor] Something is calling NetworkManager.Shutdown()"); + } + } + + if (isServer && _serverStartCount > 0) + { + if (_eventsLogged % 10 == 0) + { + float uptime = Time.time - _lastServerStartTime; + Debug.Log("[SimpleMonitor] Server uptime: " + uptime.ToString("F1") + "s"); + _eventsLogged++; + } + } + } + + [ContextMenu("Reset Counters")] + public void ResetCounters() + { + _serverStopCount = 0; + _serverStartCount = 0; + _lastServerStartTime = 0f; + _eventsLogged = 0; + Debug.Log("[SimpleMonitor] Counters reset"); + } + + [ContextMenu("Show Stats")] + public void ShowStats() + { + Debug.Log("=== SIMPLE MONITOR STATS ==="); + Debug.Log("Server Stops: " + _serverStopCount); + Debug.Log("Server Starts: " + _serverStartCount); + Debug.Log("NetworkManager:"); + Debug.Log(" IsServer: " + (_networkManager != null ? _networkManager.IsServer.ToString() : "null")); + Debug.Log(" IsClient: " + (_networkManager != null ? _networkManager.IsClient.ToString() : "null")); + Debug.Log(" IsHost: " + (_networkManager != null ? _networkManager.IsHost.ToString() : "null")); + Debug.Log("============================"); + } + } +} diff --git a/Assets/Scripts/SimpleNetworkMonitor.cs.meta b/Assets/Scripts/SimpleNetworkMonitor.cs.meta new file mode 100644 index 0000000..6aed633 --- /dev/null +++ b/Assets/Scripts/SimpleNetworkMonitor.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 977685b2792b7684dbc782d410338a51 \ No newline at end of file