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