This commit is contained in:
PC-20230316NUNE\Administrator
2024-01-29 19:07:52 +08:00
parent 01293d9c30
commit 09db51f67b
62 changed files with 17325 additions and 1910 deletions

View File

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Threading.Tasks;
using Cysharp.Threading.Tasks;
using Plugins.JNGame.Sync.Frame.game;
@@ -10,6 +11,15 @@ using UnityEngine.SceneManagement;
namespace Plugins.JNGame.Sync.Frame
{
//帧同步 通知
public interface JNSyncFrameEvent
{
static string CLEAR = "JNSyncFrameEvent_CLEAR";
static string CREATE = "JNSyncFrameEvent_CREATE";
static string FRAME = "JNSyncFrameEvent_FRAME";
}
public abstract class JNSyncFrame : SystemBase
{
@@ -35,7 +45,7 @@ namespace Plugins.JNGame.Sync.Frame
private Dictionary<int,JNFrameInfo> _nFrameTempQueue = new();
//需要同步的Actor
private List<JNSyncFrameComponent<object>> _nSyncActors = new();
private List<IJNSyncFrameComponent> _nSyncActors = new();
//ID 每添加 JNSyncFrameComponent + 1
public Func<int> nSyncID = RandomUtil.Next(0);
@@ -61,21 +71,34 @@ namespace Plugins.JNGame.Sync.Frame
{
Physics.autoSimulation = false;
Physics.autoSyncTransforms = false;
this.OnReset();
return Task.CompletedTask;
}
//开始
public void onStart(){
public void OnStart(){
this._isStart = true;
}
//重置数据
public void onStop()
public void OnReset()
{
EventDispatcher.Event.Dispatch(JNSyncFrameEvent.CLEAR);
this._isStart = false;
this.nSyncID = RandomUtil.Next(0);
this.nRandom = RandomUtil.SyncRandom(100);
this.nRandomInt = RandomUtil.SyncRandomInt(100);
this._nSyncActors = new();
this._nFrameQueue = new();
this._nFrameTempQueue = new();
this._nLocalFrame = 0;
this._nFrameRun = 0;
Physics.SyncTransforms();
EventDispatcher.Event.Dispatch(JNSyncFrameEvent.CREATE);
}
//更新同步
@@ -122,13 +145,15 @@ namespace Plugins.JNGame.Sync.Frame
//更新帧
this._nSyncActors.ForEach(child =>
{
MethodInfo OnSyncUpdate = child.GetType().GetMethod("OnSyncUpdate");
MethodInfo Decoder = child.GetType().GetMethod("Decoder");
if (inputs.ContainsKey(child.NID))
{
child.OnSyncUpdate(dt,frame,child.Decoder(inputs[child.NID].Input.ToByteArray()));
OnSyncUpdate.Invoke(child,new []{dt,frame,Decoder.Invoke(child,new object[]{ inputs[child.NID].Input.ToByteArray() })});
}
else
{
child.OnSyncUpdate(dt,frame,null);
OnSyncUpdate.Invoke(child,new []{ dt,frame,(object)null });
}
});
@@ -177,8 +202,8 @@ namespace Plugins.JNGame.Sync.Frame
if(isLatestData){
//如果推的帧小于本地帧 则 重开
if(frame.Index < _nLocalFrame){
onStop();
onStart();
OnReset();
OnStart();
return;
}
}
@@ -236,11 +261,22 @@ namespace Plugins.JNGame.Sync.Frame
}
}
//添加同步组件
public void AddSyncActor(IJNSyncFrameComponent sync){
if(!this._nSyncActors.Contains(sync)){
this._nSyncActors.Add(sync);
}
}
//销毁同步组件
public void DelSyncActor(IJNSyncFrameComponent sync){
this._nSyncActors.Remove(sync);
}
//发送帧数据
protected abstract void OnSendInput(JNFrameInputs inputs);
//获取帧数据
protected abstract UniTask<JNFrameInfos> OnServerData(int start,int end);
}
}

View File

