diff --git a/TestVelGameServer/Assets/Samples/VelNet/1.0.4/Example/PlayerController.cs b/TestVelGameServer/Assets/Samples/VelNet/1.0.4/Example/PlayerController.cs index 6cad912..c9ab2f9 100644 --- a/TestVelGameServer/Assets/Samples/VelNet/1.0.4/Example/PlayerController.cs +++ b/TestVelGameServer/Assets/Samples/VelNet/1.0.4/Example/PlayerController.cs @@ -65,7 +65,12 @@ namespace VelNet protected override void ReceiveState(BinaryReader binaryReader) { - Color newColor = binaryReader.ReadColor(); + // Color newColor = binaryReader.ReadColor(); + Color newColor; + newColor.r = binaryReader.ReadSingle(); + newColor.g = binaryReader.ReadSingle(); + newColor.b = binaryReader.ReadSingle(); + newColor.a = binaryReader.ReadSingle(); if (newColor != color) { rend.material.color = newColor; diff --git a/TestVelGameServer/Assets/Samples/VelNet/1.0.4/Example/PlayerPrefab.prefab b/TestVelGameServer/Assets/Samples/VelNet/1.0.4/Example/PlayerPrefab.prefab index 6ab0ec1..94ec1b1 100644 --- a/TestVelGameServer/Assets/Samples/VelNet/1.0.4/Example/PlayerPrefab.prefab +++ b/TestVelGameServer/Assets/Samples/VelNet/1.0.4/Example/PlayerPrefab.prefab @@ -200,8 +200,8 @@ MonoBehaviour: isSceneObject: 0 syncedComponents: - {fileID: -4404668399269848200} - - {fileID: 7564913803199044469} - {fileID: 1181612843795795320} + - {fileID: 7564913803199044469} --- !u!114 &-4404668399269848200 MonoBehaviour: m_ObjectHideFlags: 0 @@ -216,6 +216,7 @@ MonoBehaviour: m_EditorClassIdentifier: networkObject: {fileID: 9102273340480352682} serializationRateHz: 30 + hybridOnChangeCompression: 1 color: {r: 0, g: 0, b: 0, a: 0} --- !u!114 &1181612843795795320 MonoBehaviour: @@ -248,6 +249,7 @@ MonoBehaviour: m_EditorClassIdentifier: networkObject: {fileID: 9102273340480352682} serializationRateHz: 60 + hybridOnChangeCompression: 1 useLocalTransform: 0 teleportDistance: 0 teleportAngle: 0 diff --git a/TestVelGameServer/Assets/Samples/VelNet/1.0.4/Example/test.unity b/TestVelGameServer/Assets/Samples/VelNet/1.0.4/Example/test.unity index 4688170..97ccff3 100644 --- a/TestVelGameServer/Assets/Samples/VelNet/1.0.4/Example/test.unity +++ b/TestVelGameServer/Assets/Samples/VelNet/1.0.4/Example/test.unity @@ -603,8 +603,6 @@ RectTransform: - {fileID: 626742070} - {fileID: 711524767} - {fileID: 864104176} - - {fileID: 945446556} - - {fileID: 1843597586} - {fileID: 948755938} - {fileID: 545137760} m_Father: {fileID: 0} @@ -629,7 +627,7 @@ MonoBehaviour: m_EditorClassIdentifier: velNetManager: {fileID: 1099803616} userInput: {fileID: 626742069} - sendInput: {fileID: 945446555} + sendInput: {fileID: 0} roomInput: {fileID: 711524768} messages: {fileID: 1894247854} messageBuffer: [] @@ -890,11 +888,11 @@ RectTransform: m_Children: - {fileID: 1081889596} m_Father: {fileID: 244561620} - m_RootOrder: 10 + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 5, y: 165.7} + m_AnchoredPosition: {x: 5, y: 76.8} m_SizeDelta: {x: 160, y: 30} m_Pivot: {x: 0, y: 0} --- !u!114 &545137761 @@ -1953,149 +1951,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 927188572} m_CullTransparentMesh: 1 ---- !u!1 &945446554 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 945446556} - - component: {fileID: 945446558} - - component: {fileID: 945446557} - - component: {fileID: 945446555} - m_Layer: 5 - m_Name: Message - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &945446555 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 945446554} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_WrapAround: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 945446557} - m_TextComponent: {fileID: 1235343403} - m_Placeholder: {fileID: 1954037270} - m_ContentType: 0 - m_InputType: 0 - m_AsteriskChar: 42 - m_KeyboardType: 0 - m_LineType: 0 - m_HideMobileInput: 0 - m_CharacterValidation: 0 - m_CharacterLimit: 0 - m_OnEndEdit: - m_PersistentCalls: - m_Calls: [] - m_OnValueChanged: - m_PersistentCalls: - m_Calls: [] - m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_CustomCaretColor: 0 - m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412} - m_Text: - m_CaretBlinkRate: 0.85 - m_CaretWidth: 1 - m_ReadOnly: 0 - m_ShouldActivateOnSelect: 1 ---- !u!224 &945446556 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 945446554} - 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_Children: - - {fileID: 1954037272} - - {fileID: 1235343401} - m_Father: {fileID: 244561620} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 181.94519, y: 88} - m_SizeDelta: {x: 353.8904, y: 30} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &945446557 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 945446554} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!222 &945446558 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 945446554} - m_CullTransparentMesh: 1 --- !u!1 &948755937 GameObject: m_ObjectHideFlags: 0 @@ -2132,7 +1987,7 @@ RectTransform: - {fileID: 1840952814} - {fileID: 1992361063} m_Father: {fileID: 244561620} - m_RootOrder: 9 + m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 0} @@ -2153,6 +2008,7 @@ MonoBehaviour: m_EditorClassIdentifier: networkObject: {fileID: 948755940} serializationRateHz: 30 + hybridOnChangeCompression: 1 text: {fileID: 948755941} --- !u!114 &948755940 MonoBehaviour: @@ -2671,85 +2527,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1154194181} m_CullTransparentMesh: 1 ---- !u!1 &1235343400 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1235343401} - - component: {fileID: 1235343402} - - component: {fileID: 1235343403} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1235343401 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1235343400} - 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_Children: [] - m_Father: {fileID: 945446556} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: -0.5} - m_SizeDelta: {x: -20, y: -13} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &1235343402 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1235343400} - m_CullTransparentMesh: 1 ---- !u!114 &1235343403 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1235343400} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 14 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 0 - m_HorizontalOverflow: 1 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: --- !u!1 &1278634766 GameObject: m_ObjectHideFlags: 0 @@ -3644,218 +3421,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1840952813} m_CullTransparentMesh: 1 ---- !u!1 &1843597585 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1843597586} - - component: {fileID: 1843597589} - - component: {fileID: 1843597588} - - component: {fileID: 1843597587} - m_Layer: 5 - m_Name: Send - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1843597586 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1843597585} - 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_Children: - - {fileID: 1852007163} - m_Father: {fileID: 244561620} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 416.95, y: 88} - m_SizeDelta: {x: 94.1, y: 30} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1843597587 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1843597585} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_WrapAround: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 1843597588} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 244561621} - m_TargetAssemblyTypeName: NetworkGUI, Assembly-CSharp - m_MethodName: HandleSend - 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 &1843597588 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1843597585} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!222 &1843597589 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1843597585} - m_CullTransparentMesh: 1 ---- !u!1 &1852007162 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1852007163} - - component: {fileID: 1852007165} - - component: {fileID: 1852007164} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1852007163 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1852007162} - 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_Children: [] - m_Father: {fileID: 1843597586} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1852007164 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1852007162} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 14 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Send ---- !u!222 &1852007165 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1852007162} - m_CullTransparentMesh: 1 --- !u!1 &1894247852 GameObject: m_ObjectHideFlags: 0 @@ -3935,85 +3500,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1894247852} m_CullTransparentMesh: 1 ---- !u!1 &1954037269 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1954037272} - - component: {fileID: 1954037271} - - component: {fileID: 1954037270} - m_Layer: 5 - m_Name: Placeholder - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1954037270 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1954037269} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 14 - m_FontStyle: 2 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Enter text... ---- !u!222 &1954037271 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1954037269} - m_CullTransparentMesh: 1 ---- !u!224 &1954037272 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1954037269} - 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_Children: [] - m_Father: {fileID: 945446556} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: -0.5} - m_SizeDelta: {x: -20, y: -13} - m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &1992361062 GameObject: m_ObjectHideFlags: 0 @@ -4395,6 +3881,10 @@ PrefabInstance: propertyPath: m_Name value: TestNetworkedGameObject objectReference: {fileID: 0} + - target: {fileID: 8565720275311462453, guid: 6e4a023f70e01405e8b249a4488fe319, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 8565720275311462455, guid: 6e4a023f70e01405e8b249a4488fe319, type: 3} propertyPath: m_RootOrder value: 6 diff --git a/TestVelGameServer/Packages/VelNetUnity/Runtime/NetworkObject.cs b/TestVelGameServer/Packages/VelNetUnity/Runtime/NetworkObject.cs index 9c09aef..0dd136a 100644 --- a/TestVelGameServer/Packages/VelNetUnity/Runtime/NetworkObject.cs +++ b/TestVelGameServer/Packages/VelNetUnity/Runtime/NetworkObject.cs @@ -79,12 +79,12 @@ namespace VelNet VelNetPlayer.SendGroupMessage(this, group, (byte)index, message, reliable); } - public void ReceiveBytes(string identifier, byte[] message) + public void ReceiveBytes(byte componentIdx, byte[] message) { // send the message to the right component try { - syncedComponents[int.Parse(identifier)].ReceiveBytes(message); + syncedComponents[componentIdx].ReceiveBytes(message); } catch (Exception e) { diff --git a/TestVelGameServer/Packages/VelNetUnity/Runtime/Util/NetworkSerializedObject.cs b/TestVelGameServer/Packages/VelNetUnity/Runtime/Util/NetworkSerializedObject.cs index a645854..7836f2b 100644 --- a/TestVelGameServer/Packages/VelNetUnity/Runtime/Util/NetworkSerializedObject.cs +++ b/TestVelGameServer/Packages/VelNetUnity/Runtime/Util/NetworkSerializedObject.cs @@ -29,7 +29,7 @@ namespace VelNet { try { - if (IsMine) + if (IsMine && enabled) { byte[] newBytes = SendState(); if (hybridOnChangeCompression) @@ -37,14 +37,15 @@ namespace VelNet if (Time.timeAsDouble - lastSendTime > slowSendInterval || !BinaryWriterExtensions.BytesSame(lastSentBytes, newBytes)) { SendBytes(newBytes); + lastSendTime = Time.timeAsDouble; } } else { SendBytes(newBytes); + lastSendTime = Time.timeAsDouble; } - lastSendTime = Time.timeAsDouble; lastSentBytes = newBytes; } } diff --git a/TestVelGameServer/Packages/VelNetUnity/Runtime/Util/NetworkSerializedObjectStream.cs b/TestVelGameServer/Packages/VelNetUnity/Runtime/Util/NetworkSerializedObjectStream.cs index 7623122..5808afd 100644 --- a/TestVelGameServer/Packages/VelNetUnity/Runtime/Util/NetworkSerializedObjectStream.cs +++ b/TestVelGameServer/Packages/VelNetUnity/Runtime/Util/NetworkSerializedObjectStream.cs @@ -31,7 +31,7 @@ namespace VelNet { try { - if (IsMine) + if (IsMine && enabled) { using MemoryStream mem = new MemoryStream(); using BinaryWriter writer = new BinaryWriter(mem); @@ -43,14 +43,15 @@ namespace VelNet if (Time.timeAsDouble - lastSendTime > slowSendInterval || !BinaryWriterExtensions.BytesSame(lastSentBytes, newBytes)) { SendBytes(newBytes); + lastSendTime = Time.timeAsDouble; } } else { SendBytes(newBytes); + lastSendTime = Time.timeAsDouble; } - lastSendTime = Time.timeAsDouble; lastSentBytes = newBytes; } } diff --git a/TestVelGameServer/Packages/VelNetUnity/Runtime/VelNetManager.cs b/TestVelGameServer/Packages/VelNetUnity/Runtime/VelNetManager.cs index 670e2c3..9234857 100644 --- a/TestVelGameServer/Packages/VelNetUnity/Runtime/VelNetManager.cs +++ b/TestVelGameServer/Packages/VelNetUnity/Runtime/VelNetManager.cs @@ -412,7 +412,7 @@ namespace VelNet { if (players.ContainsKey(dm.senderId)) { - players[dm.senderId]?.HandleMessage(dm); //todo + players[dm.senderId]?.HandleMessage(dm); } else { @@ -431,7 +431,11 @@ namespace VelNet for (int i = 0; i < sceneObjects.Length; i++) { - sceneObjects[i].networkId = -1 + "-" + i; + if (sceneObjects[i].sceneNetworkId == 0) + { + Debug.LogError("Scene Network ID is 0. Make sure to assign one first.", sceneObjects[i]); + } + sceneObjects[i].networkId = -1 + "-" + sceneObjects[i].sceneNetworkId; sceneObjects[i].owner = masterPlayer; sceneObjects[i].isSceneObject = true; // needed for special handling when deleted objects.Add(sceneObjects[i].networkId, sceneObjects[i]); @@ -483,13 +487,11 @@ namespace VelNet Debug.Log("On client connect exception " + e); } } - - /// - /// Reads N bytes + + + /// + /// Runs in background clientReceiveThread; Listens for incoming data. /// - /// - /// - /// private static byte[] ReadExact(Stream stream, int N) { byte[] toReturn = new byte[N]; @@ -517,20 +519,16 @@ namespace VelNet { socketConnection = new TcpClient(host, port); socketConnection.NoDelay = true; + // Get a stream object for reading NetworkStream stream = socketConnection.GetStream(); using BinaryReader reader = new BinaryReader(stream); //now we are connected, so add a message to the queue AddMessage(new ConnectedMessage()); - //Join("MyRoom"); - //SendTo(MessageSendType.MESSAGE_OTHERS, Encoding.UTF8.GetBytes("Hello")); - //FormGroup("close", new List { 1 }); - //SendToGroup("close", Encoding.UTF8.GetBytes("HelloGroup")); while (true) { - // Get a stream object for reading //read a byte - byte type = reader.ReadByte(); + byte type = (byte)stream.ReadByte(); switch (type) { @@ -538,7 +536,7 @@ namespace VelNet case 0: { LoginMessage m = new LoginMessage(); - m.userId = reader.ReadInt32(); //not really the sender... + m.userId = GetIntFromBytes(ReadExact(stream, 4)); //not really the sender... AddMessage(m); break; } @@ -547,8 +545,8 @@ namespace VelNet { RoomsMessage m = new RoomsMessage(); m.rooms = new List(); - int N = reader.ReadInt32(); //the size of the payload - byte[] utf8data = reader.ReadBytes(N); + int N = GetIntFromBytes(ReadExact(stream, 4)); //the size of the payload + byte[] utf8data = ReadExact(stream, N); string roomMessage = Encoding.UTF8.GetString(utf8data); @@ -572,9 +570,9 @@ namespace VelNet case 2: { JoinMessage m = new JoinMessage(); - m.userId = reader.ReadInt32(); - int N = reader.ReadByte(); - byte[] utf8data = reader.ReadBytes(N); //the room name, encoded as utf-8 + m.userId = GetIntFromBytes(ReadExact(stream, 4)); + int N = stream.ReadByte(); + byte[] utf8data = ReadExact(stream, N); //the room name, encoded as utf-8 m.room = Encoding.UTF8.GetString(utf8data); AddMessage(m); break; @@ -583,9 +581,9 @@ namespace VelNet case 3: { DataMessage m = new DataMessage(); - m.senderId = reader.ReadInt32(); - int N = reader.ReadInt32(); //the size of the payload - m.data = reader.ReadBytes(N); //the message + m.senderId = GetIntFromBytes(ReadExact(stream, 4)); + int N = GetIntFromBytes(ReadExact(stream, 4)); //the size of the payload + m.data = ReadExact(stream, N); //the message AddMessage(m); break; } @@ -593,7 +591,7 @@ namespace VelNet case 4: { ChangeMasterMessage m = new ChangeMasterMessage(); - m.masterId = reader.ReadInt32(); //sender is the new master + m.masterId = GetIntFromBytes(ReadExact(stream, 4)); //sender is the new master AddMessage(m); break; } diff --git a/TestVelGameServer/Packages/VelNetUnity/Runtime/VelNetPlayer.cs b/TestVelGameServer/Packages/VelNetUnity/Runtime/VelNetPlayer.cs index f4fb524..7369dfd 100644 --- a/TestVelGameServer/Packages/VelNetUnity/Runtime/VelNetPlayer.cs +++ b/TestVelGameServer/Packages/VelNetUnity/Runtime/VelNetPlayer.cs @@ -61,93 +61,81 @@ namespace VelNet /// /// These are generally things that come from the "owner" and should be enacted locally, where appropriate /// - /// Overall message encoding: - /// uint16: numMessages - /// for m in numMessages - /// int32: message size (including message type) + /// Message encoding: /// byte: message type /// byte[]: message + /// + /// The length of the byte[] for message is fixed according to the message type /// public void HandleMessage(VelNetManager.DataMessage m) { using MemoryStream mem = new MemoryStream(m.data); using BinaryReader reader = new BinaryReader(mem); - - ushort numMessages = reader.ReadUInt16(); - for (int i = 0; i < numMessages; i++) + //individual message parameters separated by comma + VelNetManager.MessageType messageType = (VelNetManager.MessageType)reader.ReadByte(); + + switch (messageType) { - //individual message parameters separated by comma - int messageLength = reader.ReadInt32(); - VelNetManager.MessageType messageType = (VelNetManager.MessageType)reader.ReadByte(); - byte[] message = reader.ReadBytes(messageLength-1); - - // make a separate reader to prevent malformed messages from messing us up - using MemoryStream messageMem = new MemoryStream(message); - using BinaryReader messageReader = new BinaryReader(messageMem); - - switch (messageType) + case VelNetManager.MessageType.ObjectSync: // sync update for an object I may own { - case VelNetManager.MessageType.ObjectSync: // sync update for an object I may own + string objectKey = reader.ReadString(); + byte componentIdx = reader.ReadByte(); + int messageLength = reader.ReadInt32(); + byte[] syncMessage = reader.ReadBytes(messageLength); + if (manager.objects.ContainsKey(objectKey)) { - string objectKey = messageReader.ReadString(); - string identifier = messageReader.ReadString(); - string syncMessage = messageReader.ReadString(); - byte[] messageBytes = Convert.FromBase64String(syncMessage); - if (manager.objects.ContainsKey(objectKey)) + if (manager.objects[objectKey].owner == this) { - if (manager.objects[objectKey].owner == this) - { - manager.objects[objectKey].ReceiveBytes(identifier, messageBytes); - } + manager.objects[objectKey].ReceiveBytes(componentIdx, syncMessage); } - - break; } - case VelNetManager.MessageType.TakeOwnership: // I'm trying to take ownership of an object - { - string networkId = messageReader.ReadString(); - if (manager.objects.ContainsKey(networkId)) - { - manager.objects[networkId].owner = this; - } - - break; - } - case VelNetManager.MessageType.Instantiate: // I'm trying to instantiate an object - { - string networkId = messageReader.ReadString(); - string prefabName = messageReader.ReadString(); - if (manager.objects.ContainsKey(networkId)) - { - break; //we already have this one, ignore - } - - VelNetManager.SomebodyInstantiatedNetworkObject(networkId, prefabName, this); - - break; - } - case VelNetManager.MessageType.Destroy: // I'm trying to destroy a gameobject I own - { - string networkId = messageReader.ReadString(); - - VelNetManager.NetworkDestroy(networkId); - break; - } - case VelNetManager.MessageType.DeleteSceneObjects: //deleted scene objects - { - int len = messageReader.ReadInt32(); - for (int k = 1; k < len; k++) - { - VelNetManager.NetworkDestroy(messageReader.ReadString()); - } - - break; - } - default: - throw new ArgumentOutOfRangeException(); + break; } + case VelNetManager.MessageType.TakeOwnership: // I'm trying to take ownership of an object + { + string networkId = reader.ReadString(); + + if (manager.objects.ContainsKey(networkId)) + { + manager.objects[networkId].owner = this; + } + + break; + } + case VelNetManager.MessageType.Instantiate: // I'm trying to instantiate an object + { + string networkId = reader.ReadString(); + string prefabName = reader.ReadString(); + if (manager.objects.ContainsKey(networkId)) + { + break; //we already have this one, ignore + } + + VelNetManager.SomebodyInstantiatedNetworkObject(networkId, prefabName, this); + + break; + } + case VelNetManager.MessageType.Destroy: // I'm trying to destroy a gameobject I own + { + string networkId = reader.ReadString(); + + VelNetManager.NetworkDestroy(networkId); + break; + } + case VelNetManager.MessageType.DeleteSceneObjects: //deleted scene objects + { + int len = reader.ReadInt32(); + for (int k = 1; k < len; k++) + { + VelNetManager.NetworkDestroy(reader.ReadString()); + } + + break; + } + default: + throw new ArgumentOutOfRangeException(); } } @@ -165,6 +153,7 @@ namespace VelNet writer.Write((byte)VelNetManager.MessageType.ObjectSync); writer.Write(obj.networkId); writer.Write(componentIdx); + writer.Write(data.Length); writer.Write(data); VelNetManager.SendToGroup(group, mem.ToArray(), reliable); } @@ -176,6 +165,7 @@ namespace VelNet writer.Write((byte)VelNetManager.MessageType.ObjectSync); writer.Write(obj.networkId); writer.Write(componentIdx); + writer.Write(data.Length); writer.Write(data); VelNetManager.SendToRoom(mem.ToArray(), false, reliable); } @@ -190,6 +180,7 @@ namespace VelNet { writer.Write(o); } + VelNetManager.SendToRoom(mem.ToArray()); } @@ -200,7 +191,7 @@ namespace VelNet if (!manager.objects.ContainsKey(networkId) || manager.objects[networkId].owner != this || !isLocal) return; // send to all, which will make me delete as well - + using MemoryStream mem = new MemoryStream(); using BinaryWriter writer = new BinaryWriter(mem); writer.Write((byte)VelNetManager.MessageType.Destroy);