From 6d912005a586789fb888bf0a6edd0c5c09851c3e Mon Sep 17 00:00:00 2001 From: sunqinzhe Date: Tue, 16 Dec 2025 18:47:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=87=86=E5=A4=87server=20gamelogic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Scenes/NetworkDriverAsset.asset | 3 +- Assets/Scenes/SampleScene.unity | 42 +++++++++++++++++-- Assets/Scripts/Client/ClientMain.cs | 11 ++++- Assets/Scripts/Client/ClientUpdateJob.cs | 19 ++++++++- Assets/Scripts/EntityType.cs | 1 + Assets/Scripts/Main.cs | 21 ---------- Assets/Scripts/Main.cs.meta | 11 ----- Assets/Scripts/Server/GameLogic.cs | 18 ++++++++ Assets/Scripts/Server/GameLogic.cs.meta | 3 ++ Assets/Scripts/Server/ServerConnectionJob.cs | 2 +- Assets/Scripts/Server/ServerGameLogicJobs.cs | 17 ++++++++ .../Server/ServerGameLogicJobs.cs.meta | 3 ++ Assets/Scripts/Server/ServerMain.cs | 2 +- Assets/Scripts/Server/ServerReceiveJob.cs | 2 +- Assets/Scripts/Server/ServerSendJob.cs | 2 +- Assets/Scripts/Server/WorldManager.cs | 10 +++++ Assets/Scripts/Server/WorldManager.cs.meta | 3 ++ 17 files changed, 126 insertions(+), 44 deletions(-) delete mode 100644 Assets/Scripts/Main.cs delete mode 100644 Assets/Scripts/Main.cs.meta create mode 100644 Assets/Scripts/Server/GameLogic.cs create mode 100644 Assets/Scripts/Server/GameLogic.cs.meta create mode 100644 Assets/Scripts/Server/ServerGameLogicJobs.cs create mode 100644 Assets/Scripts/Server/ServerGameLogicJobs.cs.meta create mode 100644 Assets/Scripts/Server/WorldManager.cs create mode 100644 Assets/Scripts/Server/WorldManager.cs.meta diff --git a/Assets/Scenes/NetworkDriverAsset.asset b/Assets/Scenes/NetworkDriverAsset.asset index ae5eb43..3567bce 100644 --- a/Assets/Scenes/NetworkDriverAsset.asset +++ b/Assets/Scenes/NetworkDriverAsset.asset @@ -12,7 +12,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: b79190dcfae6a2f4fbdfc9deccf00ef7, type: 3} m_Name: NetworkDriverAsset m_EditorClassIdentifier: - useSimulator: 0 + port: 7777 + useSimulator: 1 packetDelayMs: 500 packetJitterMs: 300 packetDropPercentage: 10 diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index 4cf3455..78ecd64 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -227,7 +227,6 @@ GameObject: - component: {fileID: 963194228} - component: {fileID: 963194227} - component: {fileID: 963194226} - - component: {fileID: 963194229} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -309,18 +308,52 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &963194229 +--- !u!1 &1613085077 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1613085078} + - component: {fileID: 1613085079} + m_Layer: 0 + m_Name: ClientMain + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &1613085078 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1613085077} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1613085079 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 963194225} + m_GameObject: {fileID: 1613085077} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 694d8256118344eb2b130fceb1a11b7f, type: 3} + m_Script: {fileID: 11500000, guid: d126d712307544dd89716677e730aa93, type: 3} m_Name: m_EditorClassIdentifier: + address: 127.0.0.1 + driverAsset: {fileID: 11400000, guid: a8a5562854ecf4cc1a49700e8bd93c19, type: 2} --- !u!1 &1936170114 GameObject: m_ObjectHideFlags: 0 @@ -374,3 +407,4 @@ SceneRoots: - {fileID: 963194228} - {fileID: 705507995} - {fileID: 1936170116} + - {fileID: 1613085078} diff --git a/Assets/Scripts/Client/ClientMain.cs b/Assets/Scripts/Client/ClientMain.cs index 108edc7..6aea675 100644 --- a/Assets/Scripts/Client/ClientMain.cs +++ b/Assets/Scripts/Client/ClientMain.cs @@ -42,9 +42,16 @@ namespace ECSTest { jobHandle.Complete(); - - //TODO Render() + + jobHandle = driver.ScheduleUpdate(); + jobHandle = new ClientUpdateJob() + { + driver = driver, + unreliablePipeline = unreliablePipeline, + reliablePipeline = reliablePipeline, + connection = connection, + }.Schedule(jobHandle); } } } \ No newline at end of file diff --git a/Assets/Scripts/Client/ClientUpdateJob.cs b/Assets/Scripts/Client/ClientUpdateJob.cs index 35c2b6c..ca57267 100644 --- a/Assets/Scripts/Client/ClientUpdateJob.cs +++ b/Assets/Scripts/Client/ClientUpdateJob.cs @@ -2,6 +2,7 @@ using Unity.Collections; using Unity.Jobs; using Unity.Networking.Transport; +using UnityEngine; namespace ECSTest { @@ -15,11 +16,27 @@ namespace ECSTest public void Execute() { + if (connection.Value == default) + return; + NetworkEvent.Type cmd; while ((cmd = connection.Value.PopEvent(driver, out var stream, out var networkPipeline)) != NetworkEvent.Type.Empty) { - + if (cmd == NetworkEvent.Type.Data) + { + //TODO + } + else if (cmd == NetworkEvent.Type.Connect) + { + Debug.Log("[Client] Connected to server"); + //TODO + } + else if (cmd == NetworkEvent.Type.Disconnect) + { + connection.Value = default; + Debug.Log("[Client] Disconnected to server"); + } } } } diff --git a/Assets/Scripts/EntityType.cs b/Assets/Scripts/EntityType.cs index 8e607cd..a9fcee7 100644 --- a/Assets/Scripts/EntityType.cs +++ b/Assets/Scripts/EntityType.cs @@ -4,6 +4,7 @@ namespace ECSTest { Unit, Monster, + Bullet, } } \ No newline at end of file diff --git a/Assets/Scripts/Main.cs b/Assets/Scripts/Main.cs deleted file mode 100644 index 346f8e0..0000000 --- a/Assets/Scripts/Main.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace ECSTest -{ - public class Main : MonoBehaviour - { - // Start is called before the first frame update - void Start() - { - TestEntityDataBlock.Run(); - } - - // Update is called once per frame - void Update() - { - - } - } -} diff --git a/Assets/Scripts/Main.cs.meta b/Assets/Scripts/Main.cs.meta deleted file mode 100644 index 1711529..0000000 --- a/Assets/Scripts/Main.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 694d8256118344eb2b130fceb1a11b7f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Server/GameLogic.cs b/Assets/Scripts/Server/GameLogic.cs new file mode 100644 index 0000000..939c1bb --- /dev/null +++ b/Assets/Scripts/Server/GameLogic.cs @@ -0,0 +1,18 @@ +using Unity.Jobs; + +namespace ECSTest.Server +{ + public class GameLogic + { + public JobHandle Simulate(int beginFrameId, int frameCount, JobHandle dependency) + { + //TODO + return dependency; + } + + private JobHandle Step(int frameId, JobHandle dependency) + { + return dependency; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Server/GameLogic.cs.meta b/Assets/Scripts/Server/GameLogic.cs.meta new file mode 100644 index 0000000..328ac16 --- /dev/null +++ b/Assets/Scripts/Server/GameLogic.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 51ab02ddeb9e4cdbb736075b2c7b43a8 +timeCreated: 1765871132 \ No newline at end of file diff --git a/Assets/Scripts/Server/ServerConnectionJob.cs b/Assets/Scripts/Server/ServerConnectionJob.cs index 389cb8e..04dbadb 100644 --- a/Assets/Scripts/Server/ServerConnectionJob.cs +++ b/Assets/Scripts/Server/ServerConnectionJob.cs @@ -4,7 +4,7 @@ using Unity.Jobs; using Unity.Networking.Transport; using UnityEngine; -namespace ECSTest +namespace ECSTest.Server { [BurstCompile] public struct ServerConnectionJob : IJob diff --git a/Assets/Scripts/Server/ServerGameLogicJobs.cs b/Assets/Scripts/Server/ServerGameLogicJobs.cs new file mode 100644 index 0000000..d3b81fb --- /dev/null +++ b/Assets/Scripts/Server/ServerGameLogicJobs.cs @@ -0,0 +1,17 @@ +using GameCore.TinyECS; +using Unity.Burst; +using Unity.Jobs; + +namespace ECSTest.Server +{ + [BurstCompile] + public struct SpawnBulletJob : IJob + { + public WorldManager worldManager; + + public void Execute() + { + + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Server/ServerGameLogicJobs.cs.meta b/Assets/Scripts/Server/ServerGameLogicJobs.cs.meta new file mode 100644 index 0000000..0cc17b4 --- /dev/null +++ b/Assets/Scripts/Server/ServerGameLogicJobs.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9cfef090e4d64e91bf319abd48fe7e18 +timeCreated: 1765877986 \ No newline at end of file diff --git a/Assets/Scripts/Server/ServerMain.cs b/Assets/Scripts/Server/ServerMain.cs index d65755e..9595170 100644 --- a/Assets/Scripts/Server/ServerMain.cs +++ b/Assets/Scripts/Server/ServerMain.cs @@ -7,7 +7,7 @@ using Unity.Jobs; using Unity.Networking.Transport; using UnityEngine; -namespace ECSTest +namespace ECSTest.Server { public class ServerMain : MonoBehaviour { diff --git a/Assets/Scripts/Server/ServerReceiveJob.cs b/Assets/Scripts/Server/ServerReceiveJob.cs index 32961aa..89ed67a 100644 --- a/Assets/Scripts/Server/ServerReceiveJob.cs +++ b/Assets/Scripts/Server/ServerReceiveJob.cs @@ -4,7 +4,7 @@ using Unity.Jobs; using Unity.Networking.Transport; using UnityEngine; -namespace ECSTest +namespace ECSTest.Server { [BurstCompile] public struct ServerReceiveJob : IJobParallelForDefer diff --git a/Assets/Scripts/Server/ServerSendJob.cs b/Assets/Scripts/Server/ServerSendJob.cs index 745673d..af7a648 100644 --- a/Assets/Scripts/Server/ServerSendJob.cs +++ b/Assets/Scripts/Server/ServerSendJob.cs @@ -1,7 +1,7 @@ using Unity.Burst; using Unity.Jobs; -namespace ECSTest +namespace ECSTest.Server { [BurstCompile] public struct ServerSendJob : IJobParallelFor diff --git a/Assets/Scripts/Server/WorldManager.cs b/Assets/Scripts/Server/WorldManager.cs new file mode 100644 index 0000000..e5a40a2 --- /dev/null +++ b/Assets/Scripts/Server/WorldManager.cs @@ -0,0 +1,10 @@ +using GameCore.TinyECS; + +namespace ECSTest.Server +{ + public struct WorldManager + { + public EntityCollection entities; + public EntityDataBlockChain chain; + } +} \ No newline at end of file diff --git a/Assets/Scripts/Server/WorldManager.cs.meta b/Assets/Scripts/Server/WorldManager.cs.meta new file mode 100644 index 0000000..20abf1a --- /dev/null +++ b/Assets/Scripts/Server/WorldManager.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 34167e4ecf924d05b9abd31eb2b2e464 +timeCreated: 1765879427 \ No newline at end of file