@@ -0,0 +1,17 @@
using UnityEngine;
namespace Plugins.JNGame.Sync.Frame.game
{
public abstract class IJNSyncFrameComponent : MonoBehaviour
{
//标识
[HideInInspector]
public int _nId;
[HideInInspector]
public int NID => _nId;
//获取同步类
protected abstract JNSyncFrame GetSync();
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: fdc20d5f68c44f11ba0f08c304cb5fae
timeCreated: 1706518761

View File

@@ -7,12 +7,8 @@ namespace Plugins.JNGame.Sync.Frame.game
{
//所有帧同步组件的基类
public abstract class JNSyncFrameComponent<T> : MonoBehaviour
public abstract class JNSyncFrameComponent<T> : IJNSyncFrameComponent
{
//标识
private int _nId;
public int NID => _nId;
//当前输入
private T _input;
@@ -21,31 +17,28 @@ namespace Plugins.JNGame.Sync.Frame.game
public Boolean isInput => this._input == null;
//是否初始化完成
[HideInInspector]
public Boolean isSyncInitSuccess = false;
//清空输入
public void ClearInput(){
this._input = default(T);
}
private void Awake()
{
//向帧同步获取Id
this._nId = GetSync().nSyncID();
this._nId = this.GetSync().nSyncID();
GetSync().AddSyncActor(this);
this.OnSyncLoad();
}
//初始化完成
public void OnSyncInitSuccess(){}
//获取同步类
protected abstract JNSyncFrame GetSync();
//加载
public abstract void OnSyncLoad();
//解析
public T Decoder(byte[] bytes)
{
@@ -57,7 +50,6 @@ namespace Plugins.JNGame.Sync.Frame.game
return Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(input));
}
//帧同步
public abstract void OnSyncUpdate(int dt,JNFrameInfo frame,T input);

View File

@@ -9,6 +9,9 @@ namespace Plugins.JNGame.Util
/// </summary>
public class EventDispatcher
{
public static readonly EventDispatcher Event = new EventDispatcher();
public Dictionary<string, List<Delegate>> EventHandlers { get; private set; } = new();
/// <summary>
@@ -16,7 +19,7 @@ namespace Plugins.JNGame.Util
/// </summary>
/// <param name="eventId">事件标识符</param>
/// <param name="listener">事件监听器</param>
public void AddListener(string eventId, Delegate listener)
public void AddListener(string eventId, Action listener)
{
if (!EventHandlers.ContainsKey(eventId))
{
@@ -81,6 +84,21 @@ namespace Plugins.JNGame.Util
}
}
public void Dispatch(string eventId)
{
if (EventHandlers.ContainsKey(eventId) && EventHandlers[eventId] != null)
{
foreach(Delegate fun in EventHandlers[eventId])
{
// 确保 fun 实际上是指向一个 Action<T> 类型的函数
if (fun.Method.GetParameters().Length == 0)
{
((Action)fun)();
}
}
}
}
public void Reset()
{
EventHandlers = new();

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 0e38b6117e2ea924f96539a58c4b037d
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 71c96a96bb863694faba7104a9d9322b
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: e6354fa04e40f004095046b8fbe4c921
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,116 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &664841175096201695
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 664841175096201691}
- component: {fileID: 664841175096201690}
- component: {fileID: 664841175096201689}
- component: {fileID: 664841175096201688}
- component: {fileID: 664841175096201684}
m_Layer: 0
m_Name: Sphere
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &664841175096201691
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 664841175096201695}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 6.03, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &664841175096201690
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 664841175096201695}
m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
--- !u!23 &664841175096201689
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 664841175096201695}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!135 &664841175096201688
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 664841175096201695}
m_Material: {fileID: 0}
m_IsTrigger: 0
m_Enabled: 1
serializedVersion: 2
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!54 &664841175096201684
Rigidbody:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 664841175096201695}
serializedVersion: 2
m_Mass: 1
m_Drag: 0
m_AngularDrag: 0.05
m_UseGravity: 1
m_IsKinematic: 0
m_Interpolate: 0
m_Constraints: 0
m_CollisionDetection: 0

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 096d89120db3de0499fda98eddf7e04f
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 7e4bbf503f03cf649bc465775f6572db
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -123,6 +123,234 @@ NavMeshSettings:
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &367831855
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 367831860}
- component: {fileID: 367831859}
- component: {fileID: 367831858}
- component: {fileID: 367831857}
- component: {fileID: 367831856}
m_Layer: 0
m_Name: Cube (4)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!54 &367831856
Rigidbody:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 367831855}
serializedVersion: 2
m_Mass: 0.5
m_Drag: 0
m_AngularDrag: 0.05
m_UseGravity: 0
m_IsKinematic: 1
m_Interpolate: 0
m_Constraints: 0
m_CollisionDetection: 0
--- !u!65 &367831857
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 367831855}
m_Material: {fileID: 0}
m_IsTrigger: 0
m_Enabled: 1
serializedVersion: 2
m_Size: {x: 1, y: 1, z: 1}
m_Center: {x: 0, y: 0, z: 0}
--- !u!23 &367831858
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 367831855}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &367831859
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 367831855}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!4 &367831860
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 367831855}
m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068}
m_LocalPosition: {x: 3.58, y: 2.2, z: 13.21}
m_LocalScale: {x: 1, y: 5, z: 50}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 7
m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0}
--- !u!1 &964960249
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 964960254}
- component: {fileID: 964960253}
- component: {fileID: 964960252}
- component: {fileID: 964960251}
- component: {fileID: 964960250}
m_Layer: 0
m_Name: Cube (1)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!54 &964960250
Rigidbody:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 964960249}
serializedVersion: 2
m_Mass: 0.5
m_Drag: 0
m_AngularDrag: 0.05
m_UseGravity: 0
m_IsKinematic: 1
m_Interpolate: 0
m_Constraints: 0
m_CollisionDetection: 0
--- !u!65 &964960251
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 964960249}
m_Material: {fileID: 0}
m_IsTrigger: 0
m_Enabled: 1
serializedVersion: 2
m_Size: {x: 1, y: 1, z: 1}
m_Center: {x: 0, y: 0, z: 0}
--- !u!23 &964960252
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 964960249}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &964960253
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 964960249}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!4 &964960254
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 964960249}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -12.28, y: 2.2, z: 0}
m_LocalScale: {x: 1, y: 5, z: 50}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1169397908
GameObject:
m_ObjectHideFlags: 0
@@ -190,14 +418,128 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1169397908}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 1, z: -10}
m_LocalRotation: {x: 0.29197416, y: -0.63795906, z: 0.28661197, w: 0.6523902}
m_LocalPosition: {x: 18.290829, y: 15.245832, z: -3.1746101}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1282436099
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1282436104}
- component: {fileID: 1282436103}
- component: {fileID: 1282436102}
- component: {fileID: 1282436101}
- component: {fileID: 1282436100}
m_Layer: 0
m_Name: Cube (3)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!54 &1282436100
Rigidbody:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1282436099}
serializedVersion: 2
m_Mass: 0.5
m_Drag: 0
m_AngularDrag: 0.05
m_UseGravity: 0
m_IsKinematic: 1
m_Interpolate: 0
m_Constraints: 0
m_CollisionDetection: 0
--- !u!65 &1282436101
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1282436099}
m_Material: {fileID: 0}
m_IsTrigger: 0
m_Enabled: 1
serializedVersion: 2
m_Size: {x: 1, y: 1, z: 1}
m_Center: {x: 0, y: 0, z: 0}
--- !u!23 &1282436102
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1282436099}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &1282436103
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1282436099}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!4 &1282436104
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1282436099}
m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068}
m_LocalPosition: {x: 3.58, y: 2.2, z: -15}
m_LocalScale: {x: 1, y: 5, z: 50}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 6
m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0}
--- !u!1 &1347472972
GameObject:
m_ObjectHideFlags: 0
@@ -415,6 +757,7 @@ GameObject:
serializedVersion: 6
m_Component:
- component: {fileID: 1538924697}
- component: {fileID: 1538924698}
m_Layer: 0
m_Name: GMode
m_TagString: Untagged
@@ -437,7 +780,22 @@ Transform:
m_Father: {fileID: 0}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1874648403
--- !u!114 &1538924698
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1538924695}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e57d6502487241f9826136613eff59a2, type: 3}
m_Name:
m_EditorClassIdentifier:
_nId: 0
isSyncInitSuccess: 0
ball: {fileID: 664841175096201695, guid: 096d89120db3de0499fda98eddf7e04f, type: 3}
--- !u!1 &2060155880
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@@ -445,38 +803,54 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1874648407}
- component: {fileID: 1874648406}
- component: {fileID: 1874648405}
- component: {fileID: 1874648404}
- component: {fileID: 1874648408}
- component: {fileID: 2060155885}
- component: {fileID: 2060155884}
- component: {fileID: 2060155883}
- component: {fileID: 2060155882}
- component: {fileID: 2060155881}
m_Layer: 0
m_Name: Sphere
m_Name: Cube (2)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!135 &1874648404
SphereCollider:
--- !u!54 &2060155881
Rigidbody:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1874648403}
m_GameObject: {fileID: 2060155880}
serializedVersion: 2
m_Mass: 0.5
m_Drag: 0
m_AngularDrag: 0.05
m_UseGravity: 0
m_IsKinematic: 1
m_Interpolate: 0
m_Constraints: 0
m_CollisionDetection: 0
--- !u!65 &2060155882
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2060155880}
m_Material: {fileID: 0}
m_IsTrigger: 0
m_Enabled: 1
serializedVersion: 2
m_Radius: 0.5
m_Size: {x: 1, y: 1, z: 1}
m_Center: {x: 0, y: 0, z: 0}
--- !u!23 &1874648405
--- !u!23 &2060155883
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1874648403}
m_GameObject: {fileID: 2060155880}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
@@ -512,42 +886,26 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &1874648406
--- !u!33 &2060155884
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1874648403}
m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
--- !u!4 &1874648407
m_GameObject: {fileID: 2060155880}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!4 &2060155885
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1874648403}
m_GameObject: {fileID: 2060155880}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 6.03, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_LocalPosition: {x: 14.19, y: 2.2, z: 0}
m_LocalScale: {x: 1, y: 5, z: 50}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 4
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!54 &1874648408
Rigidbody:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1874648403}
serializedVersion: 2
m_Mass: 1
m_Drag: 0
m_AngularDrag: 0.05
m_UseGravity: 1
m_IsKinematic: 0
m_Interpolate: 0
m_Constraints: 0
m_CollisionDetection: 0

