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