View File

@@ -579,7 +579,19 @@ MonoBehaviour:
m_TargetGraphic: {fileID: 2008468466}
m_OnClick:
m_PersistentCalls:
m_Calls: []
m_Calls:
- m_Target: {fileID: 1911778721}
m_TargetAssemblyTypeName: Script.UIMain, Assembly-CSharp
m_MethodName: OnClickReset
m_Mode: 1
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0
m_FloatArgument: 0
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
--- !u!114 &2008468466
MonoBehaviour:
m_ObjectHideFlags: 0

View File

@@ -7,9 +7,10 @@ namespace Script
public static class App
{
public static JNGSocket Socket = new JNGSocket();
public static JNGSyncFrame Sync = new JNGSyncFrame();
public static JAPI Api = new(new JAPIConfig(){BaseURL = "http://localhost:8080"});
public static readonly JNGSocket Socket = new JNGSocket();
public static readonly JNGSyncFrame Sync = new JNGSyncFrame();
public static readonly JAPI Api = new(new JAPIConfig(){BaseURL = "http://localhost:8080"});
public static readonly EventDispatcher Event = EventDispatcher.Event;
public static SystemBase[] System()
{

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 18f844bda03d4d0c8dae20659066ca67
timeCreated: 1706519193

View File

@@ -0,0 +1,16 @@
using Plugins.JNGame.Sync.Frame;
using Plugins.JNGame.Sync.Frame.game;
namespace Script.AppImpl.Sync
{
public abstract class JNGSyncFrame<T> : JNSyncFrameComponent<T>
{
protected override JNSyncFrame GetSync()
{
return App.Sync;
}
public override void OnSyncLoad(){}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 54720b15a706406c974db4ac581e6dbc
timeCreated: 1706519239

View File

@@ -52,9 +52,7 @@ namespace Script
private void Update()
{
App.Sync.Update((int)(Time.deltaTime * 1000));
}
}
}

View File

@@ -1,8 +1,17 @@
using Cysharp.Threading.Tasks;
using Script.battle;
using UnityEngine;
namespace Script
{
public class UIMain : MonoBehaviour
{
//重置
public void OnClickReset()
{
GBattleModeManager.Instance.Open(GBattleMode.Default).Forget();
}
}
}

View File

@@ -1,6 +1,8 @@
namespace Script.battle
using Script.AppImpl.Sync;
namespace Script.battle
{
public class GBaseMode
public abstract class GBaseMode<T> : JNGSyncFrame<T>
{
}

View File

@@ -1,5 +1,7 @@
using System.Collections.Generic;
using Cysharp.Threading.Tasks;
using Plugins.JNGame.Sync.Frame;
using Plugins.JNGame.Util;
using UnityEngine;
using UnityEngine.SceneManagement;
@@ -22,8 +24,8 @@ namespace Script.battle
//全局战斗模式管理器
public class GBattleModeManager : SingletonScene<GBattleModeManager>
{
public static string[] Worlds = { "WorldScene" };
private static readonly string[] Worlds = { "WorldSceneMode" };
//当前模式
private GBattleMode _current = GBattleMode.Not;
@@ -32,6 +34,9 @@ namespace Script.battle
public void Init(GBattleModeInfo info)
{
// App.Event.AddListener(JNSyncFrameEvent.CREATE,LoadScene);
// App.Event.AddListener(JNSyncFrameEvent.CLEAR,UnloadScene);
}
//打开指定模式
@@ -39,22 +44,20 @@ namespace Script.battle
{
//销毁之前模式
await Close();
_current = mode;
await LoadScene(mode);
await OnReset();
//开始同步
App.Sync.onStart();
App.Sync.OnStart();
}
//关闭当前模式
public async UniTask Close()
//重置当前模式
public async UniTask OnReset()
{
await UnloadScene(_current);
App.Sync.onStop();
await this.UnloadScene();
App.Sync.OnReset();
await this.LoadScene();
_current = GBattleMode.Not;
}
//获取场景名称
@@ -64,20 +67,30 @@ namespace Script.battle
}
//加载场景
private async UniTask LoadScene(GBattleMode mode)
private async UniTask LoadScene()
{
GBattleMode mode = this._current;
if (mode == GBattleMode.Not) return;
Debug.Log($"[GBattleModeManager] 打开场景{GetWorldName(mode)}");
await SceneManager.LoadSceneAsync(GetWorldName(mode), LoadSceneMode.Additive);
}
//销毁场景
private async UniTask UnloadScene(GBattleMode mode)
//销毁所有场景
private async UniTask UnloadScene()
{
if (mode == GBattleMode.Not) return;
Debug.Log($"[GBattleModeManager] 关闭场景{GetWorldName(mode)}");
await SceneManager.UnloadSceneAsync(GetWorldName(mode));
Debug.Log($"[GBattleModeManager] 关闭场景");
foreach (var world in Worlds)
{
try
{
await SceneManager.UnloadSceneAsync(world);
}
catch
{
// ignored
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 6b22dd710734444690a739bc582997fa
timeCreated: 1706519323

View File

@@ -0,0 +1,32 @@
using UnityEngine;
namespace Script.battle.mode
{
public class GWorldSceneModeInput
{
}
public class GWorldSceneMode:GBaseMode<GWorldSceneModeInput>
{
public GameObject ball;
// public override void OnSyncLoad()
// {
// base.OnSyncLoad();
// Instantiate(ball,this.transform);
// }
public override void OnSyncUpdate(int dt, JNFrameInfo frame, GWorldSceneModeInput input)
{
if (frame.Index > 0)
{
var ballNode = Instantiate(ball,this.transform);
var transformPosition = ballNode.transform.position;
ballNode.transform.position = new Vector3(transformPosition.x,transformPosition.y,GetSync().nRandomInt(-3,3));
}
Debug.Log("OnSyncUpdate");
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: e57d6502487241f9826136613eff59a2
timeCreated: 1706519435