├── .gitignore ├── .vsconfig ├── Assets ├── DevelopersHub.meta └── DevelopersHub │ ├── RealtimeNetworking.meta │ └── RealtimeNetworking │ ├── Demo.meta │ ├── Demo │ ├── 01.meta │ ├── 01 │ │ ├── Materials.meta │ │ ├── Materials │ │ │ ├── ground.mat │ │ │ └── ground.mat.meta │ │ ├── Prefabs.meta │ │ ├── Prefabs │ │ │ ├── Demo_01_Controller.prefab │ │ │ ├── Demo_01_Controller.prefab.meta │ │ │ ├── Demo_01_HealthBar.prefab │ │ │ ├── Demo_01_HealthBar.prefab.meta │ │ │ ├── Demo_01_LobbyPlayer.prefab │ │ │ ├── Demo_01_LobbyPlayer.prefab.meta │ │ │ ├── Demo_01_Projectile.prefab │ │ │ ├── Demo_01_Projectile.prefab.meta │ │ │ ├── Demo_01_Room.prefab │ │ │ └── Demo_01_Room.prefab.meta │ │ ├── Scenes.meta │ │ ├── Scenes │ │ │ ├── Demo_01_1_Menu.unity │ │ │ ├── Demo_01_1_Menu.unity.meta │ │ │ ├── Demo_01_2_Game.unity │ │ │ └── Demo_01_2_Game.unity.meta │ │ ├── Scripts.meta │ │ ├── Scripts │ │ │ ├── Demo_01_Controller.cs │ │ │ ├── Demo_01_Controller.cs.meta │ │ │ ├── Demo_01_Game.cs │ │ │ ├── Demo_01_Game.cs.meta │ │ │ ├── Demo_01_HealthBar.cs │ │ │ ├── Demo_01_HealthBar.cs.meta │ │ │ ├── Demo_01_LobbyPlayer.cs │ │ │ ├── Demo_01_LobbyPlayer.cs.meta │ │ │ ├── Demo_01_Manager.cs │ │ │ ├── Demo_01_Manager.cs.meta │ │ │ ├── Demo_01_Platform.cs │ │ │ ├── Demo_01_Platform.cs.meta │ │ │ ├── Demo_01_Projectile.cs │ │ │ ├── Demo_01_Projectile.cs.meta │ │ │ ├── Demo_01_Room.cs │ │ │ └── Demo_01_Room.cs.meta │ │ ├── Textures.meta │ │ └── Textures │ │ │ ├── blank.png │ │ │ ├── blank.png.meta │ │ │ ├── ground.png │ │ │ └── ground.png.meta │ ├── Scripts.meta │ └── Scripts │ │ ├── NetcodeDemo.cs │ │ └── NetcodeDemo.cs.meta │ ├── Resources.meta │ ├── Resources │ ├── Settings.asset │ └── Settings.asset.meta │ ├── Scripts.meta │ └── Scripts │ ├── Attributes.cs │ ├── Attributes.cs.meta │ ├── Client.cs │ ├── Client.cs.meta │ ├── Data.cs │ ├── Data.cs.meta │ ├── Editor.meta │ ├── Editor │ ├── EditorAttributes.cs │ ├── EditorAttributes.cs.meta │ ├── EditorNetworkObject.cs │ └── EditorNetworkObject.cs.meta │ ├── Functions.cs │ ├── Functions.cs.meta │ ├── NetworkObject.cs │ ├── NetworkObject.cs.meta │ ├── Packet.cs │ ├── Packet.cs.meta │ ├── RealtimeNetworking.cs │ ├── RealtimeNetworking.cs.meta │ ├── Receiver.cs │ ├── Receiver.cs.meta │ ├── Sender.cs │ ├── Sender.cs.meta │ ├── SerializableDictionary.cs │ ├── SerializableDictionary.cs.meta │ ├── Settings.cs │ ├── Settings.cs.meta │ ├── ThreadDispatcher.cs │ ├── ThreadDispatcher.cs.meta │ ├── Threading.cs │ ├── Threading.cs.meta │ ├── Tools.cs │ └── Tools.cs.meta ├── License ├── Packages ├── manifest.json └── packages-lock.json ├── ProjectSettings ├── AudioManager.asset ├── ClusterInputManager.asset ├── DynamicsManager.asset ├── EditorBuildSettings.asset ├── EditorSettings.asset ├── GraphicsSettings.asset ├── InputManager.asset ├── MemorySettings.asset ├── NavMeshAreas.asset ├── PackageManagerSettings.asset ├── Physics2DSettings.asset ├── PresetManager.asset ├── ProjectSettings.asset ├── ProjectVersion.txt ├── QualitySettings.asset ├── SceneTemplateSettings.json ├── TagManager.asset ├── TimeManager.asset ├── UnityConnectSettings.asset ├── VFXManager.asset ├── VersionControlSettings.asset └── XRSettings.asset ├── Readme.md └── UserSettings ├── EditorUserSettings.asset ├── Layouts ├── default-2021.dwlt └── default-2023.dwlt └── Search.settings /.gitignore: -------------------------------------------------------------------------------- 1 | # This .gitignore file should be placed at the root of your Unity project directory 2 | # 3 | # Get latest from https://github.com/github/gitignore/blob/master/Unity.gitignore 4 | # 5 | /[Ll]ibrary/ 6 | /[Tt]emp/ 7 | /[Oo]bj/ 8 | /[Bb]uild/ 9 | /[Bb]uilds/ 10 | /[Ll]ogs/ 11 | /[Mm]emoryCaptures/ 12 | 13 | # Asset meta data should only be ignored when the corresponding asset is also ignored 14 | !/[Aa]ssets/**/*.meta 15 | 16 | # Uncomment this line if you wish to ignore the asset store tools plugin 17 | # /[Aa]ssets/AssetStoreTools* 18 | 19 | # Autogenerated Jetbrains Rider plugin 20 | [Aa]ssets/Plugins/Editor/JetBrains* 21 | 22 | # Visual Studio cache directory 23 | .vs/ 24 | 25 | # Gradle cache directory 26 | .gradle/ 27 | 28 | # Autogenerated VS/MD/Consulo solution and project files 29 | ExportedObj/ 30 | .consulo/ 31 | *.csproj 32 | *.unityproj 33 | *.sln 34 | *.suo 35 | *.tmp 36 | *.user 37 | *.userprefs 38 | *.pidb 39 | *.booproj 40 | *.svd 41 | *.pdb 42 | *.mdb 43 | *.opendb 44 | *.VC.db 45 | 46 | # Unity3D generated meta files 47 | *.pidb.meta 48 | *.pdb.meta 49 | *.mdb.meta 50 | 51 | # Unity3D generated file on crash reports 52 | sysinfo.txt 53 | 54 | # Builds 55 | *.apk 56 | *.unitypackage 57 | 58 | # Crashlytics generated file 59 | crashlytics-build.properties 60 | 61 | -------------------------------------------------------------------------------- /.vsconfig: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0", 3 | "components": [ 4 | "Microsoft.VisualStudio.Workload.ManagedGame" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /Assets/DevelopersHub.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cafd10857319c3d4684543dc6b70938d 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8ed034a3690907745b94cc6ce9299255 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1951ae202566b2f4daa7e37ec3c32715 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b92f68b4e5351c94f87c42a41631876c 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Materials.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f61d11184fd69fc44bed4151ad479680 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Materials/ground.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 8 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: ground 11 | m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} 12 | m_ValidKeywords: 13 | - _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A 14 | m_InvalidKeywords: [] 15 | m_LightmapFlags: 4 16 | m_EnableInstancingVariants: 0 17 | m_DoubleSidedGI: 0 18 | m_CustomRenderQueue: -1 19 | stringTagMap: {} 20 | disabledShaderPasses: [] 21 | m_SavedProperties: 22 | serializedVersion: 3 23 | m_TexEnvs: 24 | - _BumpMap: 25 | m_Texture: {fileID: 0} 26 | m_Scale: {x: 1, y: 1} 27 | m_Offset: {x: 0, y: 0} 28 | - _DetailAlbedoMap: 29 | m_Texture: {fileID: 0} 30 | m_Scale: {x: 1, y: 1} 31 | m_Offset: {x: 0, y: 0} 32 | - _DetailMask: 33 | m_Texture: {fileID: 0} 34 | m_Scale: {x: 1, y: 1} 35 | m_Offset: {x: 0, y: 0} 36 | - _DetailNormalMap: 37 | m_Texture: {fileID: 0} 38 | m_Scale: {x: 1, y: 1} 39 | m_Offset: {x: 0, y: 0} 40 | - _EmissionMap: 41 | m_Texture: {fileID: 0} 42 | m_Scale: {x: 10, y: 10} 43 | m_Offset: {x: 0, y: 0} 44 | - _MainTex: 45 | m_Texture: {fileID: 2800000, guid: b25457ca28d5fa94aa3337c317f0ca56, type: 3} 46 | m_Scale: {x: 10, y: 10} 47 | m_Offset: {x: 0, y: 0} 48 | - _MetallicGlossMap: 49 | m_Texture: {fileID: 0} 50 | m_Scale: {x: 1, y: 1} 51 | m_Offset: {x: 0, y: 0} 52 | - _OcclusionMap: 53 | m_Texture: {fileID: 0} 54 | m_Scale: {x: 1, y: 1} 55 | m_Offset: {x: 0, y: 0} 56 | - _ParallaxMap: 57 | m_Texture: {fileID: 0} 58 | m_Scale: {x: 1, y: 1} 59 | m_Offset: {x: 0, y: 0} 60 | m_Ints: [] 61 | m_Floats: 62 | - _BumpScale: 1 63 | - _Cutoff: 0.5 64 | - _DetailNormalMapScale: 1 65 | - _DstBlend: 0 66 | - _GlossMapScale: 0 67 | - _Glossiness: 0.5 68 | - _GlossyReflections: 1 69 | - _Metallic: 0 70 | - _Mode: 0 71 | - _OcclusionStrength: 1 72 | - _Parallax: 0.02 73 | - _SmoothnessTextureChannel: 1 74 | - _SpecularHighlights: 1 75 | - _SrcBlend: 1 76 | - _UVSec: 0 77 | - _ZWrite: 1 78 | m_Colors: 79 | - _Color: {r: 1, g: 1, b: 1, a: 1} 80 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} 81 | m_BuildTextureStacks: [] 82 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Materials/ground.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ab8615975b71e1c4589ebe60d6124a73 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 2100000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Prefabs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 978faf380dcaf6c428d244cd9fd66c14 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Prefabs/Demo_01_Controller.prefab: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1 &2459602756433764517 4 | GameObject: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | serializedVersion: 6 10 | m_Component: 11 | - component: {fileID: 4155419158917173516} 12 | m_Layer: 0 13 | m_Name: Muzzle 14 | m_TagString: Untagged 15 | m_Icon: {fileID: 0} 16 | m_NavMeshLayer: 0 17 | m_StaticEditorFlags: 0 18 | m_IsActive: 1 19 | --- !u!4 &4155419158917173516 20 | Transform: 21 | m_ObjectHideFlags: 0 22 | m_CorrespondingSourceObject: {fileID: 0} 23 | m_PrefabInstance: {fileID: 0} 24 | m_PrefabAsset: {fileID: 0} 25 | m_GameObject: {fileID: 2459602756433764517} 26 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 27 | m_LocalPosition: {x: 0, y: 0.598, z: 0.852} 28 | m_LocalScale: {x: 1, y: 1, z: 1} 29 | m_ConstrainProportionsScale: 0 30 | m_Children: [] 31 | m_Father: {fileID: 8179720575216243065} 32 | m_RootOrder: 2 33 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 34 | --- !u!1 &5828994366077805659 35 | GameObject: 36 | m_ObjectHideFlags: 0 37 | m_CorrespondingSourceObject: {fileID: 0} 38 | m_PrefabInstance: {fileID: 0} 39 | m_PrefabAsset: {fileID: 0} 40 | serializedVersion: 6 41 | m_Component: 42 | - component: {fileID: 3603481029532052768} 43 | m_Layer: 0 44 | m_Name: Head 45 | m_TagString: Untagged 46 | m_Icon: {fileID: 0} 47 | m_NavMeshLayer: 0 48 | m_StaticEditorFlags: 0 49 | m_IsActive: 1 50 | --- !u!4 &3603481029532052768 51 | Transform: 52 | m_ObjectHideFlags: 0 53 | m_CorrespondingSourceObject: {fileID: 0} 54 | m_PrefabInstance: {fileID: 0} 55 | m_PrefabAsset: {fileID: 0} 56 | m_GameObject: {fileID: 5828994366077805659} 57 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 58 | m_LocalPosition: {x: 0, y: 1, z: 0} 59 | m_LocalScale: {x: 1, y: 1, z: 1} 60 | m_ConstrainProportionsScale: 0 61 | m_Children: [] 62 | m_Father: {fileID: 8179720575216243065} 63 | m_RootOrder: 1 64 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 65 | --- !u!1 &8179720574895074998 66 | GameObject: 67 | m_ObjectHideFlags: 0 68 | m_CorrespondingSourceObject: {fileID: 0} 69 | m_PrefabInstance: {fileID: 0} 70 | m_PrefabAsset: {fileID: 0} 71 | serializedVersion: 6 72 | m_Component: 73 | - component: {fileID: 8179720574895074999} 74 | - component: {fileID: 8179720574895074994} 75 | - component: {fileID: 8179720574895074993} 76 | m_Layer: 0 77 | m_Name: Cube 78 | m_TagString: Untagged 79 | m_Icon: {fileID: 0} 80 | m_NavMeshLayer: 0 81 | m_StaticEditorFlags: 0 82 | m_IsActive: 1 83 | --- !u!4 &8179720574895074999 84 | Transform: 85 | m_ObjectHideFlags: 0 86 | m_CorrespondingSourceObject: {fileID: 0} 87 | m_PrefabInstance: {fileID: 0} 88 | m_PrefabAsset: {fileID: 0} 89 | m_GameObject: {fileID: 8179720574895074998} 90 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 91 | m_LocalPosition: {x: 0, y: 0.577, z: 0.393} 92 | m_LocalScale: {x: 0.70764, y: 0.21381, z: 0.61045} 93 | m_ConstrainProportionsScale: 0 94 | m_Children: [] 95 | m_Father: {fileID: 8179720575216243065} 96 | m_RootOrder: 0 97 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 98 | --- !u!33 &8179720574895074994 99 | MeshFilter: 100 | m_ObjectHideFlags: 0 101 | m_CorrespondingSourceObject: {fileID: 0} 102 | m_PrefabInstance: {fileID: 0} 103 | m_PrefabAsset: {fileID: 0} 104 | m_GameObject: {fileID: 8179720574895074998} 105 | m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} 106 | --- !u!23 &8179720574895074993 107 | MeshRenderer: 108 | m_ObjectHideFlags: 0 109 | m_CorrespondingSourceObject: {fileID: 0} 110 | m_PrefabInstance: {fileID: 0} 111 | m_PrefabAsset: {fileID: 0} 112 | m_GameObject: {fileID: 8179720574895074998} 113 | m_Enabled: 1 114 | m_CastShadows: 1 115 | m_ReceiveShadows: 1 116 | m_DynamicOccludee: 1 117 | m_StaticShadowCaster: 0 118 | m_MotionVectors: 1 119 | m_LightProbeUsage: 1 120 | m_ReflectionProbeUsage: 1 121 | m_RayTracingMode: 2 122 | m_RayTraceProcedural: 0 123 | m_RenderingLayerMask: 1 124 | m_RendererPriority: 0 125 | m_Materials: 126 | - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} 127 | m_StaticBatchInfo: 128 | firstSubMesh: 0 129 | subMeshCount: 0 130 | m_StaticBatchRoot: {fileID: 0} 131 | m_ProbeAnchor: {fileID: 0} 132 | m_LightProbeVolumeOverride: {fileID: 0} 133 | m_ScaleInLightmap: 1 134 | m_ReceiveGI: 1 135 | m_PreserveUVs: 0 136 | m_IgnoreNormalsForChartDetection: 0 137 | m_ImportantGI: 0 138 | m_StitchLightmapSeams: 1 139 | m_SelectedEditorRenderState: 3 140 | m_MinimumChartSize: 4 141 | m_AutoUVMaxDistance: 0.5 142 | m_AutoUVMaxAngle: 89 143 | m_LightmapParameters: {fileID: 0} 144 | m_SortingLayerID: 0 145 | m_SortingLayer: 0 146 | m_SortingOrder: 0 147 | m_AdditionalVertexStreams: {fileID: 0} 148 | --- !u!1 &8179720575216243010 149 | GameObject: 150 | m_ObjectHideFlags: 0 151 | m_CorrespondingSourceObject: {fileID: 0} 152 | m_PrefabInstance: {fileID: 0} 153 | m_PrefabAsset: {fileID: 0} 154 | serializedVersion: 6 155 | m_Component: 156 | - component: {fileID: 8179720575216243065} 157 | - component: {fileID: 8179720575216243064} 158 | - component: {fileID: 8179720575216243071} 159 | - component: {fileID: 8179720575216243070} 160 | - component: {fileID: 8179720575216243069} 161 | - component: {fileID: 8179720575216243068} 162 | - component: {fileID: 8179720575216243011} 163 | m_Layer: 0 164 | m_Name: Demo_01_Controller 165 | m_TagString: Untagged 166 | m_Icon: {fileID: 0} 167 | m_NavMeshLayer: 0 168 | m_StaticEditorFlags: 0 169 | m_IsActive: 1 170 | --- !u!4 &8179720575216243065 171 | Transform: 172 | m_ObjectHideFlags: 0 173 | m_CorrespondingSourceObject: {fileID: 0} 174 | m_PrefabInstance: {fileID: 0} 175 | m_PrefabAsset: {fileID: 0} 176 | m_GameObject: {fileID: 8179720575216243010} 177 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 178 | m_LocalPosition: {x: 0, y: 1.19, z: 0} 179 | m_LocalScale: {x: 1, y: 1, z: 1} 180 | m_ConstrainProportionsScale: 0 181 | m_Children: 182 | - {fileID: 8179720574895074999} 183 | - {fileID: 3603481029532052768} 184 | - {fileID: 4155419158917173516} 185 | m_Father: {fileID: 0} 186 | m_RootOrder: 0 187 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 188 | --- !u!114 &8179720575216243064 189 | MonoBehaviour: 190 | m_ObjectHideFlags: 0 191 | m_CorrespondingSourceObject: {fileID: 0} 192 | m_PrefabInstance: {fileID: 0} 193 | m_PrefabAsset: {fileID: 0} 194 | m_GameObject: {fileID: 8179720575216243010} 195 | m_Enabled: 1 196 | m_EditorHideFlags: 0 197 | m_Script: {fileID: 11500000, guid: 41e6c3eb20397554eb1aece2df8d73ad, type: 3} 198 | m_Name: 199 | m_EditorClassIdentifier: 200 | _id: 6c0361cb-ae80-49f0-a78b-b11261301990 201 | _syncTransform: 1 202 | _uncontrolledRigidbody: 0 203 | _syncAnimation: 0 204 | --- !u!114 &8179720575216243071 205 | MonoBehaviour: 206 | m_ObjectHideFlags: 0 207 | m_CorrespondingSourceObject: {fileID: 0} 208 | m_PrefabInstance: {fileID: 0} 209 | m_PrefabAsset: {fileID: 0} 210 | m_GameObject: {fileID: 8179720575216243010} 211 | m_Enabled: 1 212 | m_EditorHideFlags: 0 213 | m_Script: {fileID: 11500000, guid: 568ced28f4555ac4d9a3a7377bef88ca, type: 3} 214 | m_Name: 215 | m_EditorClassIdentifier: 216 | health: 100 217 | _damage: 15 218 | _fireRate: 0.5 219 | _moveSpeed: 6 220 | _healthPrefab: {fileID: 1701181533039168581, guid: c51e935e45c3dc548aca14bc4efdf83b, type: 3} 221 | _head: {fileID: 3603481029532052768} 222 | _bulletPrefabIndex: 1 223 | _gunMuzzle: {fileID: 4155419158917173516} 224 | --- !u!33 &8179720575216243070 225 | MeshFilter: 226 | m_ObjectHideFlags: 0 227 | m_CorrespondingSourceObject: {fileID: 0} 228 | m_PrefabInstance: {fileID: 0} 229 | m_PrefabAsset: {fileID: 0} 230 | m_GameObject: {fileID: 8179720575216243010} 231 | m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} 232 | --- !u!23 &8179720575216243069 233 | MeshRenderer: 234 | m_ObjectHideFlags: 0 235 | m_CorrespondingSourceObject: {fileID: 0} 236 | m_PrefabInstance: {fileID: 0} 237 | m_PrefabAsset: {fileID: 0} 238 | m_GameObject: {fileID: 8179720575216243010} 239 | m_Enabled: 1 240 | m_CastShadows: 1 241 | m_ReceiveShadows: 1 242 | m_DynamicOccludee: 1 243 | m_StaticShadowCaster: 0 244 | m_MotionVectors: 1 245 | m_LightProbeUsage: 1 246 | m_ReflectionProbeUsage: 1 247 | m_RayTracingMode: 2 248 | m_RayTraceProcedural: 0 249 | m_RenderingLayerMask: 1 250 | m_RendererPriority: 0 251 | m_Materials: 252 | - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} 253 | m_StaticBatchInfo: 254 | firstSubMesh: 0 255 | subMeshCount: 0 256 | m_StaticBatchRoot: {fileID: 0} 257 | m_ProbeAnchor: {fileID: 0} 258 | m_LightProbeVolumeOverride: {fileID: 0} 259 | m_ScaleInLightmap: 1 260 | m_ReceiveGI: 1 261 | m_PreserveUVs: 0 262 | m_IgnoreNormalsForChartDetection: 0 263 | m_ImportantGI: 0 264 | m_StitchLightmapSeams: 1 265 | m_SelectedEditorRenderState: 3 266 | m_MinimumChartSize: 4 267 | m_AutoUVMaxDistance: 0.5 268 | m_AutoUVMaxAngle: 89 269 | m_LightmapParameters: {fileID: 0} 270 | m_SortingLayerID: 0 271 | m_SortingLayer: 0 272 | m_SortingOrder: 0 273 | m_AdditionalVertexStreams: {fileID: 0} 274 | --- !u!136 &8179720575216243068 275 | CapsuleCollider: 276 | m_ObjectHideFlags: 0 277 | m_CorrespondingSourceObject: {fileID: 0} 278 | m_PrefabInstance: {fileID: 0} 279 | m_PrefabAsset: {fileID: 0} 280 | m_GameObject: {fileID: 8179720575216243010} 281 | m_Material: {fileID: 0} 282 | m_IsTrigger: 0 283 | m_Enabled: 1 284 | m_Radius: 0.5 285 | m_Height: 2 286 | m_Direction: 1 287 | m_Center: {x: 0, y: 0, z: 0} 288 | --- !u!143 &8179720575216243011 289 | CharacterController: 290 | m_ObjectHideFlags: 0 291 | m_CorrespondingSourceObject: {fileID: 0} 292 | m_PrefabInstance: {fileID: 0} 293 | m_PrefabAsset: {fileID: 0} 294 | m_GameObject: {fileID: 8179720575216243010} 295 | m_Material: {fileID: 0} 296 | m_IsTrigger: 0 297 | m_Enabled: 1 298 | serializedVersion: 2 299 | m_Height: 2 300 | m_Radius: 0.5 301 | m_SlopeLimit: 45 302 | m_StepOffset: 0.3 303 | m_SkinWidth: 0.08 304 | m_MinMoveDistance: 0.001 305 | m_Center: {x: 0, y: 0, z: 0} 306 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Prefabs/Demo_01_Controller.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 67b9a9aa070ff444dbbd3328dd82fa5d 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Prefabs/Demo_01_HealthBar.prefab: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1 &6661626836811241839 4 | GameObject: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | serializedVersion: 6 10 | m_Component: 11 | - component: {fileID: 6661626836811241824} 12 | - component: {fileID: 1701181533039168581} 13 | - component: {fileID: 6661626836811241826} 14 | - component: {fileID: 6661626836811241825} 15 | m_Layer: 5 16 | m_Name: Demo_01_HealthBar 17 | m_TagString: Untagged 18 | m_Icon: {fileID: 0} 19 | m_NavMeshLayer: 0 20 | m_StaticEditorFlags: 0 21 | m_IsActive: 1 22 | --- !u!224 &6661626836811241824 23 | RectTransform: 24 | m_ObjectHideFlags: 0 25 | m_CorrespondingSourceObject: {fileID: 0} 26 | m_PrefabInstance: {fileID: 0} 27 | m_PrefabAsset: {fileID: 0} 28 | m_GameObject: {fileID: 6661626836811241839} 29 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 30 | m_LocalPosition: {x: 0, y: 0, z: 0} 31 | m_LocalScale: {x: 1, y: 1, z: 1} 32 | m_ConstrainProportionsScale: 0 33 | m_Children: 34 | - {fileID: 6661626837791717748} 35 | m_Father: {fileID: 0} 36 | m_RootOrder: 0 37 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 38 | m_AnchorMin: {x: 0, y: 0} 39 | m_AnchorMax: {x: 0, y: 0} 40 | m_AnchoredPosition: {x: 232, y: 56.5} 41 | m_SizeDelta: {x: 388, y: 35} 42 | m_Pivot: {x: 0.5, y: 0.5} 43 | --- !u!114 &1701181533039168581 44 | MonoBehaviour: 45 | m_ObjectHideFlags: 0 46 | m_CorrespondingSourceObject: {fileID: 0} 47 | m_PrefabInstance: {fileID: 0} 48 | m_PrefabAsset: {fileID: 0} 49 | m_GameObject: {fileID: 6661626836811241839} 50 | m_Enabled: 1 51 | m_EditorHideFlags: 0 52 | m_Script: {fileID: 11500000, guid: 01b9790af4a472e43a56003166eeca8a, type: 3} 53 | m_Name: 54 | m_EditorClassIdentifier: 55 | bar: {fileID: 6661626837791717746} 56 | rect: {fileID: 6661626836811241824} 57 | --- !u!222 &6661626836811241826 58 | CanvasRenderer: 59 | m_ObjectHideFlags: 0 60 | m_CorrespondingSourceObject: {fileID: 0} 61 | m_PrefabInstance: {fileID: 0} 62 | m_PrefabAsset: {fileID: 0} 63 | m_GameObject: {fileID: 6661626836811241839} 64 | m_CullTransparentMesh: 1 65 | --- !u!114 &6661626836811241825 66 | MonoBehaviour: 67 | m_ObjectHideFlags: 0 68 | m_CorrespondingSourceObject: {fileID: 0} 69 | m_PrefabInstance: {fileID: 0} 70 | m_PrefabAsset: {fileID: 0} 71 | m_GameObject: {fileID: 6661626836811241839} 72 | m_Enabled: 1 73 | m_EditorHideFlags: 0 74 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} 75 | m_Name: 76 | m_EditorClassIdentifier: 77 | m_Material: {fileID: 0} 78 | m_Color: {r: 0, g: 0, b: 0, a: 0.39215687} 79 | m_RaycastTarget: 1 80 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 81 | m_Maskable: 1 82 | m_OnCullStateChanged: 83 | m_PersistentCalls: 84 | m_Calls: [] 85 | m_Sprite: {fileID: 21300000, guid: b357d002755571b4baa3dcc9eb5a4bfe, type: 3} 86 | m_Type: 3 87 | m_PreserveAspect: 0 88 | m_FillCenter: 1 89 | m_FillMethod: 4 90 | m_FillAmount: 1 91 | m_FillClockwise: 1 92 | m_FillOrigin: 0 93 | m_UseSpriteMesh: 0 94 | m_PixelsPerUnitMultiplier: 1 95 | --- !u!1 &6661626837791717745 96 | GameObject: 97 | m_ObjectHideFlags: 0 98 | m_CorrespondingSourceObject: {fileID: 0} 99 | m_PrefabInstance: {fileID: 0} 100 | m_PrefabAsset: {fileID: 0} 101 | serializedVersion: 6 102 | m_Component: 103 | - component: {fileID: 6661626837791717748} 104 | - component: {fileID: 6661626837791717747} 105 | - component: {fileID: 6661626837791717746} 106 | m_Layer: 5 107 | m_Name: HealthBar 108 | m_TagString: Untagged 109 | m_Icon: {fileID: 0} 110 | m_NavMeshLayer: 0 111 | m_StaticEditorFlags: 0 112 | m_IsActive: 1 113 | --- !u!224 &6661626837791717748 114 | RectTransform: 115 | m_ObjectHideFlags: 0 116 | m_CorrespondingSourceObject: {fileID: 0} 117 | m_PrefabInstance: {fileID: 0} 118 | m_PrefabAsset: {fileID: 0} 119 | m_GameObject: {fileID: 6661626837791717745} 120 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 121 | m_LocalPosition: {x: 0, y: 0, z: 0} 122 | m_LocalScale: {x: 1, y: 1, z: 1} 123 | m_ConstrainProportionsScale: 0 124 | m_Children: [] 125 | m_Father: {fileID: 6661626836811241824} 126 | m_RootOrder: 0 127 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 128 | m_AnchorMin: {x: 0, y: 0} 129 | m_AnchorMax: {x: 1, y: 1} 130 | m_AnchoredPosition: {x: 0, y: 0} 131 | m_SizeDelta: {x: 0, y: 0} 132 | m_Pivot: {x: 0.5, y: 0.5} 133 | --- !u!222 &6661626837791717747 134 | CanvasRenderer: 135 | m_ObjectHideFlags: 0 136 | m_CorrespondingSourceObject: {fileID: 0} 137 | m_PrefabInstance: {fileID: 0} 138 | m_PrefabAsset: {fileID: 0} 139 | m_GameObject: {fileID: 6661626837791717745} 140 | m_CullTransparentMesh: 1 141 | --- !u!114 &6661626837791717746 142 | MonoBehaviour: 143 | m_ObjectHideFlags: 0 144 | m_CorrespondingSourceObject: {fileID: 0} 145 | m_PrefabInstance: {fileID: 0} 146 | m_PrefabAsset: {fileID: 0} 147 | m_GameObject: {fileID: 6661626837791717745} 148 | m_Enabled: 1 149 | m_EditorHideFlags: 0 150 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} 151 | m_Name: 152 | m_EditorClassIdentifier: 153 | m_Material: {fileID: 0} 154 | m_Color: {r: 1, g: 0, b: 0.12366676, a: 1} 155 | m_RaycastTarget: 1 156 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 157 | m_Maskable: 1 158 | m_OnCullStateChanged: 159 | m_PersistentCalls: 160 | m_Calls: [] 161 | m_Sprite: {fileID: 21300000, guid: b357d002755571b4baa3dcc9eb5a4bfe, type: 3} 162 | m_Type: 3 163 | m_PreserveAspect: 0 164 | m_FillCenter: 1 165 | m_FillMethod: 0 166 | m_FillAmount: 0.618 167 | m_FillClockwise: 1 168 | m_FillOrigin: 0 169 | m_UseSpriteMesh: 0 170 | m_PixelsPerUnitMultiplier: 1 171 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Prefabs/Demo_01_HealthBar.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c51e935e45c3dc548aca14bc4efdf83b 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Prefabs/Demo_01_LobbyPlayer.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 513493d011547134b88ba9cfdc5cb30d 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Prefabs/Demo_01_Projectile.prefab: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1 &730868469917585499 4 | GameObject: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | serializedVersion: 6 10 | m_Component: 11 | - component: {fileID: 567411564411354552} 12 | - component: {fileID: 1982748803318845165} 13 | - component: {fileID: 7831153287286355946} 14 | - component: {fileID: 1710605133055960892} 15 | - component: {fileID: 2895379911470820600} 16 | - component: {fileID: 1483923622540298821} 17 | - component: {fileID: 8071348196252688511} 18 | m_Layer: 0 19 | m_Name: Demo_01_Projectile 20 | m_TagString: Untagged 21 | m_Icon: {fileID: 0} 22 | m_NavMeshLayer: 0 23 | m_StaticEditorFlags: 0 24 | m_IsActive: 1 25 | --- !u!4 &567411564411354552 26 | Transform: 27 | m_ObjectHideFlags: 0 28 | m_CorrespondingSourceObject: {fileID: 0} 29 | m_PrefabInstance: {fileID: 0} 30 | m_PrefabAsset: {fileID: 0} 31 | m_GameObject: {fileID: 730868469917585499} 32 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 33 | m_LocalPosition: {x: -2.719, y: 0.928, z: 0} 34 | m_LocalScale: {x: 0.4, y: 0.4, z: 0.4} 35 | m_ConstrainProportionsScale: 0 36 | m_Children: [] 37 | m_Father: {fileID: 0} 38 | m_RootOrder: 0 39 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 40 | --- !u!114 &1982748803318845165 41 | MonoBehaviour: 42 | m_ObjectHideFlags: 0 43 | m_CorrespondingSourceObject: {fileID: 0} 44 | m_PrefabInstance: {fileID: 0} 45 | m_PrefabAsset: {fileID: 0} 46 | m_GameObject: {fileID: 730868469917585499} 47 | m_Enabled: 1 48 | m_EditorHideFlags: 0 49 | m_Script: {fileID: 11500000, guid: 41e6c3eb20397554eb1aece2df8d73ad, type: 3} 50 | m_Name: 51 | m_EditorClassIdentifier: 52 | _id: 29c16680-c05c-4561-96a0-5d5ae48fc35b 53 | _syncTransform: 1 54 | _uncontrolledRigidbody: 1 55 | _syncAnimation: 0 56 | --- !u!114 &7831153287286355946 57 | MonoBehaviour: 58 | m_ObjectHideFlags: 0 59 | m_CorrespondingSourceObject: {fileID: 0} 60 | m_PrefabInstance: {fileID: 0} 61 | m_PrefabAsset: {fileID: 0} 62 | m_GameObject: {fileID: 730868469917585499} 63 | m_Enabled: 1 64 | m_EditorHideFlags: 0 65 | m_Script: {fileID: 11500000, guid: 4ab01da17fe2d2e429632121f62e00fd, type: 3} 66 | m_Name: 67 | m_EditorClassIdentifier: 68 | --- !u!33 &1710605133055960892 69 | MeshFilter: 70 | m_ObjectHideFlags: 0 71 | m_CorrespondingSourceObject: {fileID: 0} 72 | m_PrefabInstance: {fileID: 0} 73 | m_PrefabAsset: {fileID: 0} 74 | m_GameObject: {fileID: 730868469917585499} 75 | m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} 76 | --- !u!23 &2895379911470820600 77 | MeshRenderer: 78 | m_ObjectHideFlags: 0 79 | m_CorrespondingSourceObject: {fileID: 0} 80 | m_PrefabInstance: {fileID: 0} 81 | m_PrefabAsset: {fileID: 0} 82 | m_GameObject: {fileID: 730868469917585499} 83 | m_Enabled: 1 84 | m_CastShadows: 1 85 | m_ReceiveShadows: 1 86 | m_DynamicOccludee: 1 87 | m_StaticShadowCaster: 0 88 | m_MotionVectors: 1 89 | m_LightProbeUsage: 1 90 | m_ReflectionProbeUsage: 1 91 | m_RayTracingMode: 2 92 | m_RayTraceProcedural: 0 93 | m_RenderingLayerMask: 1 94 | m_RendererPriority: 0 95 | m_Materials: 96 | - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} 97 | m_StaticBatchInfo: 98 | firstSubMesh: 0 99 | subMeshCount: 0 100 | m_StaticBatchRoot: {fileID: 0} 101 | m_ProbeAnchor: {fileID: 0} 102 | m_LightProbeVolumeOverride: {fileID: 0} 103 | m_ScaleInLightmap: 1 104 | m_ReceiveGI: 1 105 | m_PreserveUVs: 0 106 | m_IgnoreNormalsForChartDetection: 0 107 | m_ImportantGI: 0 108 | m_StitchLightmapSeams: 1 109 | m_SelectedEditorRenderState: 3 110 | m_MinimumChartSize: 4 111 | m_AutoUVMaxDistance: 0.5 112 | m_AutoUVMaxAngle: 89 113 | m_LightmapParameters: {fileID: 0} 114 | m_SortingLayerID: 0 115 | m_SortingLayer: 0 116 | m_SortingOrder: 0 117 | m_AdditionalVertexStreams: {fileID: 0} 118 | --- !u!135 &1483923622540298821 119 | SphereCollider: 120 | m_ObjectHideFlags: 0 121 | m_CorrespondingSourceObject: {fileID: 0} 122 | m_PrefabInstance: {fileID: 0} 123 | m_PrefabAsset: {fileID: 0} 124 | m_GameObject: {fileID: 730868469917585499} 125 | m_Material: {fileID: 0} 126 | m_IsTrigger: 0 127 | m_Enabled: 1 128 | serializedVersion: 2 129 | m_Radius: 0.5 130 | m_Center: {x: 0, y: 0, z: 0} 131 | --- !u!54 &8071348196252688511 132 | Rigidbody: 133 | m_ObjectHideFlags: 0 134 | m_CorrespondingSourceObject: {fileID: 0} 135 | m_PrefabInstance: {fileID: 0} 136 | m_PrefabAsset: {fileID: 0} 137 | m_GameObject: {fileID: 730868469917585499} 138 | serializedVersion: 2 139 | m_Mass: 1 140 | m_Drag: 0 141 | m_AngularDrag: 0.05 142 | m_UseGravity: 1 143 | m_IsKinematic: 0 144 | m_Interpolate: 0 145 | m_Constraints: 0 146 | m_CollisionDetection: 0 147 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Prefabs/Demo_01_Projectile.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 734e67b01e83e194697f52aa25b28e34 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Prefabs/Demo_01_Room.prefab: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1 &661073485391064260 4 | GameObject: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | serializedVersion: 6 10 | m_Component: 11 | - component: {fileID: 661073485391064263} 12 | - component: {fileID: 661073485391064281} 13 | - component: {fileID: 661073485391064262} 14 | m_Layer: 5 15 | m_Name: Background 16 | m_TagString: Untagged 17 | m_Icon: {fileID: 0} 18 | m_NavMeshLayer: 0 19 | m_StaticEditorFlags: 0 20 | m_IsActive: 1 21 | --- !u!224 &661073485391064263 22 | RectTransform: 23 | m_ObjectHideFlags: 0 24 | m_CorrespondingSourceObject: {fileID: 0} 25 | m_PrefabInstance: {fileID: 0} 26 | m_PrefabAsset: {fileID: 0} 27 | m_GameObject: {fileID: 661073485391064260} 28 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 29 | m_LocalPosition: {x: 0, y: 0, z: 0} 30 | m_LocalScale: {x: 1, y: 1, z: 1} 31 | m_ConstrainProportionsScale: 0 32 | m_Children: [] 33 | m_Father: {fileID: 661073486307667241} 34 | m_RootOrder: 0 35 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 36 | m_AnchorMin: {x: 0, y: 0.05} 37 | m_AnchorMax: {x: 1, y: 0.9} 38 | m_AnchoredPosition: {x: 0, y: 0} 39 | m_SizeDelta: {x: 0, y: 0} 40 | m_Pivot: {x: 0.5, y: 0.5} 41 | --- !u!222 &661073485391064281 42 | CanvasRenderer: 43 | m_ObjectHideFlags: 0 44 | m_CorrespondingSourceObject: {fileID: 0} 45 | m_PrefabInstance: {fileID: 0} 46 | m_PrefabAsset: {fileID: 0} 47 | m_GameObject: {fileID: 661073485391064260} 48 | m_CullTransparentMesh: 1 49 | --- !u!114 &661073485391064262 50 | MonoBehaviour: 51 | m_ObjectHideFlags: 0 52 | m_CorrespondingSourceObject: {fileID: 0} 53 | m_PrefabInstance: {fileID: 0} 54 | m_PrefabAsset: {fileID: 0} 55 | m_GameObject: {fileID: 661073485391064260} 56 | m_Enabled: 1 57 | m_EditorHideFlags: 0 58 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} 59 | m_Name: 60 | m_EditorClassIdentifier: 61 | m_Material: {fileID: 0} 62 | m_Color: {r: 0.7075472, g: 0.7042097, b: 0.7042097, a: 0.392} 63 | m_RaycastTarget: 1 64 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 65 | m_Maskable: 1 66 | m_OnCullStateChanged: 67 | m_PersistentCalls: 68 | m_Calls: [] 69 | m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} 70 | m_Type: 1 71 | m_PreserveAspect: 0 72 | m_FillCenter: 1 73 | m_FillMethod: 4 74 | m_FillAmount: 1 75 | m_FillClockwise: 1 76 | m_FillOrigin: 0 77 | m_UseSpriteMesh: 0 78 | m_PixelsPerUnitMultiplier: 1 79 | --- !u!1 &661073486137571719 80 | GameObject: 81 | m_ObjectHideFlags: 0 82 | m_CorrespondingSourceObject: {fileID: 0} 83 | m_PrefabInstance: {fileID: 0} 84 | m_PrefabAsset: {fileID: 0} 85 | serializedVersion: 6 86 | m_Component: 87 | - component: {fileID: 661073486137571718} 88 | - component: {fileID: 661073486137571739} 89 | - component: {fileID: 661073486137571736} 90 | - component: {fileID: 661073486137571737} 91 | m_Layer: 5 92 | m_Name: ButtonJoin 93 | m_TagString: Untagged 94 | m_Icon: {fileID: 0} 95 | m_NavMeshLayer: 0 96 | m_StaticEditorFlags: 0 97 | m_IsActive: 1 98 | --- !u!224 &661073486137571718 99 | RectTransform: 100 | m_ObjectHideFlags: 0 101 | m_CorrespondingSourceObject: {fileID: 0} 102 | m_PrefabInstance: {fileID: 0} 103 | m_PrefabAsset: {fileID: 0} 104 | m_GameObject: {fileID: 661073486137571719} 105 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 106 | m_LocalPosition: {x: 0, y: 0, z: 0} 107 | m_LocalScale: {x: 1, y: 1, z: 1} 108 | m_ConstrainProportionsScale: 0 109 | m_Children: 110 | - {fileID: 661073486379708460} 111 | m_Father: {fileID: 661073486307667241} 112 | m_RootOrder: 3 113 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 114 | m_AnchorMin: {x: 0.744, y: 0.16000001} 115 | m_AnchorMax: {x: 0.9854253, y: 0.75} 116 | m_AnchoredPosition: {x: 0, y: 0} 117 | m_SizeDelta: {x: 0, y: 0} 118 | m_Pivot: {x: 0.5, y: 0.5} 119 | --- !u!222 &661073486137571739 120 | CanvasRenderer: 121 | m_ObjectHideFlags: 0 122 | m_CorrespondingSourceObject: {fileID: 0} 123 | m_PrefabInstance: {fileID: 0} 124 | m_PrefabAsset: {fileID: 0} 125 | m_GameObject: {fileID: 661073486137571719} 126 | m_CullTransparentMesh: 1 127 | --- !u!114 &661073486137571736 128 | MonoBehaviour: 129 | m_ObjectHideFlags: 0 130 | m_CorrespondingSourceObject: {fileID: 0} 131 | m_PrefabInstance: {fileID: 0} 132 | m_PrefabAsset: {fileID: 0} 133 | m_GameObject: {fileID: 661073486137571719} 134 | m_Enabled: 1 135 | m_EditorHideFlags: 0 136 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} 137 | m_Name: 138 | m_EditorClassIdentifier: 139 | m_Material: {fileID: 0} 140 | m_Color: {r: 1, g: 1, b: 1, a: 1} 141 | m_RaycastTarget: 1 142 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 143 | m_Maskable: 1 144 | m_OnCullStateChanged: 145 | m_PersistentCalls: 146 | m_Calls: [] 147 | m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} 148 | m_Type: 1 149 | m_PreserveAspect: 0 150 | m_FillCenter: 1 151 | m_FillMethod: 4 152 | m_FillAmount: 1 153 | m_FillClockwise: 1 154 | m_FillOrigin: 0 155 | m_UseSpriteMesh: 0 156 | m_PixelsPerUnitMultiplier: 1 157 | --- !u!114 &661073486137571737 158 | MonoBehaviour: 159 | m_ObjectHideFlags: 0 160 | m_CorrespondingSourceObject: {fileID: 0} 161 | m_PrefabInstance: {fileID: 0} 162 | m_PrefabAsset: {fileID: 0} 163 | m_GameObject: {fileID: 661073486137571719} 164 | m_Enabled: 1 165 | m_EditorHideFlags: 0 166 | m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} 167 | m_Name: 168 | m_EditorClassIdentifier: 169 | m_Navigation: 170 | m_Mode: 3 171 | m_WrapAround: 0 172 | m_SelectOnUp: {fileID: 0} 173 | m_SelectOnDown: {fileID: 0} 174 | m_SelectOnLeft: {fileID: 0} 175 | m_SelectOnRight: {fileID: 0} 176 | m_Transition: 1 177 | m_Colors: 178 | m_NormalColor: {r: 1, g: 1, b: 1, a: 1} 179 | m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} 180 | m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} 181 | m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} 182 | m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} 183 | m_ColorMultiplier: 1 184 | m_FadeDuration: 0.1 185 | m_SpriteState: 186 | m_HighlightedSprite: {fileID: 0} 187 | m_PressedSprite: {fileID: 0} 188 | m_SelectedSprite: {fileID: 0} 189 | m_DisabledSprite: {fileID: 0} 190 | m_AnimationTriggers: 191 | m_NormalTrigger: Normal 192 | m_HighlightedTrigger: Highlighted 193 | m_PressedTrigger: Pressed 194 | m_SelectedTrigger: Selected 195 | m_DisabledTrigger: Disabled 196 | m_Interactable: 1 197 | m_TargetGraphic: {fileID: 661073486137571736} 198 | m_OnClick: 199 | m_PersistentCalls: 200 | m_Calls: [] 201 | --- !u!1 &661073486307667414 202 | GameObject: 203 | m_ObjectHideFlags: 0 204 | m_CorrespondingSourceObject: {fileID: 0} 205 | m_PrefabInstance: {fileID: 0} 206 | m_PrefabAsset: {fileID: 0} 207 | serializedVersion: 6 208 | m_Component: 209 | - component: {fileID: 661073486307667241} 210 | - component: {fileID: 661073486307667240} 211 | m_Layer: 5 212 | m_Name: Demo_01_Room 213 | m_TagString: Untagged 214 | m_Icon: {fileID: 0} 215 | m_NavMeshLayer: 0 216 | m_StaticEditorFlags: 0 217 | m_IsActive: 1 218 | --- !u!224 &661073486307667241 219 | RectTransform: 220 | m_ObjectHideFlags: 0 221 | m_CorrespondingSourceObject: {fileID: 0} 222 | m_PrefabInstance: {fileID: 0} 223 | m_PrefabAsset: {fileID: 0} 224 | m_GameObject: {fileID: 661073486307667414} 225 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 226 | m_LocalPosition: {x: 0, y: 0, z: 0} 227 | m_LocalScale: {x: 1, y: 1, z: 1} 228 | m_ConstrainProportionsScale: 0 229 | m_Children: 230 | - {fileID: 661073485391064263} 231 | - {fileID: 661073486321731067} 232 | - {fileID: 661073486410162901} 233 | - {fileID: 661073486137571718} 234 | m_Father: {fileID: 0} 235 | m_RootOrder: 0 236 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 237 | m_AnchorMin: {x: 0, y: 0} 238 | m_AnchorMax: {x: 0, y: 0} 239 | m_AnchoredPosition: {x: 0, y: 0} 240 | m_SizeDelta: {x: 0, y: 150} 241 | m_Pivot: {x: 0.5, y: 0.5} 242 | --- !u!114 &661073486307667240 243 | MonoBehaviour: 244 | m_ObjectHideFlags: 0 245 | m_CorrespondingSourceObject: {fileID: 0} 246 | m_PrefabInstance: {fileID: 0} 247 | m_PrefabAsset: {fileID: 0} 248 | m_GameObject: {fileID: 661073486307667414} 249 | m_Enabled: 1 250 | m_EditorHideFlags: 0 251 | m_Script: {fileID: 11500000, guid: dac064513f8c0794c97854f0f02b0529, type: 3} 252 | m_Name: 253 | m_EditorClassIdentifier: 254 | buttonJoin: {fileID: 661073486137571737} 255 | textUsername: {fileID: 661073486321731066} 256 | textCapacity: {fileID: 661073486410162900} 257 | --- !u!1 &661073486321731064 258 | GameObject: 259 | m_ObjectHideFlags: 0 260 | m_CorrespondingSourceObject: {fileID: 0} 261 | m_PrefabInstance: {fileID: 0} 262 | m_PrefabAsset: {fileID: 0} 263 | serializedVersion: 6 264 | m_Component: 265 | - component: {fileID: 661073486321731067} 266 | - component: {fileID: 661073486321731069} 267 | - component: {fileID: 661073486321731066} 268 | m_Layer: 5 269 | m_Name: Username 270 | m_TagString: Untagged 271 | m_Icon: {fileID: 0} 272 | m_NavMeshLayer: 0 273 | m_StaticEditorFlags: 0 274 | m_IsActive: 1 275 | --- !u!224 &661073486321731067 276 | RectTransform: 277 | m_ObjectHideFlags: 0 278 | m_CorrespondingSourceObject: {fileID: 0} 279 | m_PrefabInstance: {fileID: 0} 280 | m_PrefabAsset: {fileID: 0} 281 | m_GameObject: {fileID: 661073486321731064} 282 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 283 | m_LocalPosition: {x: 0, y: 0, z: 0} 284 | m_LocalScale: {x: 1, y: 1, z: 1} 285 | m_ConstrainProportionsScale: 0 286 | m_Children: [] 287 | m_Father: {fileID: 661073486307667241} 288 | m_RootOrder: 1 289 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 290 | m_AnchorMin: {x: 0.037, y: 0.16000001} 291 | m_AnchorMax: {x: 0.5, y: 0.75} 292 | m_AnchoredPosition: {x: 0, y: 0} 293 | m_SizeDelta: {x: 0, y: 0} 294 | m_Pivot: {x: 0.5, y: 0.5} 295 | --- !u!222 &661073486321731069 296 | CanvasRenderer: 297 | m_ObjectHideFlags: 0 298 | m_CorrespondingSourceObject: {fileID: 0} 299 | m_PrefabInstance: {fileID: 0} 300 | m_PrefabAsset: {fileID: 0} 301 | m_GameObject: {fileID: 661073486321731064} 302 | m_CullTransparentMesh: 1 303 | --- !u!114 &661073486321731066 304 | MonoBehaviour: 305 | m_ObjectHideFlags: 0 306 | m_CorrespondingSourceObject: {fileID: 0} 307 | m_PrefabInstance: {fileID: 0} 308 | m_PrefabAsset: {fileID: 0} 309 | m_GameObject: {fileID: 661073486321731064} 310 | m_Enabled: 1 311 | m_EditorHideFlags: 0 312 | m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} 313 | m_Name: 314 | m_EditorClassIdentifier: 315 | m_Material: {fileID: 0} 316 | m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} 317 | m_RaycastTarget: 1 318 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 319 | m_Maskable: 1 320 | m_OnCullStateChanged: 321 | m_PersistentCalls: 322 | m_Calls: [] 323 | m_FontData: 324 | m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} 325 | m_FontSize: 40 326 | m_FontStyle: 1 327 | m_BestFit: 0 328 | m_MinSize: 2 329 | m_MaxSize: 40 330 | m_Alignment: 3 331 | m_AlignByGeometry: 0 332 | m_RichText: 1 333 | m_HorizontalOverflow: 0 334 | m_VerticalOverflow: 0 335 | m_LineSpacing: 1 336 | m_Text: Host Name 337 | --- !u!1 &661073486379708461 338 | GameObject: 339 | m_ObjectHideFlags: 0 340 | m_CorrespondingSourceObject: {fileID: 0} 341 | m_PrefabInstance: {fileID: 0} 342 | m_PrefabAsset: {fileID: 0} 343 | serializedVersion: 6 344 | m_Component: 345 | - component: {fileID: 661073486379708460} 346 | - component: {fileID: 661073486379708462} 347 | - component: {fileID: 661073486379708463} 348 | m_Layer: 5 349 | m_Name: Text 350 | m_TagString: Untagged 351 | m_Icon: {fileID: 0} 352 | m_NavMeshLayer: 0 353 | m_StaticEditorFlags: 0 354 | m_IsActive: 1 355 | --- !u!224 &661073486379708460 356 | RectTransform: 357 | m_ObjectHideFlags: 0 358 | m_CorrespondingSourceObject: {fileID: 0} 359 | m_PrefabInstance: {fileID: 0} 360 | m_PrefabAsset: {fileID: 0} 361 | m_GameObject: {fileID: 661073486379708461} 362 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 363 | m_LocalPosition: {x: 0, y: 0, z: 0} 364 | m_LocalScale: {x: 1, y: 1, z: 1} 365 | m_ConstrainProportionsScale: 0 366 | m_Children: [] 367 | m_Father: {fileID: 661073486137571718} 368 | m_RootOrder: 0 369 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 370 | m_AnchorMin: {x: 0, y: 0.1} 371 | m_AnchorMax: {x: 1, y: 0.9} 372 | m_AnchoredPosition: {x: 0, y: 0} 373 | m_SizeDelta: {x: 0, y: 0} 374 | m_Pivot: {x: 0.5, y: 0.5} 375 | --- !u!222 &661073486379708462 376 | CanvasRenderer: 377 | m_ObjectHideFlags: 0 378 | m_CorrespondingSourceObject: {fileID: 0} 379 | m_PrefabInstance: {fileID: 0} 380 | m_PrefabAsset: {fileID: 0} 381 | m_GameObject: {fileID: 661073486379708461} 382 | m_CullTransparentMesh: 1 383 | --- !u!114 &661073486379708463 384 | MonoBehaviour: 385 | m_ObjectHideFlags: 0 386 | m_CorrespondingSourceObject: {fileID: 0} 387 | m_PrefabInstance: {fileID: 0} 388 | m_PrefabAsset: {fileID: 0} 389 | m_GameObject: {fileID: 661073486379708461} 390 | m_Enabled: 1 391 | m_EditorHideFlags: 0 392 | m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} 393 | m_Name: 394 | m_EditorClassIdentifier: 395 | m_Material: {fileID: 0} 396 | m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} 397 | m_RaycastTarget: 1 398 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 399 | m_Maskable: 1 400 | m_OnCullStateChanged: 401 | m_PersistentCalls: 402 | m_Calls: [] 403 | m_FontData: 404 | m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} 405 | m_FontSize: 14 406 | m_FontStyle: 1 407 | m_BestFit: 1 408 | m_MinSize: 10 409 | m_MaxSize: 40 410 | m_Alignment: 4 411 | m_AlignByGeometry: 0 412 | m_RichText: 1 413 | m_HorizontalOverflow: 0 414 | m_VerticalOverflow: 0 415 | m_LineSpacing: 1 416 | m_Text: Join 417 | --- !u!1 &661073486410162898 418 | GameObject: 419 | m_ObjectHideFlags: 0 420 | m_CorrespondingSourceObject: {fileID: 0} 421 | m_PrefabInstance: {fileID: 0} 422 | m_PrefabAsset: {fileID: 0} 423 | serializedVersion: 6 424 | m_Component: 425 | - component: {fileID: 661073486410162901} 426 | - component: {fileID: 661073486410162903} 427 | - component: {fileID: 661073486410162900} 428 | m_Layer: 5 429 | m_Name: Capacity 430 | m_TagString: Untagged 431 | m_Icon: {fileID: 0} 432 | m_NavMeshLayer: 0 433 | m_StaticEditorFlags: 0 434 | m_IsActive: 1 435 | --- !u!224 &661073486410162901 436 | RectTransform: 437 | m_ObjectHideFlags: 0 438 | m_CorrespondingSourceObject: {fileID: 0} 439 | m_PrefabInstance: {fileID: 0} 440 | m_PrefabAsset: {fileID: 0} 441 | m_GameObject: {fileID: 661073486410162898} 442 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 443 | m_LocalPosition: {x: 0, y: 0, z: 0} 444 | m_LocalScale: {x: 1, y: 1, z: 1} 445 | m_ConstrainProportionsScale: 0 446 | m_Children: [] 447 | m_Father: {fileID: 661073486307667241} 448 | m_RootOrder: 2 449 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 450 | m_AnchorMin: {x: 0.51, y: 0.16000001} 451 | m_AnchorMax: {x: 0.72, y: 0.75} 452 | m_AnchoredPosition: {x: 0, y: 0} 453 | m_SizeDelta: {x: 0, y: 0} 454 | m_Pivot: {x: 0.5, y: 0.5} 455 | --- !u!222 &661073486410162903 456 | CanvasRenderer: 457 | m_ObjectHideFlags: 0 458 | m_CorrespondingSourceObject: {fileID: 0} 459 | m_PrefabInstance: {fileID: 0} 460 | m_PrefabAsset: {fileID: 0} 461 | m_GameObject: {fileID: 661073486410162898} 462 | m_CullTransparentMesh: 1 463 | --- !u!114 &661073486410162900 464 | MonoBehaviour: 465 | m_ObjectHideFlags: 0 466 | m_CorrespondingSourceObject: {fileID: 0} 467 | m_PrefabInstance: {fileID: 0} 468 | m_PrefabAsset: {fileID: 0} 469 | m_GameObject: {fileID: 661073486410162898} 470 | m_Enabled: 1 471 | m_EditorHideFlags: 0 472 | m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} 473 | m_Name: 474 | m_EditorClassIdentifier: 475 | m_Material: {fileID: 0} 476 | m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} 477 | m_RaycastTarget: 1 478 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} 479 | m_Maskable: 1 480 | m_OnCullStateChanged: 481 | m_PersistentCalls: 482 | m_Calls: [] 483 | m_FontData: 484 | m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} 485 | m_FontSize: 40 486 | m_FontStyle: 1 487 | m_BestFit: 0 488 | m_MinSize: 2 489 | m_MaxSize: 40 490 | m_Alignment: 4 491 | m_AlignByGeometry: 0 492 | m_RichText: 1 493 | m_HorizontalOverflow: 0 494 | m_VerticalOverflow: 0 495 | m_LineSpacing: 1 496 | m_Text: 999/999 497 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Prefabs/Demo_01_Room.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 73f921b36a3da304abdce843625a3972 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Scenes.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f921886b77d5a48499e46c0f5d91afdb 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Scenes/Demo_01_1_Menu.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bfcd5d9746e87994ea14dc922fc29c3e 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Scenes/Demo_01_2_Game.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 10bc01d0cf58a4a4fb0a176cf3e5c908 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Scripts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: df0ae0b08c27ba046b6920a7cceab23a 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Scripts/Demo_01_Controller.cs: -------------------------------------------------------------------------------- 1 | namespace DevelopersHub.RealtimeNetworking.Client.Demo 2 | { 3 | using System.Collections; 4 | using System.Collections.Generic; 5 | using UnityEngine; 6 | 7 | public class Demo_01_Controller : MonoBehaviour 8 | { 9 | 10 | [SyncVariable(whoCanChange = SyncVariable.WhoCanChange.Host)] public int health = 100; 11 | 12 | [SerializeField] private int _damage = 5; 13 | [SerializeField] private float _fireRate = 0.5f; 14 | [SerializeField] private float _moveSpeed = 6f; 15 | [SerializeField] private Demo_01_HealthBar _healthPrefab = null; 16 | [SerializeField] public Transform _head = null; 17 | [SerializeField] private int _bulletPrefabIndex = 1; 18 | [SerializeField] public Transform _gunMuzzle = null; 19 | 20 | private float _fireTimer = 0; 21 | private CharacterController _controller = null; 22 | private NetworkObject _object = null; 23 | private Vector3 _velocity = Vector3.zero; 24 | private Demo_01_HealthBar _healthBar = null; 25 | private Canvas _canvas = null; 26 | private Camera _camera = null; 27 | 28 | private void Start() 29 | { 30 | health = 100; 31 | _canvas = FindFirstObjectByType(); 32 | _camera = Camera.main; 33 | _object = GetComponent(); 34 | if (_object != null && _object.isOwner) 35 | { 36 | _controller = GetComponent(); 37 | if(_camera != null) 38 | { 39 | _camera.transform.SetParent(transform, false); 40 | _camera.transform.localPosition = new Vector3(0, 6, -4); 41 | _camera.transform.localEulerAngles = new Vector3(45, 0, 0); 42 | } 43 | } 44 | if(_healthPrefab != null) 45 | { 46 | _healthBar = Instantiate(_healthPrefab, _canvas.transform); 47 | _healthBar.bar.fillAmount = health / 100f; 48 | } 49 | } 50 | 51 | private void Update() 52 | { 53 | if(_healthBar != null) 54 | { 55 | if(_head != null && _canvas != null && _camera != null) 56 | { 57 | Vector2 position = _camera.WorldToScreenPoint(_head.position) / _canvas.scaleFactor; 58 | _healthBar.rect.anchoredPosition = position; 59 | } 60 | _healthBar.bar.fillAmount = health / 100f; 61 | } 62 | if (_object == null || _object.isOwner == false) 63 | { 64 | return; 65 | } 66 | Vector2 input = Vector2.zero; 67 | if (Input.GetKey(KeyCode.W)) { input.y = 1; } 68 | else if (Input.GetKey(KeyCode.S)) { input.y = -1; } 69 | if (Input.GetKey(KeyCode.D)) { input.x = 1; } 70 | else if (Input.GetKey(KeyCode.A)) { input.x = -1; } 71 | Vector3 moveDirection = Vector3.Normalize((input.x * transform.right) + (input.y * transform.forward)); 72 | moveDirection.y = 0; 73 | _controller.Move(moveDirection * Time.deltaTime * _moveSpeed); 74 | if (_controller.isGrounded && _velocity.y < 0.2f) 75 | { 76 | _velocity.y = 0f; 77 | } 78 | _velocity.y += Physics.gravity.y * Time.deltaTime; 79 | _controller.Move(_velocity * Time.deltaTime); 80 | if (Input.GetKey(KeyCode.Q)) 81 | { 82 | _controller.transform.Rotate(Vector3.up, -50 * Time.deltaTime, Space.World); 83 | } 84 | else if (Input.GetKey(KeyCode.E)) 85 | { 86 | _controller.transform.Rotate(Vector3.up, 50 * Time.deltaTime, Space.World); 87 | } 88 | if(_fireTimer > 0) 89 | { 90 | _fireTimer -= Time.deltaTime; 91 | } 92 | if (Input.GetKey(KeyCode.F) && _gunMuzzle != null && _fireTimer <= 0) 93 | { 94 | _fireTimer = _fireRate; 95 | Demo_01_Projectile bullet = RealtimeNetworking.InstantiatePrefab(_bulletPrefabIndex, _gunMuzzle.position, Quaternion.LookRotation(_gunMuzzle.forward), false, false).GetComponent(); 96 | bullet.Initialize(_damage, _gunMuzzle.forward.normalized * 100f, this); 97 | } 98 | } 99 | 100 | private void OnDestroy() 101 | { 102 | if (_healthBar != null) 103 | { 104 | Destroy(_healthBar.gameObject); 105 | } 106 | if(_object != null && _object.isOwner) 107 | { 108 | if (_camera != null) 109 | { 110 | _camera.transform.SetParent(null); 111 | _camera.enabled = true; 112 | } 113 | } 114 | } 115 | 116 | public void ApplyDamage(int damage) 117 | { 118 | if (!RealtimeNetworking.isSceneHost) 119 | { 120 | return; 121 | } 122 | health -= damage; 123 | if(health < 0) 124 | { 125 | Destroy(gameObject); 126 | } 127 | } 128 | 129 | } 130 | } -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Scripts/Demo_01_Controller.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 568ced28f4555ac4d9a3a7377bef88ca 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Scripts/Demo_01_Game.cs: -------------------------------------------------------------------------------- 1 | namespace DevelopersHub.RealtimeNetworking.Client.Demo 2 | { 3 | using UnityEngine; 4 | using UnityEngine.UI; 5 | using UnityEngine.SceneManagement; 6 | 7 | public class Demo_01_Game : MonoBehaviour 8 | { 9 | 10 | [SerializeField] private Button buttonQuit = null; 11 | [SerializeField] private string menuSceneName = "Demo_01_1_Menu"; 12 | 13 | private void Start() 14 | { 15 | RealtimeNetworking.OnLeaveGame += OnLeaveGame; 16 | if (RealtimeNetworking.isGameStarted && !Demo_01_Manager.isSpawnedPlayer) 17 | { 18 | RealtimeNetworking.InstantiatePrefab(0, new Vector3(Random.Range(-2f, 2f), 1f, Random.Range(-2f, 2f)), Quaternion.identity, true, true); 19 | } 20 | buttonQuit.onClick.AddListener(OnQuitClicked); 21 | } 22 | 23 | private void OnDestroy() 24 | { 25 | RealtimeNetworking.OnLeaveGame -= OnLeaveGame; 26 | } 27 | 28 | private void OnQuitClicked() 29 | { 30 | buttonQuit.interactable = false; 31 | RealtimeNetworking.LeaveGame(); 32 | } 33 | 34 | private void OnLeaveGame(RealtimeNetworking.LeaveGameResponse response) 35 | { 36 | if(response == RealtimeNetworking.LeaveGameResponse.SUCCESSFULL) 37 | { 38 | if (SceneUtility.GetBuildIndexByScenePath(menuSceneName) >= 0) 39 | { 40 | SceneManager.LoadScene(menuSceneName); 41 | } 42 | else 43 | { 44 | Debug.LogError(menuSceneName + " scene is not in the build list !!!"); 45 | } 46 | } 47 | else 48 | { 49 | buttonQuit.interactable = true; 50 | } 51 | } 52 | 53 | } 54 | } -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Scripts/Demo_01_Game.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d3e174f634126f24692d2b80cba948fb 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Scripts/Demo_01_HealthBar.cs: -------------------------------------------------------------------------------- 1 | namespace DevelopersHub.RealtimeNetworking.Client.Demo 2 | { 3 | using System.Collections; 4 | using System.Collections.Generic; 5 | using UnityEngine; 6 | using UnityEngine.UI; 7 | 8 | public class Demo_01_HealthBar : MonoBehaviour 9 | { 10 | 11 | public Image bar = null; 12 | public RectTransform rect = null; 13 | 14 | private void Awake() 15 | { 16 | rect.anchorMin = Vector2.zero; 17 | rect.anchorMax = Vector2.zero; 18 | rect.pivot = new Vector2(0.5f, 0); 19 | } 20 | 21 | } 22 | } -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Scripts/Demo_01_HealthBar.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 01b9790af4a472e43a56003166eeca8a 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Scripts/Demo_01_LobbyPlayer.cs: -------------------------------------------------------------------------------- 1 | namespace DevelopersHub.RealtimeNetworking.Client.Demo 2 | { 3 | using UnityEngine; 4 | using UnityEngine.UI; 5 | 6 | public class Demo_01_LobbyPlayer : MonoBehaviour 7 | { 8 | 9 | [SerializeField] private Button buttonKick = null; 10 | [SerializeField] private Button buttonReady = null; 11 | [SerializeField] private Text textUsername = null; 12 | [SerializeField] private Text textStatus = null; 13 | private long _id = -1; public long id { get { return _id; } } 14 | private bool _ready = false; public bool ready { get { return _ready; } } 15 | 16 | private void Start() 17 | { 18 | buttonKick.onClick.AddListener(OnKickClicked); 19 | buttonReady.onClick.AddListener(OnReadyClicked); 20 | } 21 | 22 | public void Initialize(Data.Player player, bool canKick) 23 | { 24 | buttonKick.interactable = canKick; 25 | if (player != null) 26 | { 27 | _id = player.id; 28 | textUsername.text = player.username; 29 | SetStatus(player.ready); 30 | } 31 | } 32 | 33 | private void OnKickClicked() 34 | { 35 | buttonKick.interactable = false; 36 | Demo_01_Manager manager = FindFirstObjectByType(); 37 | if (manager != null) 38 | { 39 | manager.KickPlayer(_id); 40 | } 41 | } 42 | 43 | private void OnReadyClicked() 44 | { 45 | buttonReady.interactable = false; 46 | Demo_01_Manager manager = FindFirstObjectByType(); 47 | if (manager != null) 48 | { 49 | manager.ChangePlayerStatus(!_ready); 50 | } 51 | } 52 | 53 | public void SetStatus(bool status) 54 | { 55 | buttonReady.interactable = _id == RealtimeNetworking.accountID; 56 | _ready = status; 57 | if (status) 58 | { 59 | textStatus.text = "Ready"; 60 | textStatus.color = Color.green; 61 | } 62 | else 63 | { 64 | textStatus.text = "Not Ready"; 65 | textStatus.color = Color.red; 66 | } 67 | } 68 | 69 | } 70 | } -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Scripts/Demo_01_LobbyPlayer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6a565b5d3539bda49a3387723d319f4a 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Scripts/Demo_01_Manager.cs: -------------------------------------------------------------------------------- 1 | namespace DevelopersHub.RealtimeNetworking.Client.Demo 2 | { 3 | using System.Collections; 4 | using System.Collections.Generic; 5 | using UnityEngine; 6 | using UnityEngine.SceneManagement; 7 | using UnityEngine.UI; 8 | 9 | public class Demo_01_Manager : MonoBehaviour 10 | { 11 | 12 | [SerializeField] private RectTransform panelMenu = null; 13 | [SerializeField] private RectTransform panelRooms = null; 14 | [SerializeField] private RectTransform panelLobby = null; 15 | [SerializeField] private Text textLog = null; 16 | [SerializeField] private Text textLobbyError = null; 17 | [SerializeField] private Button buttonConnect = null; 18 | [SerializeField] private Button buttonAuth = null; 19 | [SerializeField] private Button buttonCreate = null; 20 | [SerializeField] private Button buttonRefresh = null; 21 | [SerializeField] private Button buttonLeave = null; 22 | [SerializeField] private Button buttonStart = null; 23 | [SerializeField] private Demo_01_Room roomPrefab = null; 24 | [SerializeField] private RectTransform roomsContainer = null; 25 | [SerializeField] private Demo_01_LobbyPlayer playerPrefab = null; 26 | [SerializeField] private RectTransform playerContainer = null; 27 | [SerializeField] private string gameSceneName = "Demo_01_2_Game"; 28 | 29 | private List _rooms = new List(); 30 | private List _players = new List(); 31 | 32 | public static bool isSpawnedPlayer = false; 33 | 34 | private void Start() 35 | { 36 | // Creating event listeners 37 | RealtimeNetworking.OnDisconnectedFromServer += Disconnected; 38 | RealtimeNetworking.OnConnectingToServerResult += ConnectResult; 39 | RealtimeNetworking.OnPacketReceived += PacketReceived; 40 | RealtimeNetworking.OnAuthentication += OnAuthenticationResponse; 41 | RealtimeNetworking.OnGetRoomsList += OnGetRooms; 42 | RealtimeNetworking.OnCreateRoom += OnCreateRoom; 43 | RealtimeNetworking.OnJoinRoom += OnJoinRoom; 44 | RealtimeNetworking.OnRoomUpdated += OnRoomUpdated; 45 | RealtimeNetworking.OnGameStarted += OnGameStarted; 46 | 47 | buttonConnect.onClick.AddListener(ConnectClicked); 48 | buttonAuth.onClick.AddListener(AuthClicked); 49 | buttonCreate.onClick.AddListener(CreateRoomClicked); 50 | buttonLeave.onClick.AddListener(LeaveRoomClicked); 51 | buttonStart.onClick.AddListener(StartRoomClicked); 52 | buttonRefresh.onClick.AddListener(OpenRooms); 53 | buttonConnect.interactable = true; 54 | buttonAuth.interactable = false; 55 | panelMenu.gameObject.SetActive(true); 56 | panelRooms.gameObject.SetActive(false); 57 | panelLobby.gameObject.SetActive(false); 58 | textLog.fontSize = (int)(Screen.height * 0.05f); 59 | 60 | if(RealtimeNetworking.isAuthenticated) 61 | { 62 | OpenRooms(); 63 | } 64 | else if(RealtimeNetworking.isConnected) 65 | { 66 | buttonConnect.interactable = false; 67 | buttonAuth.interactable = true; 68 | } 69 | } 70 | 71 | private void OnGameStarted(Data.RuntimeGame data) 72 | { 73 | isSpawnedPlayer = false; 74 | LoadGameScene(); 75 | } 76 | 77 | private void OnDestroy() 78 | { 79 | // Remove event listeners 80 | RealtimeNetworking.OnDisconnectedFromServer -= Disconnected; 81 | RealtimeNetworking.OnConnectingToServerResult -= ConnectResult; 82 | RealtimeNetworking.OnPacketReceived -= PacketReceived; 83 | RealtimeNetworking.OnAuthentication -= OnAuthenticationResponse; 84 | RealtimeNetworking.OnGetRoomsList -= OnGetRooms; 85 | RealtimeNetworking.OnCreateRoom -= OnCreateRoom; 86 | RealtimeNetworking.OnJoinRoom -= OnJoinRoom; 87 | RealtimeNetworking.OnRoomUpdated -= OnRoomUpdated; 88 | } 89 | 90 | private void ConnectClicked() 91 | { 92 | // Try to connect the server 93 | buttonConnect.interactable = false; 94 | RealtimeNetworking.Connect(); 95 | } 96 | 97 | private void AuthClicked() 98 | { 99 | // Try to authenticate the player 100 | buttonAuth.interactable = false; 101 | RealtimeNetworking.Authenticate(); 102 | } 103 | 104 | private void Disconnected() 105 | { 106 | buttonConnect.interactable = true; 107 | buttonAuth.interactable = false; 108 | panelMenu.gameObject.SetActive(true); 109 | panelRooms.gameObject.SetActive(false); 110 | panelLobby.gameObject.SetActive(false); 111 | textLog.text = "Disconnected from server."; 112 | } 113 | 114 | private void ConnectResult(bool successful) 115 | { 116 | if (successful) 117 | { 118 | buttonAuth.interactable = true; 119 | textLog.text = "Connected to server successfully."; 120 | } 121 | else 122 | { 123 | buttonConnect.interactable = true; 124 | textLog.text = "Failed to connect the server."; 125 | } 126 | } 127 | 128 | private void PacketReceived(Packet packet) 129 | { 130 | textLog.text = "Packet received from the server."; 131 | } 132 | 133 | private void OnAuthenticationResponse(RealtimeNetworking.AuthenticationResponse response, Data.PlayerProfile data) 134 | { 135 | if(response == RealtimeNetworking.AuthenticationResponse.SUCCESSFULL) 136 | { 137 | OpenRooms(); 138 | } 139 | else 140 | { 141 | buttonAuth.interactable = true; 142 | textLog.text = "Failed to authenticate the player. Code: " + response; 143 | } 144 | } 145 | 146 | private void OpenRooms() 147 | { 148 | ClearRoomsList(); 149 | buttonRefresh.interactable = false; 150 | buttonCreate.interactable = false; 151 | panelMenu.gameObject.SetActive(false); 152 | panelRooms.gameObject.SetActive(true); 153 | panelLobby.gameObject.SetActive(false); 154 | RealtimeNetworking.GetRooms(); 155 | } 156 | 157 | private void OnGetRooms(RealtimeNetworking.GetRoomsResponse response, List rooms) 158 | { 159 | if(response == RealtimeNetworking.GetRoomsResponse.SUCCESSFULL && rooms != null) 160 | { 161 | for (int i = 0; i < rooms.Count; i++) 162 | { 163 | Demo_01_Room room = Instantiate(roomPrefab, roomsContainer); 164 | room.Initialize(rooms[i]); 165 | _rooms.Add(room); 166 | } 167 | } 168 | buttonCreate.interactable = true; 169 | buttonRefresh.interactable = true; 170 | } 171 | 172 | private void CreateRoomClicked() 173 | { 174 | buttonCreate.interactable = false; 175 | RealtimeNetworking.CreateRoom(0, 0, 0); 176 | } 177 | 178 | private void ClearRoomsList() 179 | { 180 | for (int i = 0; i < _rooms.Count; i++) 181 | { 182 | if (_rooms[i] != null) 183 | { 184 | Destroy(_rooms[i].gameObject); 185 | } 186 | } 187 | _rooms.Clear(); 188 | } 189 | 190 | private void ClearLobbyList() 191 | { 192 | for (int i = 0; i < _players.Count; i++) 193 | { 194 | if (_players[i] != null) 195 | { 196 | Destroy(_players[i].gameObject); 197 | } 198 | } 199 | _players.Clear(); 200 | } 201 | 202 | private void LeaveRoomClicked() 203 | { 204 | buttonLeave.interactable = false; 205 | RealtimeNetworking.LeaveRoom(); 206 | } 207 | 208 | public void JoinRoom(string id) 209 | { 210 | RealtimeNetworking.JoinRoom(id, 0); 211 | } 212 | 213 | private void OnJoinRoom(RealtimeNetworking.JoinRoomResponse response, Data.Room room) 214 | { 215 | if(response != RealtimeNetworking.JoinRoomResponse.SUCCESSFULL) 216 | { 217 | OpenRooms(); 218 | } 219 | } 220 | 221 | private void OnCreateRoom(RealtimeNetworking.CreateRoomResponse response, Data.Room room) 222 | { 223 | if(response == RealtimeNetworking.CreateRoomResponse.SUCCESSFULL) 224 | { 225 | OpenLobby(room); 226 | } 227 | else 228 | { 229 | buttonCreate.interactable = true; 230 | } 231 | } 232 | 233 | private void OpenLobby(Data.Room room) 234 | { 235 | textLobbyError.text = ""; 236 | ClearLobbyList(); 237 | buttonLeave.interactable = true; 238 | for (int i = 0; i < room.players.Count; i++) 239 | { 240 | Demo_01_LobbyPlayer player = Instantiate(playerPrefab, playerContainer); 241 | player.Initialize(room.players[i], room.hostID == RealtimeNetworking.accountID && RealtimeNetworking.accountID != room.players[i].id); 242 | _players.Add(player); 243 | } 244 | if (room.hostID == RealtimeNetworking.accountID) 245 | { 246 | buttonStart.gameObject.SetActive(true); 247 | CheckCanStart(); 248 | } 249 | else 250 | { 251 | buttonStart.gameObject.SetActive(false); 252 | } 253 | panelMenu.gameObject.SetActive(false); 254 | panelRooms.gameObject.SetActive(false); 255 | panelLobby.gameObject.SetActive(true); 256 | } 257 | 258 | public void KickPlayer(long id) 259 | { 260 | RealtimeNetworking.KickFromRoom(id); 261 | } 262 | 263 | public void ChangePlayerStatus(bool status) 264 | { 265 | RealtimeNetworking.ChangeRoomStatus(status); 266 | } 267 | 268 | private void OnRoomUpdated(RealtimeNetworking.RoomUpdateType response, Data.Room room, Data.Player player, Data.Player targetPlayer) 269 | { 270 | if (response == RealtimeNetworking.RoomUpdateType.ROOM_DELETED) 271 | { 272 | OpenRooms(); 273 | } 274 | else if (response == RealtimeNetworking.RoomUpdateType.PLAYER_KICKED) 275 | { 276 | if (targetPlayer.id == RealtimeNetworking.accountID) 277 | { 278 | OpenRooms(); 279 | } 280 | else 281 | { 282 | for (int i = 0; i < _players.Count; i++) 283 | { 284 | if (_players[i] != null && _players[i].id == targetPlayer.id) 285 | { 286 | Destroy(_players[i].gameObject); 287 | _players.RemoveAt(i); 288 | break; 289 | } 290 | } 291 | } 292 | } 293 | else if (response == RealtimeNetworking.RoomUpdateType.PLAYER_LEFT) 294 | { 295 | if (player.id != RealtimeNetworking.accountID) 296 | { 297 | for (int i = 0; i < _players.Count; i++) 298 | { 299 | if (_players[i] != null && _players[i].id == player.id) 300 | { 301 | Destroy(_players[i].gameObject); 302 | _players.RemoveAt(i); 303 | break; 304 | } 305 | } 306 | } 307 | else 308 | { 309 | OpenRooms(); 310 | } 311 | } 312 | else if (response == RealtimeNetworking.RoomUpdateType.PLAYER_STATUS_CHANGED) 313 | { 314 | for (int i = 0; i < _players.Count; i++) 315 | { 316 | if (_players[i] != null && _players[i].id == player.id) 317 | { 318 | _players[i].SetStatus(player.ready); 319 | break; 320 | } 321 | } 322 | } 323 | else if (response == RealtimeNetworking.RoomUpdateType.PLAYER_JOINED) 324 | { 325 | if(room.hostID != RealtimeNetworking.accountID) 326 | { 327 | OpenLobby(room); 328 | } 329 | else 330 | { 331 | Demo_01_LobbyPlayer p = Instantiate(playerPrefab, playerContainer); 332 | p.Initialize(player, room.hostID == RealtimeNetworking.accountID && RealtimeNetworking.accountID != player.id); 333 | _players.Add(p); 334 | } 335 | } 336 | if (room.hostID == RealtimeNetworking.accountID && response != RealtimeNetworking.RoomUpdateType.ROOM_DELETED) 337 | { 338 | CheckCanStart(); 339 | } 340 | } 341 | 342 | private void StartRoomClicked() 343 | { 344 | RealtimeNetworking.StartRoomGame(); 345 | } 346 | 347 | private void CheckCanStart() 348 | { 349 | bool ready = true; 350 | for (int i = 0; i < _players.Count; i++) 351 | { 352 | if (!_players[i].ready) 353 | { 354 | ready = false; 355 | break; 356 | } 357 | } 358 | buttonStart.interactable = ready; 359 | } 360 | 361 | private void LoadGameScene() 362 | { 363 | if(SceneUtility.GetBuildIndexByScenePath(gameSceneName) >= 0) 364 | { 365 | SceneManager.LoadScene(gameSceneName); 366 | } 367 | else 368 | { 369 | textLobbyError.text = gameSceneName + " scene is not in the build list !!!"; 370 | } 371 | } 372 | 373 | } 374 | } 375 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Scripts/Demo_01_Manager.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b5f5b4d4c81a3d642832a3e459a757fa 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Scripts/Demo_01_Platform.cs: -------------------------------------------------------------------------------- 1 | namespace DevelopersHub.RealtimeNetworking.Client.Demo 2 | { 3 | using System.Collections; 4 | using System.Collections.Generic; 5 | using UnityEngine; 6 | 7 | public class Demo_01_Platform : MonoBehaviour 8 | { 9 | 10 | [SerializeField] private float speed = 2f; 11 | [SerializeField] private Vector3 point1 = Vector3.zero; 12 | [SerializeField] private Vector3 point2 = Vector3.zero; 13 | 14 | private bool stage = true; 15 | 16 | private NetworkObject _object = null; 17 | 18 | private void Start() 19 | { 20 | _object = GetComponent(); 21 | } 22 | 23 | private void Update() 24 | { 25 | 26 | if (_object == null || !RealtimeNetworking.isSceneHost) 27 | { 28 | return; 29 | } 30 | 31 | Vector3 target = transform.position; 32 | 33 | if (stage) 34 | { 35 | target = point1; 36 | } 37 | else 38 | { 39 | target = point2; 40 | } 41 | 42 | transform.position = Vector3.Lerp(transform.position, target, speed * Time.deltaTime); 43 | 44 | if(Vector3.Distance(transform.position, target) <= 0.1f) 45 | { 46 | stage = !stage; 47 | } 48 | 49 | } 50 | 51 | } 52 | } -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Scripts/Demo_01_Platform.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3ca2912fd2dafcb4688252d593cfada2 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Scripts/Demo_01_Projectile.cs: -------------------------------------------------------------------------------- 1 | namespace DevelopersHub.RealtimeNetworking.Client.Demo 2 | { 3 | using System.Collections; 4 | using System.Collections.Generic; 5 | using UnityEngine; 6 | 7 | public class Demo_01_Projectile : MonoBehaviour 8 | { 9 | 10 | [SyncVariable] private int _damage = 1; 11 | private Demo_01_Controller _shooter = null; 12 | private Rigidbody _rigidbody = null; 13 | private Collider _collider = null; 14 | // private NetworkObject _object = null; 15 | private float _timer = 0; 16 | private bool _initialized = false; 17 | 18 | private void Awake() 19 | { 20 | _Initialize(); 21 | } 22 | 23 | private void _Initialize() 24 | { 25 | if (_initialized) 26 | { 27 | return; 28 | } 29 | _initialized = true; 30 | // _object = GetComponent(); 31 | _rigidbody = gameObject.GetComponent(); 32 | if(_rigidbody == null ) 33 | { 34 | _rigidbody = gameObject.AddComponent(); 35 | } 36 | _collider = gameObject.GetComponent(); 37 | if (_collider == null) 38 | { 39 | _collider = gameObject.AddComponent(); 40 | } 41 | _rigidbody.useGravity = true; 42 | _rigidbody.collisionDetectionMode = CollisionDetectionMode.ContinuousDynamic; 43 | _collider.isTrigger = false; 44 | } 45 | 46 | public void Initialize(int damage, Vector3 force, Demo_01_Controller shooter) 47 | { 48 | _Initialize(); 49 | _shooter = shooter; 50 | _damage = damage; 51 | _rigidbody.velocity = force; 52 | } 53 | 54 | private void Update() 55 | { 56 | /* 57 | if (_object == null || !_object.isOwner) 58 | { 59 | return; 60 | } 61 | */ 62 | _timer += Time.deltaTime; 63 | if(_timer > 20) 64 | { 65 | Destroy(gameObject); 66 | } 67 | } 68 | 69 | private void OnCollisionEnter(Collision collision) 70 | { 71 | Demo_01_Controller controller = collision.transform.root.GetComponent(); 72 | if (controller != null) 73 | { 74 | if(controller == _shooter) 75 | { 76 | Physics.IgnoreCollision(collision.collider, _collider); 77 | } 78 | else 79 | { 80 | controller.ApplyDamage(_damage); 81 | } 82 | } 83 | else 84 | { 85 | /* 86 | if (_object != null && _object.isOwner) 87 | { 88 | Destroy(gameObject); 89 | } 90 | */ 91 | } 92 | } 93 | 94 | } 95 | } -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Scripts/Demo_01_Projectile.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4ab01da17fe2d2e429632121f62e00fd 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Scripts/Demo_01_Room.cs: -------------------------------------------------------------------------------- 1 | namespace DevelopersHub.RealtimeNetworking.Client.Demo 2 | { 3 | using UnityEngine; 4 | using UnityEngine.UI; 5 | 6 | public class Demo_01_Room : MonoBehaviour 7 | { 8 | 9 | [SerializeField] private Button buttonJoin = null; 10 | [SerializeField] private Text textUsername = null; 11 | [SerializeField] private Text textCapacity = null; 12 | private string _id = string.Empty; 13 | 14 | private void Start () 15 | { 16 | buttonJoin.onClick.AddListener(OnJoinClicked); 17 | } 18 | 19 | public void Initialize(Data.Room room) 20 | { 21 | if(room != null) 22 | { 23 | _id = room.id; 24 | textUsername.text = room.hostUsername; 25 | textCapacity.text = room.players.Count.ToString() + "/" + room.maxPlayers.ToString(); 26 | } 27 | } 28 | 29 | private void OnJoinClicked() 30 | { 31 | buttonJoin.interactable = false; 32 | Demo_01_Manager manager = FindFirstObjectByType(); 33 | if(manager != null) 34 | { 35 | manager.JoinRoom(_id); 36 | } 37 | } 38 | 39 | } 40 | } -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Scripts/Demo_01_Room.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: dac064513f8c0794c97854f0f02b0529 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Textures.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fcc9000609af91049bdc99b6d2f6c32e 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Textures/blank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developers-hub-org/unity-realtime-networking-client/38012cd5042a002da7f9adae5f08f5d57a580e9d/Assets/DevelopersHub/RealtimeNetworking/Demo/01/Textures/blank.png -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Textures/blank.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b357d002755571b4baa3dcc9eb5a4bfe 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 1 33 | maxTextureSize: 2048 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 0 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 0 66 | cookieLightType: 0 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 2048 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 1 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 2048 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 1 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Server 94 | maxTextureSize: 2048 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 1 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | spriteSheet: 105 | serializedVersion: 2 106 | sprites: [] 107 | outline: [] 108 | physicsShape: [] 109 | bones: [] 110 | spriteID: 5e97eb03825dee720800000000000000 111 | internalID: 0 112 | vertices: [] 113 | indices: 114 | edges: [] 115 | weights: [] 116 | secondaryTextures: [] 117 | nameFileIdTable: {} 118 | spritePackingTag: 119 | pSDRemoveMatte: 0 120 | pSDShowRemoveMatteOption: 0 121 | userData: 122 | assetBundleName: 123 | assetBundleVariant: 124 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Textures/ground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developers-hub-org/unity-realtime-networking-client/38012cd5042a002da7f9adae5f08f5d57a580e9d/Assets/DevelopersHub/RealtimeNetworking/Demo/01/Textures/ground.png -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/01/Textures/ground.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b25457ca28d5fa94aa3337c317f0ca56 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 1 33 | maxTextureSize: 2048 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 0 40 | wrapV: 0 41 | wrapW: 0 42 | nPOTScale: 1 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 0 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 0 55 | spriteTessellationDetail: -1 56 | textureType: 0 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 0 66 | cookieLightType: 0 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 2048 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 1 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 2048 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 1 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Server 94 | maxTextureSize: 2048 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 1 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | spriteSheet: 105 | serializedVersion: 2 106 | sprites: [] 107 | outline: [] 108 | physicsShape: [] 109 | bones: [] 110 | spriteID: 111 | internalID: 0 112 | vertices: [] 113 | indices: 114 | edges: [] 115 | weights: [] 116 | secondaryTextures: [] 117 | nameFileIdTable: {} 118 | spritePackingTag: 119 | pSDRemoveMatte: 0 120 | pSDShowRemoveMatteOption: 0 121 | userData: 122 | assetBundleName: 123 | assetBundleVariant: 124 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/Scripts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e450d58b0c16a844697d54f737047180 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/Scripts/NetcodeDemo.cs: -------------------------------------------------------------------------------- 1 | namespace DevelopersHub.RealtimeNetworking.Client.NetcodeForGameObjects 2 | {/* 3 | using System.Collections; 4 | using System.Collections.Generic; 5 | using UnityEngine; 6 | using Unity.Netcode; 7 | using Unity.Netcode.Transports.UTP; 8 | 9 | public class NetcodeDemo : MonoBehaviour 10 | { 11 | 12 | [SerializeField] GameObject playerPrefab = null; 13 | [SerializeField] private Role _role = Role.Client; public Role role { get { return _role; } } 14 | [SerializeField] private float destroyServerAfterSecondsIfNoClientConnected = 300; 15 | [SerializeField] private float destroyServerAfterSecondsWithoutAnyClient = 10; 16 | private float timer = 0; 17 | private int clientsCount = 0; 18 | private bool atLeastOneClientConnected = false; 19 | private bool closingServer = false; 20 | private NetworkManagerHook _singleton = null; 21 | public static int port = 7777; 22 | 23 | public enum Role 24 | { 25 | Server = 1, Client = 2 26 | } 27 | 28 | private void Awake() 29 | { 30 | _singleton = this; 31 | RealtimeNetworking.OnNetcodeServerReady += OnNetcodeServerReady; 32 | } 33 | 34 | private void OnNetcodeServerReady(int serverPort) 35 | { 36 | if (_role == Role.Client) 37 | { 38 | port = serverPort; 39 | UnityTransport transport = NetworkManager.Singleton.GetComponent(); 40 | transport.ConnectionData.Address = DevelopersHub.RealtimeNetworking.Client.Client.instance.settings.ip; 41 | transport.ConnectionData.Port = (ushort)serverPort; 42 | NetworkManager.Singleton.StartClient(); 43 | } 44 | } 45 | 46 | private void DisconnectClient() 47 | { 48 | if (_role == Role.Client) 49 | { 50 | NetworkManager.Singleton.StopClient(); 51 | } 52 | } 53 | 54 | private void Start() 55 | { 56 | if (_role == Role.Server) 57 | { 58 | port = Tools.FindFreeTcpPort(); 59 | UnityTransport transport = NetworkManager.Singleton.GetComponent(); 60 | transport.ConnectionData.Port = (ushort)port; 61 | 62 | NetworkManager.Singleton.OnClientConnectedCallback += OnClientConnected; 63 | NetworkManager.Singleton.OnClientDisconnectCallback += OnClientDisconnect; 64 | NetworkManager.Singleton.OnServerStarted += OnServerStarted; 65 | NetworkManager.Singleton.OnServerStopped += OnServerStopped; 66 | 67 | NetworkManager.Singleton.StartServer(); 68 | } 69 | } 70 | 71 | private void OnServerStarted() 72 | { 73 | NetworkManager.Singleton.OnServerStarted -= OnServerStarted; 74 | RealtimeNetworking.NetcodeServerIsReady(port); 75 | } 76 | 77 | private void OnServerStopped(bool obj) 78 | { 79 | NetworkManager.Singleton.OnClientConnectedCallback -= OnClientConnected; 80 | NetworkManager.Singleton.OnClientDisconnectCallback -= OnClientDisconnect; 81 | NetworkManager.Singleton.OnServerStopped -= OnServerStopped; 82 | } 83 | 84 | private void OnClientDisconnect(ulong obj) 85 | { 86 | clientsCount--; 87 | } 88 | 89 | private void OnClientConnected(ulong clientId) 90 | { 91 | Vector3 position = new Vector3(Random.Range(-5f, 5f), 0f, Random.Range(-5f, 5f)); 92 | Quaternion rotation = Quaternion.identity; 93 | GameObject controller = Instantiate(playerPrefab, position, rotation); 94 | controller.GetComponent().SpawnWithOwnership(clientId); 95 | clientsCount++; 96 | atLeastOneClientConnected = true; 97 | } 98 | 99 | private void Update() 100 | { 101 | if (_role == Role.Server) 102 | { 103 | if (closingServer) 104 | { 105 | return; 106 | } 107 | if (atLeastOneClientConnected) 108 | { 109 | if (clientsCount > 0) 110 | { 111 | timer = 0; 112 | } 113 | else 114 | { 115 | timer += Time.deltaTime; 116 | if (timer >= destroyServerAfterSecondsWithoutAnyClient) 117 | { 118 | CloseServer(); 119 | } 120 | } 121 | } 122 | else 123 | { 124 | destroyServerAfterSecondsIfNoClientConnected -= Time.deltaTime; 125 | if (destroyServerAfterSecondsIfNoClientConnected <= 0) 126 | { 127 | CloseServer(); 128 | } 129 | } 130 | } 131 | } 132 | 133 | private void CloseServer() 134 | { 135 | if (_role == Role.Server) 136 | { 137 | closingServer = true; 138 | Application.Quit(); 139 | } 140 | } 141 | 142 | }*/ 143 | } -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Demo/Scripts/NetcodeDemo.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a1496e01ad8b8364394c4aa4f6cdbc3f 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Resources.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f45c87ef8e7251e4d95dde48972b7a5a 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Resources/Settings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &11400000 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 11500000, guid: 8bf953d67a0f1464197895d6ba33d04c, type: 3} 13 | m_Name: Settings 14 | m_EditorClassIdentifier: 15 | _ip: 127.0.0.1 16 | _port: 5555 17 | prefabs: 18 | - {fileID: 8179720575216243064, guid: 67b9a9aa070ff444dbbd3328dd82fa5d, type: 3} 19 | - {fileID: 1982748803318845165, guid: 734e67b01e83e194697f52aa25b28e34, type: 3} 20 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Resources/Settings.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5fbd400bb1725724daef2c5ddd2aa1dc 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 11400000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1c51a7bdbc466564e83256fa60adb821 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts/Attributes.cs: -------------------------------------------------------------------------------- 1 | namespace DevelopersHub.RealtimeNetworking.Client 2 | { 3 | using System; 4 | using UnityEngine; 5 | 6 | public class ReadOnlyAttribute : PropertyAttribute { } 7 | 8 | [AttributeUsage(AttributeTargets.Field)] public class SyncVariable : PropertyAttribute 9 | { 10 | 11 | public enum WhoCanChange 12 | { 13 | Owner = 1, Host = 3 14 | } 15 | 16 | public WhoCanChange whoCanChange = WhoCanChange.Owner; 17 | 18 | public SyncVariable(WhoCanChange whoCanChange) 19 | { 20 | this.whoCanChange = whoCanChange; 21 | } 22 | 23 | public SyncVariable() 24 | { 25 | this.whoCanChange |= WhoCanChange.Owner; 26 | } 27 | 28 | } 29 | 30 | } -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts/Attributes.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: aa00d798e80f2914aadda625e8a4cde7 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts/Client.cs: -------------------------------------------------------------------------------- 1 | namespace DevelopersHub.RealtimeNetworking.Client 2 | { 3 | using System.Collections.Generic; 4 | using UnityEngine; 5 | using System.Net; 6 | using System.Net.Sockets; 7 | using System; 8 | using System.Linq; 9 | 10 | public class Client : MonoBehaviour 11 | { 12 | 13 | private static int dataBufferSize = 4096; 14 | private static int connectTimeout = 5000; 15 | private int _id = 0; public int id { get { return _id; } } 16 | private string _sendToken = "xxxxx"; public string sendToken { get { return _sendToken; } } 17 | private string _receiveToken = "xxxxx"; public string receiveToken { get { return _receiveToken; } } 18 | public TCP tcp; 19 | public UDP udp; 20 | private bool _isConnected = false; public bool isConnected { get { return _isConnected; } } 21 | private delegate void PacketHandler(Packet _packet); 22 | private static Dictionary packetHandlers; 23 | private bool _connecting = false; 24 | private bool _initialized = false; 25 | private Settings _settings = null; public Settings settings { get { return _settings; } set { _settings = value; } } 26 | 27 | private static Client _instance = null; public static Client instance 28 | { 29 | get 30 | { 31 | if (_instance == null) 32 | { 33 | _instance = FindFirstObjectByType(); 34 | if (_instance == null) 35 | { 36 | _instance = new GameObject("Client").AddComponent(); 37 | } 38 | _instance.Initialize(); 39 | } 40 | return _instance; 41 | } 42 | } 43 | 44 | private void Awake() 45 | { 46 | Initialize(); 47 | } 48 | 49 | private void Initialize() 50 | { 51 | if (_initialized) 52 | { 53 | return; 54 | } 55 | _initialized = true; 56 | try 57 | { 58 | var resources = Resources.LoadAll("", typeof(Settings)).Cast(); 59 | foreach (var s in resources) 60 | { 61 | settings = s; 62 | break; 63 | } 64 | } 65 | catch (System.Exception ex) 66 | { 67 | Debug.LogError(ex.Message); 68 | } 69 | DontDestroyOnLoad(gameObject); 70 | Threading[] threadings = FindObjectsByType(FindObjectsInactive.Include, FindObjectsSortMode.None); 71 | if (threadings != null && threadings.Length > 0) 72 | { 73 | for (int i = 0; i < threadings.Length; i++) 74 | { 75 | Destroy(threadings[i]); 76 | } 77 | } 78 | gameObject.AddComponent(); 79 | } 80 | 81 | private void OnApplicationQuit() 82 | { 83 | Disconnect(); 84 | } 85 | 86 | public void ConnectToServer() 87 | { 88 | if (_isConnected || _connecting) 89 | { 90 | return; 91 | } 92 | 93 | _connecting = true; 94 | 95 | tcp = new TCP(); 96 | udp = new UDP(); 97 | 98 | packetHandlers = new Dictionary() 99 | { 100 | { (int)Packet.ID.INITIALIZATION, Receiver.Initialization }, 101 | { (int)Packet.ID.CUSTOM, Receiver.ReceiveCustom }, 102 | { (int)Packet.ID.INTERNAL, Receiver.ReceiveInternal }, 103 | }; 104 | 105 | tcp.Connect(); 106 | } 107 | 108 | public class TCP 109 | { 110 | public TcpClient socket; 111 | private NetworkStream stream; 112 | private Packet receivedData; 113 | private byte[] receiveBuffer; 114 | 115 | public void Connect() 116 | { 117 | socket = new TcpClient 118 | { 119 | ReceiveBufferSize = dataBufferSize, 120 | SendBufferSize = dataBufferSize 121 | }; 122 | receiveBuffer = new byte[dataBufferSize]; 123 | IAsyncResult result = null; 124 | bool waiting = false; 125 | try 126 | { 127 | result = socket.BeginConnect(instance.settings.ip, instance.settings.port, ConnectCallback, socket); 128 | waiting = result.AsyncWaitHandle.WaitOne(connectTimeout, false); 129 | } 130 | catch (Exception) 131 | { 132 | instance._connecting = false; 133 | RealtimeNetworking.instance._Connection(false); 134 | return; 135 | } 136 | if (!waiting || !socket.Connected) 137 | { 138 | instance._connecting = false; 139 | RealtimeNetworking.instance._Connection(false); 140 | return; 141 | } 142 | } 143 | 144 | private void ConnectCallback(IAsyncResult result) 145 | { 146 | socket.EndConnect(result); 147 | if (!socket.Connected) 148 | { 149 | return; 150 | } 151 | instance._connecting = false; 152 | instance._isConnected = true; 153 | stream = socket.GetStream(); 154 | receivedData = new Packet(); 155 | stream.BeginRead(receiveBuffer, 0, dataBufferSize, ReceiveCallback, null); 156 | } 157 | 158 | public void SendData(Packet _packet) 159 | { 160 | try 161 | { 162 | if (socket != null) 163 | { 164 | stream.BeginWrite(_packet.ToArray(), 0, _packet.Length(), null, null); 165 | } 166 | } 167 | catch (Exception ex) 168 | { 169 | Debug.Log($"Error sending data to server via TCP: {ex}"); 170 | } 171 | } 172 | 173 | private void ReceiveCallback(IAsyncResult result) 174 | { 175 | try 176 | { 177 | int length = stream.EndRead(result); 178 | if (length <= 0) 179 | { 180 | instance.Disconnect(); 181 | return; 182 | } 183 | byte[] data = new byte[length]; 184 | Array.Copy(receiveBuffer, data, length); 185 | receivedData.Reset(CheckData(data)); 186 | stream.BeginRead(receiveBuffer, 0, dataBufferSize, ReceiveCallback, null); 187 | } 188 | catch 189 | { 190 | Disconnect(); 191 | } 192 | } 193 | 194 | private bool CheckData(byte[] _data) 195 | { 196 | int length = 0; 197 | receivedData.SetBytes(_data); 198 | if (receivedData.UnreadLength() >= 4) 199 | { 200 | length = receivedData.ReadInt(); 201 | if (length <= 0) 202 | { 203 | return true; 204 | } 205 | } 206 | while (length > 0 && length <= receivedData.UnreadLength()) 207 | { 208 | byte[] _packetBytes = receivedData.ReadBytes(length); 209 | Threading.ExecuteOnMainThread(() => 210 | { 211 | using (Packet _packet = new Packet(_packetBytes)) 212 | { 213 | int id = _packet.ReadInt(); 214 | packetHandlers[id](_packet); 215 | } 216 | }); 217 | length = 0; 218 | if (receivedData.UnreadLength() >= 4) 219 | { 220 | length = receivedData.ReadInt(); 221 | if (length <= 0) 222 | { 223 | return true; 224 | } 225 | } 226 | } 227 | if (length <= 1) 228 | { 229 | return true; 230 | } 231 | return false; 232 | } 233 | 234 | private void Disconnect() 235 | { 236 | instance.Disconnect(); 237 | stream = null; 238 | receivedData = null; 239 | receiveBuffer = null; 240 | socket = null; 241 | } 242 | 243 | } 244 | 245 | public class UDP 246 | { 247 | public UdpClient socket; 248 | public IPEndPoint endPoint; 249 | 250 | public UDP() 251 | { 252 | endPoint = new IPEndPoint(IPAddress.Parse(instance.settings.ip), instance.settings.port); 253 | } 254 | 255 | public void Connect(int port) 256 | { 257 | socket = new UdpClient(port); 258 | socket.Connect(endPoint); 259 | socket.BeginReceive(ReceiveCallback, null); 260 | using (Packet _packet = new Packet()) 261 | { 262 | SendData(_packet); 263 | } 264 | } 265 | 266 | public void SendData(Packet _packet) 267 | { 268 | try 269 | { 270 | _packet.InsertInt(instance._id); 271 | if (socket != null) 272 | { 273 | socket.BeginSend(_packet.ToArray(), _packet.Length(), null, null); 274 | } 275 | } 276 | catch (Exception ex) 277 | { 278 | Debug.Log($"Error sending data to server via UDP: {ex}"); 279 | } 280 | } 281 | 282 | private void ReceiveCallback(IAsyncResult result) 283 | { 284 | try 285 | { 286 | byte[] data = socket.EndReceive(result, ref endPoint); 287 | socket.BeginReceive(ReceiveCallback, null); 288 | if (data.Length < 4) 289 | { 290 | instance.Disconnect(); 291 | return; 292 | } 293 | CheckData(data); 294 | } 295 | catch 296 | { 297 | Disconnect(); 298 | } 299 | } 300 | 301 | private void CheckData(byte[] data) 302 | { 303 | using (Packet _packet = new Packet(data)) 304 | { 305 | int length = _packet.ReadInt(); 306 | data = _packet.ReadBytes(length); 307 | } 308 | Threading.ExecuteOnMainThread(() => 309 | { 310 | using (Packet _packet = new Packet(data)) 311 | { 312 | int _packetId = _packet.ReadInt(); 313 | packetHandlers[_packetId](_packet); 314 | } 315 | }); 316 | } 317 | 318 | private void Disconnect() 319 | { 320 | instance.Disconnect(); 321 | endPoint = null; 322 | socket = null; 323 | } 324 | } 325 | 326 | public void _Disconnect() 327 | { 328 | Disconnect(); 329 | } 330 | 331 | private void Disconnect() 332 | { 333 | if (_isConnected) 334 | { 335 | _isConnected = false; 336 | if (tcp != null && tcp.socket != null) 337 | { 338 | tcp.socket.Close(); 339 | } 340 | if (udp != null && udp.socket != null) 341 | { 342 | udp.socket.Close(); 343 | } 344 | if(ThreadDispatcher.instance != null) 345 | { 346 | ThreadDispatcher.instance.Enqueue(() => RealtimeNetworking.instance._Disconnected()); 347 | } 348 | } 349 | } 350 | 351 | public void ConnectionResponse(bool result, int id, string token1, string token2) 352 | { 353 | _id = id; 354 | _sendToken = token1; 355 | _receiveToken = token2; 356 | RealtimeNetworking.instance._Connection(true); 357 | } 358 | 359 | } 360 | } 361 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts/Client.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e836c09d6ed45c242a7fb78fcd65ccc3 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts/Data.cs: -------------------------------------------------------------------------------- 1 | namespace DevelopersHub.RealtimeNetworking.Client 2 | { 3 | using System; 4 | using System.Collections.Generic; 5 | 6 | public class Data 7 | { 8 | public class Player 9 | { 10 | public long id = 0; 11 | public string username = string.Empty; 12 | public bool online = false; 13 | public int client = 0; 14 | public bool ready = false; 15 | public int team = 0; 16 | public int scene = -1; 17 | } 18 | 19 | public class PlayerProfile 20 | { 21 | public long id = 0; 22 | public string username = string.Empty; 23 | public int coins = 0; 24 | public int score = 0; 25 | public int level = 1; 26 | public int xp = 0; 27 | public bool online = false; 28 | public DateTime login; 29 | } 30 | 31 | public class Party 32 | { 33 | public string id = string.Empty; 34 | public bool auto = false; 35 | public int gameID = 0; 36 | public int mapID = 0; 37 | public long leaderID = 0; 38 | public int maxPlayers = 100; 39 | public Extension extension = Extension.NONE; 40 | public bool matchmaking = false; 41 | public int teamsPerMatch = 2; 42 | public int playersPerTeam = 6; 43 | public List players = new List(); 44 | public HashSet invites = new HashSet(); 45 | } 46 | 47 | public class FriendRequest 48 | { 49 | public long id = 0; 50 | public long playerID = 0; 51 | public string username = string.Empty; 52 | public bool online = false; 53 | public DateTime time; 54 | } 55 | 56 | public class Room 57 | { 58 | public string id = string.Empty; 59 | public int gameID = 0; 60 | public int mapID = 0; 61 | public long hostID = 0; 62 | public string hostUsername = string.Empty; 63 | public string password = string.Empty; 64 | public int maxPlayers = 0; 65 | public List players = new List(); 66 | } 67 | 68 | public class Friend 69 | { 70 | public long id = 0; 71 | public string username = string.Empty; 72 | public bool online = false; 73 | } 74 | 75 | public enum GameType 76 | { 77 | HOSTED = 1, MATCHED = 2 78 | } 79 | 80 | public class Game 81 | { 82 | public Room room = null; 83 | public DateTime start; 84 | public GameType type = GameType.HOSTED; 85 | public Extension extension = Extension.NONE; 86 | public GameCustomData customData = new GameCustomData(); 87 | public List sceneHostsKeys = new List(); 88 | public List sceneHostsValues = new List(); 89 | } 90 | 91 | public class GameCustomData 92 | { 93 | 94 | } 95 | 96 | public enum Extension 97 | { 98 | NONE = 0, NETCODE_SERVER = 1 99 | } 100 | 101 | public class RuntimeEquipment 102 | { 103 | public long id = 0; 104 | public long characterID = 0; 105 | public int prefabID = 0; 106 | public int type = 0; 107 | public string name = string.Empty; 108 | public string customName = string.Empty; 109 | public string tag = string.Empty; 110 | public int level = 1; 111 | public double armor = 0; 112 | public double damage = 0; 113 | public double accuracy = 0; 114 | public double range = 0; 115 | public double speed = 0; 116 | public double weight = 0; 117 | public int capacity = 0; 118 | } 119 | 120 | public class RuntimeCharacter 121 | { 122 | public long id = 0; 123 | public int prefabID = 0; 124 | public string name = string.Empty; 125 | public string customName = string.Empty; 126 | public string tag = string.Empty; 127 | public bool selected = false; 128 | public int xp = 0; 129 | public int level = 1; 130 | public double health = 100; 131 | public double damage = 0; 132 | public double speed = 0; 133 | public int strength = 0; 134 | public int agility = 0; 135 | public int constitution = 0; 136 | public int dexterity = 0; 137 | public int vitality = 0; 138 | public int endurance = 0; 139 | public int intelligence = 0; 140 | public int wisdom = 0; 141 | public int charisma = 0; 142 | public int perception = 0; 143 | public int luck = 0; 144 | public int willpower = 0; 145 | public List equipments = new List(); 146 | } 147 | 148 | public class RuntimePlayer 149 | { 150 | public long id = 0; 151 | public string username = string.Empty; 152 | public int team = 0; 153 | public List characters = new List(); 154 | } 155 | 156 | public class RuntimeGame 157 | { 158 | public string id = string.Empty; 159 | public int gameID = 0; 160 | public int mapID = 0; 161 | public List players = new List(); 162 | } 163 | 164 | public class RuntimeResult 165 | { 166 | public double duration = 0; 167 | public RuntimeGame game = null; 168 | } 169 | 170 | public class Color 171 | { 172 | public float r; 173 | public float g; 174 | public float b; 175 | public float a; 176 | } 177 | 178 | public enum PurchaseResult 179 | { 180 | Unknown = 0, Successful = 1, InsufficientFunds = 2, NotAvailable = 3 181 | } 182 | 183 | } 184 | } -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts/Data.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1b4bf054ebc00614c9aaadbada680979 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bd2e3d520cba78f409039fb9bf9ff763 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts/Editor/EditorAttributes.cs: -------------------------------------------------------------------------------- 1 | using Unity.Collections; 2 | using UnityEditor; 3 | using UnityEngine; 4 | 5 | namespace DevelopersHub.RealtimeNetworking.Client 6 | { 7 | 8 | #if UNITY_EDITOR 9 | [CustomPropertyDrawer(typeof(ReadOnlyAttribute))] 10 | public class ReadOnlyDrawer : PropertyDrawer 11 | { 12 | public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) 13 | { 14 | GUI.enabled = false; 15 | EditorGUI.PropertyField(position, property, label, true); 16 | GUI.enabled = true; 17 | } 18 | } 19 | #endif 20 | 21 | } -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts/Editor/EditorAttributes.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a8b4cd61545a6a94b9bcd39a0f2eb554 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts/Editor/EditorNetworkObject.cs: -------------------------------------------------------------------------------- 1 | namespace DevelopersHub.RealtimeNetworking.Client 2 | { 3 | using System; 4 | using System.Collections; 5 | using System.Collections.Generic; 6 | using UnityEditor; 7 | using UnityEngine; 8 | 9 | [CustomEditor(typeof(NetworkObject))] public class EditorNetworkObject : Editor 10 | { 11 | 12 | private SerializedProperty id = null; 13 | //private SerializedProperty syncTransform = null; 14 | //private SerializedProperty syncAnimation = null; 15 | 16 | private void OnEnable() 17 | { 18 | id = serializedObject.FindProperty("_id"); 19 | //syncTransform = serializedObject.FindProperty("_syncTransform"); 20 | //syncAnimation = serializedObject.FindProperty("_syncAnimation"); 21 | } 22 | 23 | public override void OnInspectorGUI() 24 | { 25 | NetworkObject networkObject = target as NetworkObject; 26 | if (string.IsNullOrEmpty(id.stringValue)) 27 | { 28 | GenerateID(); 29 | } 30 | if (!Application.isPlaying) 31 | { 32 | NetworkObject[] networkObjects = FindObjectsByType(FindObjectsInactive.Include, FindObjectsSortMode.None); 33 | if (networkObjects != null && networkObjects.Length > 0) 34 | { 35 | for (int i = 0; i < networkObjects.Length; i++) 36 | { 37 | if (networkObjects[i] == networkObject) { continue; } 38 | if (networkObjects[i].id == networkObject.id) 39 | { 40 | GenerateID(); 41 | break; 42 | } 43 | } 44 | } 45 | /* 46 | Animator animator = networkObject.GetComponent(); 47 | if (animator == null) 48 | { 49 | if (syncAnimation.boolValue) 50 | { 51 | syncAnimation.boolValue = false; 52 | serializedObject.ApplyModifiedProperties(); 53 | } 54 | } 55 | */ 56 | } 57 | base.OnInspectorGUI(); 58 | } 59 | 60 | private void GenerateID() 61 | { 62 | id.stringValue = Guid.NewGuid().ToString(); 63 | serializedObject.ApplyModifiedProperties(); 64 | } 65 | 66 | } 67 | } -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts/Editor/EditorNetworkObject.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5a183f4c70cf446418d980004d9ca507 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts/Functions.cs: -------------------------------------------------------------------------------- 1 | namespace DevelopersHub.RealtimeNetworking.Client 2 | { 3 | using System.Collections; 4 | using System.Collections.Generic; 5 | using UnityEngine; 6 | 7 | public class Functions : MonoBehaviour 8 | { 9 | 10 | public static float LerpFloat(float source, float target, float speed) 11 | { 12 | if (speed <= 0 || source == target) { return source; } 13 | float delta = Mathf.Abs(source - target); 14 | float t = speed * Time.deltaTime; 15 | if (t > delta) { t = delta; } 16 | return Mathf.Lerp(source, target, delta == 0 ? 1f : t / delta); 17 | } 18 | 19 | } 20 | } -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts/Functions.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e2a1f89e55c15e548989f5054ed9eaa3 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts/NetworkObject.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 41e6c3eb20397554eb1aece2df8d73ad 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts/Packet.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Numerics; 4 | using System.Text; 5 | 6 | namespace DevelopersHub.RealtimeNetworking.Client 7 | { 8 | public class Packet : IDisposable 9 | { 10 | public enum ID 11 | { 12 | INITIALIZATION = 1, CUSTOM = 2, INTERNAL = 3 13 | } 14 | 15 | private List buffer; 16 | private byte[] readableBuffer; 17 | private int readPos; 18 | 19 | public void SetID(int id) 20 | { 21 | buffer.InsertRange(0, BitConverter.GetBytes(id)); 22 | } 23 | 24 | /// Creates a new empty packet (without an ID). 25 | public Packet() 26 | { 27 | buffer = new List(); // Initialize buffer 28 | readPos = 0; // Set readPos to 0 29 | } 30 | 31 | /// Creates a new packet with a given ID. Used for sending. 32 | /// The packet ID. 33 | public Packet(int _id) 34 | { 35 | buffer = new List(); // Initialize buffer 36 | readPos = 0; // Set readPos to 0 37 | Write(_id); // Write packet id to the buffer 38 | } 39 | 40 | /// Creates a packet from which data can be read. Used for receiving. 41 | /// The bytes to add to the packet. 42 | public Packet(byte[] _data) 43 | { 44 | buffer = new List(); // Initialize buffer 45 | readPos = 0; // Set readPos to 0 46 | SetBytes(_data); 47 | } 48 | 49 | #region Functions 50 | /// Sets the packet's content and prepares it to be read. 51 | /// The bytes to add to the packet. 52 | public void SetBytes(byte[] _data) 53 | { 54 | Write(_data); 55 | readableBuffer = buffer.ToArray(); 56 | } 57 | 58 | /// Inserts the length of the packet's content at the start of the buffer. 59 | public void WriteLength() 60 | { 61 | buffer.InsertRange(0, BitConverter.GetBytes(buffer.Count)); // Insert the byte length of the packet at the very beginning 62 | } 63 | 64 | /// Inserts the given int at the start of the buffer. 65 | /// The int to insert. 66 | public void InsertInt(int _value) 67 | { 68 | buffer.InsertRange(0, BitConverter.GetBytes(_value)); // Insert the int at the start of the buffer 69 | } 70 | 71 | /// Gets the packet's content in array form. 72 | public byte[] ToArray() 73 | { 74 | readableBuffer = buffer.ToArray(); 75 | return readableBuffer; 76 | } 77 | 78 | /// Gets the length of the packet's content. 79 | public int Length() 80 | { 81 | return buffer.Count; // Return the length of buffer 82 | } 83 | 84 | /// Gets the length of the unread data contained in the packet. 85 | public int UnreadLength() 86 | { 87 | return Length() - readPos; // Return the remaining length (unread) 88 | } 89 | 90 | /// Resets the packet instance to allow it to be reused. 91 | /// Whether or not to reset the packet. 92 | public void Reset(bool _shouldReset = true) 93 | { 94 | if (_shouldReset) 95 | { 96 | buffer.Clear(); // Clear buffer 97 | readableBuffer = null; 98 | readPos = 0; // Reset readPos 99 | } 100 | else 101 | { 102 | readPos -= 4; // "Unread" the last read int 103 | } 104 | } 105 | #endregion 106 | 107 | #region Write Data 108 | /// Adds a byte to the packet. 109 | /// The byte to add. 110 | public void Write(byte _value) 111 | { 112 | buffer.Add(_value); 113 | } 114 | 115 | /// Adds an array of bytes to the packet. 116 | /// The byte array to add. 117 | public void Write(byte[] _value) 118 | { 119 | buffer.AddRange(_value); 120 | } 121 | 122 | /// Adds a short to the packet. 123 | /// The short to add. 124 | public void Write(short _value) 125 | { 126 | buffer.AddRange(BitConverter.GetBytes(_value)); 127 | } 128 | 129 | /// Adds an int to the packet. 130 | /// The int to add. 131 | public void Write(int _value) 132 | { 133 | buffer.AddRange(BitConverter.GetBytes(_value)); 134 | } 135 | 136 | /// Adds a long to the packet. 137 | /// The long to add. 138 | public void Write(long _value) 139 | { 140 | buffer.AddRange(BitConverter.GetBytes(_value)); 141 | } 142 | 143 | /// Adds a float to the packet. 144 | /// The float to add. 145 | public void Write(float _value) 146 | { 147 | buffer.AddRange(BitConverter.GetBytes(_value)); 148 | } 149 | 150 | /// Adds a double to the packet. 151 | /// The double to add. 152 | public void Write(double _value) 153 | { 154 | buffer.AddRange(BitConverter.GetBytes(_value)); 155 | } 156 | 157 | /// Adds a bool to the packet. 158 | /// The bool to add. 159 | public void Write(bool _value) 160 | { 161 | buffer.AddRange(BitConverter.GetBytes(_value)); 162 | } 163 | 164 | /// Adds a string to the packet. 165 | /// The string to add. 166 | public void Write(string _value) 167 | { 168 | Write(_value.Length); // Add the length of the string to the packet 169 | buffer.AddRange(Encoding.ASCII.GetBytes(_value)); // Add the string itself 170 | } 171 | 172 | /// Adds a Vector3 to the packet. 173 | /// The Vector3 to add. 174 | public void Write(Vector3 _value) 175 | { 176 | Write(_value.X); 177 | Write(_value.Y); 178 | Write(_value.Z); 179 | } 180 | 181 | /// Adds a Vector3 to the packet. 182 | /// The Vector3 to add. 183 | public void Write(UnityEngine.Vector3 _value) 184 | { 185 | Write(new System.Numerics.Vector3(_value.x, _value.y, _value.z)); 186 | } 187 | 188 | /// Adds a Vector3 to the packet. 189 | /// The Vector3 to add. 190 | public void Write(UnityEngine.Quaternion _value) 191 | { 192 | Write(new System.Numerics.Quaternion(_value.x, _value.y, _value.z, _value.w)); 193 | } 194 | 195 | /// Adds a Quaternion to the packet. 196 | /// The Quaternion to add. 197 | public void Write(Quaternion _value) 198 | { 199 | Write(_value.X); 200 | Write(_value.Y); 201 | Write(_value.Z); 202 | Write(_value.W); 203 | } 204 | #endregion 205 | 206 | #region Read Data 207 | /// Reads a byte from the packet. 208 | /// Whether or not to move the buffer's read position. 209 | public byte ReadByte(bool _moveReadPos = true) 210 | { 211 | if (buffer.Count > readPos) 212 | { 213 | // If there are unread bytes 214 | byte _value = readableBuffer[readPos]; // Get the byte at readPos' position 215 | if (_moveReadPos) 216 | { 217 | // If _moveReadPos is true 218 | readPos += 1; // Increase readPos by 1 219 | } 220 | return _value; // Return the byte 221 | } 222 | else 223 | { 224 | throw new Exception("Could not read value of type 'byte'!"); 225 | } 226 | } 227 | 228 | /// Reads an array of bytes from the packet. 229 | /// The length of the byte array. 230 | /// Whether or not to move the buffer's read position. 231 | public byte[] ReadBytes(int _length, bool _moveReadPos = true) 232 | { 233 | if (buffer.Count > readPos) 234 | { 235 | // If there are unread bytes 236 | byte[] _value = buffer.GetRange(readPos, _length).ToArray(); // Get the bytes at readPos' position with a range of _length 237 | if (_moveReadPos) 238 | { 239 | // If _moveReadPos is true 240 | readPos += _length; // Increase readPos by _length 241 | } 242 | return _value; // Return the bytes 243 | } 244 | else 245 | { 246 | throw new Exception("Could not read value of type 'byte[]'!"); 247 | } 248 | } 249 | 250 | /// Reads a short from the packet. 251 | /// Whether or not to move the buffer's read position. 252 | public short ReadShort(bool _moveReadPos = true) 253 | { 254 | if (buffer.Count > readPos) 255 | { 256 | // If there are unread bytes 257 | short _value = BitConverter.ToInt16(readableBuffer, readPos); // Convert the bytes to a short 258 | if (_moveReadPos) 259 | { 260 | // If _moveReadPos is true and there are unread bytes 261 | readPos += 2; // Increase readPos by 2 262 | } 263 | return _value; // Return the short 264 | } 265 | else 266 | { 267 | throw new Exception("Could not read value of type 'short'!"); 268 | } 269 | } 270 | 271 | /// Reads an int from the packet. 272 | /// Whether or not to move the buffer's read position. 273 | public int ReadInt(bool _moveReadPos = true) 274 | { 275 | if (buffer.Count > readPos) 276 | { 277 | // If there are unread bytes 278 | int _value = BitConverter.ToInt32(readableBuffer, readPos); // Convert the bytes to an int 279 | if (_moveReadPos) 280 | { 281 | // If _moveReadPos is true 282 | readPos += 4; // Increase readPos by 4 283 | } 284 | return _value; // Return the int 285 | } 286 | else 287 | { 288 | throw new Exception("Could not read value of type 'int'!"); 289 | } 290 | } 291 | 292 | /// Reads a long from the packet. 293 | /// Whether or not to move the buffer's read position. 294 | public long ReadLong(bool _moveReadPos = true) 295 | { 296 | if (buffer.Count > readPos) 297 | { 298 | // If there are unread bytes 299 | long _value = BitConverter.ToInt64(readableBuffer, readPos); // Convert the bytes to a long 300 | if (_moveReadPos) 301 | { 302 | // If _moveReadPos is true 303 | readPos += 8; // Increase readPos by 8 304 | } 305 | return _value; // Return the long 306 | } 307 | else 308 | { 309 | throw new Exception("Could not read value of type 'long'!"); 310 | } 311 | } 312 | 313 | /// Reads a float from the packet. 314 | /// Whether or not to move the buffer's read position. 315 | public float ReadFloat(bool _moveReadPos = true) 316 | { 317 | if (buffer.Count > readPos) 318 | { 319 | // If there are unread bytes 320 | float _value = BitConverter.ToSingle(readableBuffer, readPos); // Convert the bytes to a float 321 | if (_moveReadPos) 322 | { 323 | // If _moveReadPos is true 324 | readPos += 4; // Increase readPos by 4 325 | } 326 | return _value; // Return the float 327 | } 328 | else 329 | { 330 | throw new Exception("Could not read value of type 'float'!"); 331 | } 332 | } 333 | 334 | /// Reads a double from the packet. 335 | /// Whether or not to move the buffer's read position. 336 | public double ReadDouble(bool _moveReadPos = true) 337 | { 338 | if (buffer.Count > readPos) 339 | { 340 | // If there are unread bytes 341 | double _value = BitConverter.ToSingle(readableBuffer, readPos); // Convert the bytes to a double 342 | if (_moveReadPos) 343 | { 344 | // If _moveReadPos is true 345 | readPos += 8; // Increase readPos by 8 346 | } 347 | return _value; // Return the double 348 | } 349 | else 350 | { 351 | throw new Exception("Could not read value of type 'float'!"); 352 | } 353 | } 354 | 355 | /// Reads a bool from the packet. 356 | /// Whether or not to move the buffer's read position. 357 | public bool ReadBool(bool _moveReadPos = true) 358 | { 359 | if (buffer.Count > readPos) 360 | { 361 | // If there are unread bytes 362 | bool _value = BitConverter.ToBoolean(readableBuffer, readPos); // Convert the bytes to a bool 363 | if (_moveReadPos) 364 | { 365 | // If _moveReadPos is true 366 | readPos += 1; // Increase readPos by 1 367 | } 368 | return _value; // Return the bool 369 | } 370 | else 371 | { 372 | throw new Exception("Could not read value of type 'bool'!"); 373 | } 374 | } 375 | 376 | /// Reads a string from the packet. 377 | /// Whether or not to move the buffer's read position. 378 | public string ReadString(bool _moveReadPos = true) 379 | { 380 | try 381 | { 382 | int _length = ReadInt(); // Get the length of the string 383 | string _value = Encoding.ASCII.GetString(readableBuffer, readPos, _length); // Convert the bytes to a string 384 | if (_moveReadPos && _value.Length > 0) 385 | { 386 | // If _moveReadPos is true string is not empty 387 | readPos += _length; // Increase readPos by the length of the string 388 | } 389 | return _value; // Return the string 390 | } 391 | catch 392 | { 393 | throw new Exception("Could not read value of type 'string'!"); 394 | } 395 | } 396 | 397 | /// Reads a Vector3 from the packet. 398 | /// Whether or not to move the buffer's read position. 399 | public Vector3 ReadVector3(bool _moveReadPos = true) 400 | { 401 | return new Vector3(ReadFloat(_moveReadPos), ReadFloat(_moveReadPos), ReadFloat(_moveReadPos)); 402 | } 403 | 404 | /// Reads a Quaternion from the packet. 405 | /// Whether or not to move the buffer's read position. 406 | public Quaternion ReadQuaternion(bool _moveReadPos = true) 407 | { 408 | return new Quaternion(ReadFloat(_moveReadPos), ReadFloat(_moveReadPos), ReadFloat(_moveReadPos), ReadFloat(_moveReadPos)); 409 | } 410 | #endregion 411 | 412 | private bool disposed = false; 413 | 414 | protected virtual void Dispose(bool _disposing) 415 | { 416 | if (!disposed) 417 | { 418 | if (_disposing) 419 | { 420 | buffer = null; 421 | readableBuffer = null; 422 | readPos = 0; 423 | } 424 | disposed = true; 425 | } 426 | } 427 | 428 | public void Dispose() 429 | { 430 | Dispose(true); 431 | GC.SuppressFinalize(this); 432 | } 433 | 434 | } 435 | } -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts/Packet.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6f83169bf3daf3541aaa38f412e3e483 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts/RealtimeNetworking.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 625d6db11c0a0904592777fefc0374e0 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts/Receiver.cs: -------------------------------------------------------------------------------- 1 | namespace DevelopersHub.RealtimeNetworking.Client 2 | { 3 | using System.Net; 4 | using UnityEngine; 5 | 6 | public class Receiver : MonoBehaviour 7 | { 8 | 9 | public static void Initialization(Packet packet) 10 | { 11 | int id = packet.ReadInt(); 12 | string receiveToken = packet.ReadString(); 13 | string sendToken = Tools.GenerateToken(); 14 | using (Packet response = new Packet((int)Packet.ID.INITIALIZATION)) 15 | { 16 | response.Write(sendToken); 17 | response.WriteLength(); 18 | Client.instance.tcp.SendData(response); 19 | } 20 | Client.instance.ConnectionResponse(true, id, sendToken, receiveToken); 21 | Client.instance.udp.Connect(((IPEndPoint)Client.instance.tcp.socket.Client.LocalEndPoint).Port); 22 | } 23 | 24 | public static void ReceiveCustom(Packet packet) 25 | { 26 | if (packet != null) 27 | { 28 | RealtimeNetworking.instance._ReceivePacket(packet); 29 | } 30 | } 31 | 32 | public static void ReceiveInternal(Packet packet) 33 | { 34 | if (packet != null) 35 | { 36 | RealtimeNetworking.instance._ReceiveInternal(packet); 37 | } 38 | } 39 | 40 | } 41 | } -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts/Receiver.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4d7d63315fcc65c4b8a2a96cc482a90a 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts/Sender.cs: -------------------------------------------------------------------------------- 1 | namespace DevelopersHub.RealtimeNetworking.Client 2 | { 3 | using System.Collections; 4 | using System.Collections.Generic; 5 | using UnityEngine; 6 | 7 | public class Sender : MonoBehaviour 8 | { 9 | 10 | #region Core 11 | private static void SendTCPData(Packet _packet) 12 | { 13 | _packet.WriteLength(); 14 | Client.instance.tcp.SendData(_packet); 15 | } 16 | 17 | private static void SendUDPData(Packet _packet) 18 | { 19 | _packet.WriteLength(); 20 | Client.instance.udp.SendData(_packet); 21 | } 22 | #endregion 23 | 24 | #region TCP 25 | public static void TCP_Send(Packet packet) 26 | { 27 | if(packet != null) 28 | { 29 | packet.SetID((int)Packet.ID.CUSTOM); 30 | SendTCPData(packet); 31 | } 32 | } 33 | #endregion 34 | 35 | #region UDP 36 | public static void UDP_Send(Packet packet) 37 | { 38 | if (packet != null) 39 | { 40 | packet.SetID((int)Packet.ID.CUSTOM); 41 | SendUDPData(packet); 42 | } 43 | } 44 | #endregion 45 | 46 | } 47 | } -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts/Sender.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 277964aee86b35d4ead322f6f1bf14ba 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts/SerializableDictionary.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Xml.Serialization; 3 | 4 | [XmlRoot("dictionary")] 5 | public class SerializableDictionary: Dictionary, IXmlSerializable 6 | { 7 | 8 | public System.Xml.Schema.XmlSchema GetSchema() 9 | { 10 | return null; 11 | } 12 | 13 | public void ReadXml(System.Xml.XmlReader reader) 14 | { 15 | XmlSerializer keySerializer = new XmlSerializer(typeof(TKey)); 16 | XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue)); 17 | bool wasEmpty = reader.IsEmptyElement; 18 | reader.Read(); 19 | 20 | if (wasEmpty) 21 | { 22 | return; 23 | } 24 | 25 | while (reader.NodeType != System.Xml.XmlNodeType.EndElement) 26 | { 27 | reader.ReadStartElement("item"); 28 | reader.ReadStartElement("key"); 29 | TKey key = (TKey)keySerializer.Deserialize(reader); 30 | reader.ReadEndElement(); 31 | reader.ReadStartElement("value"); 32 | TValue value = (TValue)valueSerializer.Deserialize(reader); 33 | reader.ReadEndElement(); 34 | this.Add(key, value); 35 | reader.ReadEndElement(); 36 | reader.MoveToContent(); 37 | } 38 | reader.ReadEndElement(); 39 | } 40 | 41 | public void WriteXml(System.Xml.XmlWriter writer) 42 | { 43 | XmlSerializer keySerializer = new XmlSerializer(typeof(TKey)); 44 | XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue)); 45 | foreach (TKey key in this.Keys) 46 | { 47 | writer.WriteStartElement("item"); 48 | writer.WriteStartElement("key"); 49 | keySerializer.Serialize(writer, key); 50 | writer.WriteEndElement(); 51 | writer.WriteStartElement("value"); 52 | TValue value = this[key]; 53 | valueSerializer.Serialize(writer, value); 54 | writer.WriteEndElement(); 55 | writer.WriteEndElement(); 56 | } 57 | } 58 | 59 | } -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts/SerializableDictionary.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 37585d69e77def342b3dcc9569f3357f 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts/Settings.cs: -------------------------------------------------------------------------------- 1 | namespace DevelopersHub.RealtimeNetworking.Client 2 | { 3 | using System.IO; 4 | using UnityEngine; 5 | 6 | public class Settings : ScriptableObject 7 | { 8 | 9 | [Header("Credentials")] 10 | [Tooltip("Server IP address.")] 11 | [SerializeField] private string _ip = "127.0.0.1"; public string ip { get { return _ip; } } 12 | 13 | [Tooltip("Server port number.")] 14 | [SerializeField] private int _port = 5555; public int port { get { return _port; } } 15 | 16 | [Space] 17 | [SerializeField] public NetworkObject[] prefabs = null; 18 | 19 | #if UNITY_EDITOR 20 | [UnityEditor.MenuItem("Developers Hub/Realtime Networking/Settings")] 21 | public static void CreateSettings() 22 | { 23 | string[] guids = UnityEditor.AssetDatabase.FindAssets("t:" + typeof(DevelopersHub.RealtimeNetworking.Client.Settings).Name); 24 | if (guids.Length > 0) 25 | { 26 | string path = UnityEditor.AssetDatabase.GUIDToAssetPath(guids[0]); 27 | UnityEditor.EditorUtility.FocusProjectWindow(); 28 | Object obj = UnityEditor.AssetDatabase.LoadAssetAtPath(path); 29 | UnityEditor.Selection.activeObject = obj; 30 | } 31 | else 32 | { 33 | string path = Application.dataPath + "/DevelopersHub/RealtimeNetworking/Resources"; 34 | if (!Directory.Exists(path)) 35 | { 36 | Directory.CreateDirectory(path); 37 | } 38 | DevelopersHub.RealtimeNetworking.Client.Settings asset = ScriptableObject.CreateInstance(); 39 | UnityEditor.AssetDatabase.CreateAsset(asset, "Assets/DevelopersHub/RealtimeNetworking/Resources/Settings.asset"); 40 | UnityEditor.AssetDatabase.SaveAssets(); 41 | UnityEditor.EditorUtility.FocusProjectWindow(); 42 | UnityEditor.Selection.activeObject = asset; 43 | } 44 | } 45 | #endif 46 | 47 | } 48 | } -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts/Settings.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8bf953d67a0f1464197895d6ba33d04c 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts/ThreadDispatcher.cs: -------------------------------------------------------------------------------- 1 | namespace DevelopersHub.RealtimeNetworking.Client 2 | { 3 | using System; 4 | using System.Collections; 5 | using System.Collections.Generic; 6 | using System.Threading.Tasks; 7 | using UnityEngine; 8 | 9 | public class ThreadDispatcher : MonoBehaviour 10 | { 11 | 12 | private static ThreadDispatcher _instance = null; 13 | private static readonly Queue _queue = new Queue(); 14 | private static bool _initialized = false; 15 | public static ThreadDispatcher instance { get { return _instance; } } 16 | 17 | [RuntimeInitializeOnLoadMethod] private static void Initialize() 18 | { 19 | if (_initialized) { return; } 20 | _initialized = true; 21 | _instance = FindFirstObjectByType(); 22 | if (_instance == null) 23 | { 24 | _instance = new GameObject("ThreadDispatcher").AddComponent(); 25 | } 26 | DontDestroyOnLoad(_instance.gameObject); 27 | } 28 | 29 | private void Awake() 30 | { 31 | Initialize(); 32 | _queue.Clear(); 33 | } 34 | 35 | private void OnDestroy() 36 | { 37 | if (_instance == this) 38 | { 39 | _instance = null; 40 | } 41 | } 42 | 43 | private void Update() 44 | { 45 | lock (_queue) 46 | { 47 | while (_queue.Count > 0) 48 | { 49 | _queue.Dequeue().Invoke(); 50 | } 51 | } 52 | } 53 | 54 | public void Enqueue(IEnumerator action) 55 | { 56 | lock (_queue) 57 | { 58 | _queue.Enqueue(() => 59 | { 60 | StartCoroutine(action); 61 | }); 62 | } 63 | } 64 | 65 | public void Enqueue(Action action) 66 | { 67 | Enqueue(WrappeAction(action)); 68 | } 69 | 70 | public Task EnqueueAsync(Action action) 71 | { 72 | var task = new TaskCompletionSource(); 73 | void WrappedAction() 74 | { 75 | try 76 | { 77 | action(); 78 | task.TrySetResult(true); 79 | } 80 | catch (Exception ex) 81 | { 82 | task.TrySetException(ex); 83 | } 84 | } 85 | Enqueue(WrappeAction(WrappedAction)); 86 | return task.Task; 87 | } 88 | 89 | private IEnumerator WrappeAction(Action action) 90 | { 91 | action(); 92 | yield return null; 93 | } 94 | 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts/ThreadDispatcher.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a2f7eb2e893c9614d97f93b72c039589 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts/Threading.cs: -------------------------------------------------------------------------------- 1 | namespace DevelopersHub.RealtimeNetworking.Client 2 | { 3 | using System; 4 | using System.Collections.Generic; 5 | using UnityEngine; 6 | 7 | public class Threading : MonoBehaviour 8 | { 9 | private static readonly List executeOnMainThread = new List(); 10 | private static readonly List executeCopiedOnMainThread = new List(); 11 | private static bool actionToExecuteOnMainThread = false; 12 | 13 | private void Update() 14 | { 15 | UpdateMain(); 16 | } 17 | 18 | public static void ExecuteOnMainThread(Action action) 19 | { 20 | if (action == null) 21 | { 22 | Debug.Log("No action to execute on main thread!"); 23 | return; 24 | } 25 | lock (executeOnMainThread) 26 | { 27 | executeOnMainThread.Add(action); 28 | actionToExecuteOnMainThread = true; 29 | } 30 | } 31 | 32 | public static void UpdateMain() 33 | { 34 | if (actionToExecuteOnMainThread) 35 | { 36 | executeCopiedOnMainThread.Clear(); 37 | lock (executeOnMainThread) 38 | { 39 | executeCopiedOnMainThread.AddRange(executeOnMainThread); 40 | executeOnMainThread.Clear(); 41 | actionToExecuteOnMainThread = false; 42 | } 43 | for (int i = 0; i < executeCopiedOnMainThread.Count; i++) 44 | { 45 | executeCopiedOnMainThread[i](); 46 | } 47 | } 48 | } 49 | 50 | } 51 | } -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts/Threading.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0226baaca2ec9c44880ba9d95d6773ff 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts/Tools.cs: -------------------------------------------------------------------------------- 1 | namespace DevelopersHub.RealtimeNetworking.Client 2 | { 3 | using System; 4 | using System.Collections; 5 | using System.Collections.Generic; 6 | using System.IO; 7 | using System.IO.Compression; 8 | using System.Net.Sockets; 9 | using System.Net; 10 | using System.Security.Cryptography; 11 | using System.Text; 12 | using System.Threading.Tasks; 13 | using System.Xml.Serialization; 14 | 15 | public static class Tools 16 | { 17 | 18 | public static string GenerateToken() 19 | { 20 | return Path.GetRandomFileName().Remove(8, 1); 21 | } 22 | 23 | public static T CloneClass(this T target) 24 | { 25 | return Desrialize(Serialize(target)); 26 | } 27 | 28 | public static void CopyTo(Stream source, Stream target) 29 | { 30 | byte[] bytes = new byte[4096]; int count; 31 | while ((count = source.Read(bytes, 0, bytes.Length)) != 0) 32 | { 33 | target.Write(bytes, 0, count); 34 | } 35 | } 36 | 37 | public static int FindFreeTcpPort() 38 | { 39 | TcpListener listener = new TcpListener(IPAddress.Loopback, 0); 40 | listener.Start(); 41 | int port = ((IPEndPoint)listener.LocalEndpoint).Port; 42 | listener.Stop(); 43 | return port; 44 | } 45 | 46 | #region Encryption 47 | public static string EncrypteToMD5(string data) 48 | { 49 | UTF8Encoding ue = new UTF8Encoding(); 50 | byte[] bytes = ue.GetBytes(data); 51 | MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); 52 | byte[] hashBytes = md5.ComputeHash(bytes); 53 | string hashString = ""; 54 | for (int i = 0; i < hashBytes.Length; i++) 55 | { 56 | hashString = hashString + Convert.ToString(hashBytes[i], 16).PadLeft(2, '0'); 57 | } 58 | return hashString.PadLeft(32, '0'); 59 | } 60 | #endregion 61 | 62 | #region Serialization 63 | public static string Serialize(this T target) 64 | { 65 | XmlSerializer xml = new XmlSerializer(typeof(T)); 66 | StringWriter writer = new StringWriter(); 67 | xml.Serialize(writer, target); 68 | return writer.ToString(); 69 | } 70 | 71 | public static T Desrialize(this string target) 72 | { 73 | XmlSerializer xml = new XmlSerializer(typeof(T)); 74 | StringReader reader = new StringReader(target); 75 | return (T)xml.Deserialize(reader); 76 | } 77 | 78 | public async static Task SerializeAsync(this T target) 79 | { 80 | Task task = Task.Run(() => 81 | { 82 | XmlSerializer xml = new XmlSerializer(typeof(T)); 83 | StringWriter writer = new StringWriter(); 84 | xml.Serialize(writer, target); 85 | return writer.ToString(); 86 | }); 87 | return await task; 88 | } 89 | 90 | public async static Task DesrializeAsync(this string target) 91 | { 92 | Task task = Task.Run(() => 93 | { 94 | XmlSerializer xml = new XmlSerializer(typeof(T)); 95 | StringReader reader = new StringReader(target); 96 | return (T)xml.Deserialize(reader); 97 | }); 98 | return await task; 99 | } 100 | #endregion 101 | 102 | #region Compression 103 | public async static Task CompressAsync(string target) 104 | { 105 | Task task = Task.Run(() => 106 | { 107 | return Compress(target); 108 | }); 109 | return await task; 110 | } 111 | 112 | public static byte[] Compress(string target) 113 | { 114 | var bytes = Encoding.UTF8.GetBytes(target); 115 | using (var msi = new MemoryStream(bytes)) 116 | { 117 | using (var mso = new MemoryStream()) 118 | { 119 | using (var gs = new GZipStream(mso, CompressionMode.Compress)) 120 | { 121 | CopyTo(msi, gs); 122 | } 123 | return mso.ToArray(); 124 | } 125 | } 126 | } 127 | 128 | public async static Task CompressStringAsync(string target) 129 | { 130 | Task task = Task.Run(() => 131 | { 132 | return CompressString(target); 133 | }); 134 | return await task; 135 | } 136 | 137 | public static string CompressString(string target) 138 | { 139 | return Convert.ToBase64String(Compress(target)); 140 | } 141 | 142 | public async static Task DecompressAsync(byte[] bytes) 143 | { 144 | Task task = Task.Run(() => 145 | { 146 | return Decompress(bytes); 147 | }); 148 | return await task; 149 | } 150 | 151 | public static string Decompress(byte[] bytes) 152 | { 153 | using (var msi = new MemoryStream(bytes)) 154 | { 155 | using (var mso = new MemoryStream()) 156 | { 157 | using (var gs = new GZipStream(msi, CompressionMode.Decompress)) 158 | { 159 | CopyTo(gs, mso); 160 | } 161 | return Encoding.UTF8.GetString(mso.ToArray()); 162 | } 163 | } 164 | } 165 | 166 | public async static Task DecompressStringAsync(string target) 167 | { 168 | Task task = Task.Run(() => 169 | { 170 | return DecompressString(target); 171 | }); 172 | return await task; 173 | } 174 | 175 | public static string DecompressString(string target) 176 | { 177 | return Decompress(Convert.FromBase64String(target)); 178 | } 179 | #endregion 180 | 181 | } 182 | } 183 | -------------------------------------------------------------------------------- /Assets/DevelopersHub/RealtimeNetworking/Scripts/Tools.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ff3155c796672034dbb9068f9c0795c0 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /License: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Developers Hub 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Packages/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "com.unity.ai.navigation": "1.1.5", 4 | "com.unity.ide.rider": "3.0.26", 5 | "com.unity.ide.visualstudio": "2.0.22", 6 | "com.unity.test-framework": "1.3.9", 7 | "com.unity.ugui": "1.0.0", 8 | "com.unity.modules.ai": "1.0.0", 9 | "com.unity.modules.androidjni": "1.0.0", 10 | "com.unity.modules.animation": "1.0.0", 11 | "com.unity.modules.assetbundle": "1.0.0", 12 | "com.unity.modules.audio": "1.0.0", 13 | "com.unity.modules.cloth": "1.0.0", 14 | "com.unity.modules.director": "1.0.0", 15 | "com.unity.modules.imageconversion": "1.0.0", 16 | "com.unity.modules.imgui": "1.0.0", 17 | "com.unity.modules.jsonserialize": "1.0.0", 18 | "com.unity.modules.particlesystem": "1.0.0", 19 | "com.unity.modules.physics": "1.0.0", 20 | "com.unity.modules.physics2d": "1.0.0", 21 | "com.unity.modules.screencapture": "1.0.0", 22 | "com.unity.modules.terrain": "1.0.0", 23 | "com.unity.modules.terrainphysics": "1.0.0", 24 | "com.unity.modules.tilemap": "1.0.0", 25 | "com.unity.modules.ui": "1.0.0", 26 | "com.unity.modules.uielements": "1.0.0", 27 | "com.unity.modules.umbra": "1.0.0", 28 | "com.unity.modules.unityanalytics": "1.0.0", 29 | "com.unity.modules.unitywebrequest": "1.0.0", 30 | "com.unity.modules.unitywebrequestassetbundle": "1.0.0", 31 | "com.unity.modules.unitywebrequestaudio": "1.0.0", 32 | "com.unity.modules.unitywebrequesttexture": "1.0.0", 33 | "com.unity.modules.unitywebrequestwww": "1.0.0", 34 | "com.unity.modules.vehicles": "1.0.0", 35 | "com.unity.modules.video": "1.0.0", 36 | "com.unity.modules.vr": "1.0.0", 37 | "com.unity.modules.wind": "1.0.0", 38 | "com.unity.modules.xr": "1.0.0" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Packages/packages-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "com.unity.ai.navigation": { 4 | "version": "1.1.5", 5 | "depth": 0, 6 | "source": "registry", 7 | "dependencies": { 8 | "com.unity.modules.ai": "1.0.0" 9 | }, 10 | "url": "https://packages.unity.com" 11 | }, 12 | "com.unity.ext.nunit": { 13 | "version": "2.0.3", 14 | "depth": 1, 15 | "source": "registry", 16 | "dependencies": {}, 17 | "url": "https://packages.unity.com" 18 | }, 19 | "com.unity.ide.rider": { 20 | "version": "3.0.26", 21 | "depth": 0, 22 | "source": "registry", 23 | "dependencies": { 24 | "com.unity.ext.nunit": "1.0.6" 25 | }, 26 | "url": "https://packages.unity.com" 27 | }, 28 | "com.unity.ide.visualstudio": { 29 | "version": "2.0.22", 30 | "depth": 0, 31 | "source": "registry", 32 | "dependencies": { 33 | "com.unity.test-framework": "1.1.9" 34 | }, 35 | "url": "https://packages.unity.com" 36 | }, 37 | "com.unity.test-framework": { 38 | "version": "1.3.9", 39 | "depth": 0, 40 | "source": "registry", 41 | "dependencies": { 42 | "com.unity.ext.nunit": "2.0.3", 43 | "com.unity.modules.imgui": "1.0.0", 44 | "com.unity.modules.jsonserialize": "1.0.0" 45 | }, 46 | "url": "https://packages.unity.com" 47 | }, 48 | "com.unity.ugui": { 49 | "version": "1.0.0", 50 | "depth": 0, 51 | "source": "builtin", 52 | "dependencies": { 53 | "com.unity.modules.ui": "1.0.0", 54 | "com.unity.modules.imgui": "1.0.0" 55 | } 56 | }, 57 | "com.unity.modules.ai": { 58 | "version": "1.0.0", 59 | "depth": 0, 60 | "source": "builtin", 61 | "dependencies": {} 62 | }, 63 | "com.unity.modules.androidjni": { 64 | "version": "1.0.0", 65 | "depth": 0, 66 | "source": "builtin", 67 | "dependencies": {} 68 | }, 69 | "com.unity.modules.animation": { 70 | "version": "1.0.0", 71 | "depth": 0, 72 | "source": "builtin", 73 | "dependencies": {} 74 | }, 75 | "com.unity.modules.assetbundle": { 76 | "version": "1.0.0", 77 | "depth": 0, 78 | "source": "builtin", 79 | "dependencies": {} 80 | }, 81 | "com.unity.modules.audio": { 82 | "version": "1.0.0", 83 | "depth": 0, 84 | "source": "builtin", 85 | "dependencies": {} 86 | }, 87 | "com.unity.modules.cloth": { 88 | "version": "1.0.0", 89 | "depth": 0, 90 | "source": "builtin", 91 | "dependencies": { 92 | "com.unity.modules.physics": "1.0.0" 93 | } 94 | }, 95 | "com.unity.modules.director": { 96 | "version": "1.0.0", 97 | "depth": 0, 98 | "source": "builtin", 99 | "dependencies": { 100 | "com.unity.modules.audio": "1.0.0", 101 | "com.unity.modules.animation": "1.0.0" 102 | } 103 | }, 104 | "com.unity.modules.imageconversion": { 105 | "version": "1.0.0", 106 | "depth": 0, 107 | "source": "builtin", 108 | "dependencies": {} 109 | }, 110 | "com.unity.modules.imgui": { 111 | "version": "1.0.0", 112 | "depth": 0, 113 | "source": "builtin", 114 | "dependencies": {} 115 | }, 116 | "com.unity.modules.jsonserialize": { 117 | "version": "1.0.0", 118 | "depth": 0, 119 | "source": "builtin", 120 | "dependencies": {} 121 | }, 122 | "com.unity.modules.particlesystem": { 123 | "version": "1.0.0", 124 | "depth": 0, 125 | "source": "builtin", 126 | "dependencies": {} 127 | }, 128 | "com.unity.modules.physics": { 129 | "version": "1.0.0", 130 | "depth": 0, 131 | "source": "builtin", 132 | "dependencies": {} 133 | }, 134 | "com.unity.modules.physics2d": { 135 | "version": "1.0.0", 136 | "depth": 0, 137 | "source": "builtin", 138 | "dependencies": {} 139 | }, 140 | "com.unity.modules.screencapture": { 141 | "version": "1.0.0", 142 | "depth": 0, 143 | "source": "builtin", 144 | "dependencies": { 145 | "com.unity.modules.imageconversion": "1.0.0" 146 | } 147 | }, 148 | "com.unity.modules.subsystems": { 149 | "version": "1.0.0", 150 | "depth": 1, 151 | "source": "builtin", 152 | "dependencies": { 153 | "com.unity.modules.jsonserialize": "1.0.0" 154 | } 155 | }, 156 | "com.unity.modules.terrain": { 157 | "version": "1.0.0", 158 | "depth": 0, 159 | "source": "builtin", 160 | "dependencies": {} 161 | }, 162 | "com.unity.modules.terrainphysics": { 163 | "version": "1.0.0", 164 | "depth": 0, 165 | "source": "builtin", 166 | "dependencies": { 167 | "com.unity.modules.physics": "1.0.0", 168 | "com.unity.modules.terrain": "1.0.0" 169 | } 170 | }, 171 | "com.unity.modules.tilemap": { 172 | "version": "1.0.0", 173 | "depth": 0, 174 | "source": "builtin", 175 | "dependencies": { 176 | "com.unity.modules.physics2d": "1.0.0" 177 | } 178 | }, 179 | "com.unity.modules.ui": { 180 | "version": "1.0.0", 181 | "depth": 0, 182 | "source": "builtin", 183 | "dependencies": {} 184 | }, 185 | "com.unity.modules.uielements": { 186 | "version": "1.0.0", 187 | "depth": 0, 188 | "source": "builtin", 189 | "dependencies": { 190 | "com.unity.modules.ui": "1.0.0", 191 | "com.unity.modules.imgui": "1.0.0", 192 | "com.unity.modules.jsonserialize": "1.0.0" 193 | } 194 | }, 195 | "com.unity.modules.umbra": { 196 | "version": "1.0.0", 197 | "depth": 0, 198 | "source": "builtin", 199 | "dependencies": {} 200 | }, 201 | "com.unity.modules.unityanalytics": { 202 | "version": "1.0.0", 203 | "depth": 0, 204 | "source": "builtin", 205 | "dependencies": { 206 | "com.unity.modules.unitywebrequest": "1.0.0", 207 | "com.unity.modules.jsonserialize": "1.0.0" 208 | } 209 | }, 210 | "com.unity.modules.unitywebrequest": { 211 | "version": "1.0.0", 212 | "depth": 0, 213 | "source": "builtin", 214 | "dependencies": {} 215 | }, 216 | "com.unity.modules.unitywebrequestassetbundle": { 217 | "version": "1.0.0", 218 | "depth": 0, 219 | "source": "builtin", 220 | "dependencies": { 221 | "com.unity.modules.assetbundle": "1.0.0", 222 | "com.unity.modules.unitywebrequest": "1.0.0" 223 | } 224 | }, 225 | "com.unity.modules.unitywebrequestaudio": { 226 | "version": "1.0.0", 227 | "depth": 0, 228 | "source": "builtin", 229 | "dependencies": { 230 | "com.unity.modules.unitywebrequest": "1.0.0", 231 | "com.unity.modules.audio": "1.0.0" 232 | } 233 | }, 234 | "com.unity.modules.unitywebrequesttexture": { 235 | "version": "1.0.0", 236 | "depth": 0, 237 | "source": "builtin", 238 | "dependencies": { 239 | "com.unity.modules.unitywebrequest": "1.0.0", 240 | "com.unity.modules.imageconversion": "1.0.0" 241 | } 242 | }, 243 | "com.unity.modules.unitywebrequestwww": { 244 | "version": "1.0.0", 245 | "depth": 0, 246 | "source": "builtin", 247 | "dependencies": { 248 | "com.unity.modules.unitywebrequest": "1.0.0", 249 | "com.unity.modules.unitywebrequestassetbundle": "1.0.0", 250 | "com.unity.modules.unitywebrequestaudio": "1.0.0", 251 | "com.unity.modules.audio": "1.0.0", 252 | "com.unity.modules.assetbundle": "1.0.0", 253 | "com.unity.modules.imageconversion": "1.0.0" 254 | } 255 | }, 256 | "com.unity.modules.vehicles": { 257 | "version": "1.0.0", 258 | "depth": 0, 259 | "source": "builtin", 260 | "dependencies": { 261 | "com.unity.modules.physics": "1.0.0" 262 | } 263 | }, 264 | "com.unity.modules.video": { 265 | "version": "1.0.0", 266 | "depth": 0, 267 | "source": "builtin", 268 | "dependencies": { 269 | "com.unity.modules.audio": "1.0.0", 270 | "com.unity.modules.ui": "1.0.0", 271 | "com.unity.modules.unitywebrequest": "1.0.0" 272 | } 273 | }, 274 | "com.unity.modules.vr": { 275 | "version": "1.0.0", 276 | "depth": 0, 277 | "source": "builtin", 278 | "dependencies": { 279 | "com.unity.modules.jsonserialize": "1.0.0", 280 | "com.unity.modules.physics": "1.0.0", 281 | "com.unity.modules.xr": "1.0.0" 282 | } 283 | }, 284 | "com.unity.modules.wind": { 285 | "version": "1.0.0", 286 | "depth": 0, 287 | "source": "builtin", 288 | "dependencies": {} 289 | }, 290 | "com.unity.modules.xr": { 291 | "version": "1.0.0", 292 | "depth": 0, 293 | "source": "builtin", 294 | "dependencies": { 295 | "com.unity.modules.physics": "1.0.0", 296 | "com.unity.modules.jsonserialize": "1.0.0", 297 | "com.unity.modules.subsystems": "1.0.0" 298 | } 299 | } 300 | } 301 | } 302 | -------------------------------------------------------------------------------- /ProjectSettings/AudioManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!11 &1 4 | AudioManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Volume: 1 8 | Rolloff Scale: 1 9 | Doppler Factor: 1 10 | Default Speaker Mode: 2 11 | m_SampleRate: 0 12 | m_DSPBufferSize: 1024 13 | m_VirtualVoiceCount: 512 14 | m_RealVoiceCount: 32 15 | m_SpatializerPlugin: 16 | m_AmbisonicDecoderPlugin: 17 | m_DisableAudio: 0 18 | m_VirtualizeEffects: 1 19 | m_RequestedDSPBufferSize: 1024 20 | -------------------------------------------------------------------------------- /ProjectSettings/ClusterInputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!236 &1 4 | ClusterInputManager: 5 | m_ObjectHideFlags: 0 6 | m_Inputs: [] 7 | -------------------------------------------------------------------------------- /ProjectSettings/DynamicsManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!55 &1 4 | PhysicsManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 11 7 | m_Gravity: {x: 0, y: -9.81, z: 0} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_BounceThreshold: 2 10 | m_SleepThreshold: 0.005 11 | m_DefaultContactOffset: 0.01 12 | m_DefaultSolverIterations: 6 13 | m_DefaultSolverVelocityIterations: 1 14 | m_QueriesHitBackfaces: 0 15 | m_QueriesHitTriggers: 1 16 | m_EnableAdaptiveForce: 0 17 | m_ClothInterCollisionDistance: 0 18 | m_ClothInterCollisionStiffness: 0 19 | m_ContactsGeneration: 1 20 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 21 | m_AutoSimulation: 1 22 | m_AutoSyncTransforms: 0 23 | m_ReuseCollisionCallbacks: 1 24 | m_ClothInterCollisionSettingsToggle: 0 25 | m_ContactPairsMode: 0 26 | m_BroadphaseType: 0 27 | m_WorldBounds: 28 | m_Center: {x: 0, y: 0, z: 0} 29 | m_Extent: {x: 250, y: 250, z: 250} 30 | m_WorldSubdivisions: 8 31 | m_FrictionType: 0 32 | m_EnableEnhancedDeterminism: 0 33 | m_EnableUnifiedHeightmaps: 1 34 | m_DefaultMaxAngluarSpeed: 7 35 | -------------------------------------------------------------------------------- /ProjectSettings/EditorBuildSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1045 &1 4 | EditorBuildSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Scenes: 8 | - enabled: 1 9 | path: Assets/DevelopersHub/RealtimeNetworking/Demo/01/Scenes/Demo_01_1_Menu.unity 10 | guid: bfcd5d9746e87994ea14dc922fc29c3e 11 | - enabled: 1 12 | path: Assets/DevelopersHub/RealtimeNetworking/Demo/01/Scenes/Demo_01_2_Game.unity 13 | guid: 10bc01d0cf58a4a4fb0a176cf3e5c908 14 | m_configObjects: {} 15 | -------------------------------------------------------------------------------- /ProjectSettings/EditorSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!159 &1 4 | EditorSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 11 7 | m_ExternalVersionControlSupport: Visible Meta Files 8 | m_SerializationMode: 2 9 | m_LineEndingsForNewScripts: 0 10 | m_DefaultBehaviorMode: 0 11 | m_PrefabRegularEnvironment: {fileID: 0} 12 | m_PrefabUIEnvironment: {fileID: 0} 13 | m_SpritePackerMode: 0 14 | m_SpritePackerPaddingPower: 1 15 | m_EtcTextureCompressorBehavior: 1 16 | m_EtcTextureFastCompressor: 1 17 | m_EtcTextureNormalCompressor: 2 18 | m_EtcTextureBestCompressor: 4 19 | m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp;asmref 20 | m_ProjectGenerationRootNamespace: 21 | m_CollabEditorSettings: 22 | inProgressEnabled: 1 23 | m_EnableTextureStreamingInEditMode: 1 24 | m_EnableTextureStreamingInPlayMode: 1 25 | m_AsyncShaderCompilation: 1 26 | m_EnterPlayModeOptionsEnabled: 0 27 | m_EnterPlayModeOptions: 3 28 | m_ShowLightmapResolutionOverlay: 1 29 | m_UseLegacyProbeSampleCount: 0 30 | m_SerializeInlineMappingsOnOneLine: 1 -------------------------------------------------------------------------------- /ProjectSettings/GraphicsSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!30 &1 4 | GraphicsSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 13 7 | m_Deferred: 8 | m_Mode: 1 9 | m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} 10 | m_DeferredReflections: 11 | m_Mode: 1 12 | m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} 13 | m_ScreenSpaceShadows: 14 | m_Mode: 1 15 | m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} 16 | m_LegacyDeferred: 17 | m_Mode: 1 18 | m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} 19 | m_DepthNormals: 20 | m_Mode: 1 21 | m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} 22 | m_MotionVectors: 23 | m_Mode: 1 24 | m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} 25 | m_LightHalo: 26 | m_Mode: 1 27 | m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} 28 | m_LensFlare: 29 | m_Mode: 1 30 | m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} 31 | m_AlwaysIncludedShaders: 32 | - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} 33 | - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} 34 | - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} 35 | - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} 36 | - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} 37 | - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} 38 | m_PreloadedShaders: [] 39 | m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, 40 | type: 0} 41 | m_CustomRenderPipeline: {fileID: 0} 42 | m_TransparencySortMode: 0 43 | m_TransparencySortAxis: {x: 0, y: 0, z: 1} 44 | m_DefaultRenderingPath: 1 45 | m_DefaultMobileRenderingPath: 1 46 | m_TierSettings: [] 47 | m_LightmapStripping: 0 48 | m_FogStripping: 0 49 | m_InstancingStripping: 0 50 | m_LightmapKeepPlain: 1 51 | m_LightmapKeepDirCombined: 1 52 | m_LightmapKeepDynamicPlain: 1 53 | m_LightmapKeepDynamicDirCombined: 1 54 | m_LightmapKeepShadowMask: 1 55 | m_LightmapKeepSubtractive: 1 56 | m_FogKeepLinear: 1 57 | m_FogKeepExp: 1 58 | m_FogKeepExp2: 1 59 | m_AlbedoSwatchInfos: [] 60 | m_LightsUseLinearIntensity: 0 61 | m_LightsUseColorTemperature: 0 62 | m_LogWhenShaderIsCompiled: 0 63 | m_AllowEnlightenSupportForUpgradedProject: 0 64 | -------------------------------------------------------------------------------- /ProjectSettings/InputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!13 &1 4 | InputManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Axes: 8 | - serializedVersion: 3 9 | m_Name: Horizontal 10 | descriptiveName: 11 | descriptiveNegativeName: 12 | negativeButton: left 13 | positiveButton: right 14 | altNegativeButton: a 15 | altPositiveButton: d 16 | gravity: 3 17 | dead: 0.001 18 | sensitivity: 3 19 | snap: 1 20 | invert: 0 21 | type: 0 22 | axis: 0 23 | joyNum: 0 24 | - serializedVersion: 3 25 | m_Name: Vertical 26 | descriptiveName: 27 | descriptiveNegativeName: 28 | negativeButton: down 29 | positiveButton: up 30 | altNegativeButton: s 31 | altPositiveButton: w 32 | gravity: 3 33 | dead: 0.001 34 | sensitivity: 3 35 | snap: 1 36 | invert: 0 37 | type: 0 38 | axis: 0 39 | joyNum: 0 40 | - serializedVersion: 3 41 | m_Name: Fire1 42 | descriptiveName: 43 | descriptiveNegativeName: 44 | negativeButton: 45 | positiveButton: left ctrl 46 | altNegativeButton: 47 | altPositiveButton: mouse 0 48 | gravity: 1000 49 | dead: 0.001 50 | sensitivity: 1000 51 | snap: 0 52 | invert: 0 53 | type: 0 54 | axis: 0 55 | joyNum: 0 56 | - serializedVersion: 3 57 | m_Name: Fire2 58 | descriptiveName: 59 | descriptiveNegativeName: 60 | negativeButton: 61 | positiveButton: left alt 62 | altNegativeButton: 63 | altPositiveButton: mouse 1 64 | gravity: 1000 65 | dead: 0.001 66 | sensitivity: 1000 67 | snap: 0 68 | invert: 0 69 | type: 0 70 | axis: 0 71 | joyNum: 0 72 | - serializedVersion: 3 73 | m_Name: Fire3 74 | descriptiveName: 75 | descriptiveNegativeName: 76 | negativeButton: 77 | positiveButton: left shift 78 | altNegativeButton: 79 | altPositiveButton: mouse 2 80 | gravity: 1000 81 | dead: 0.001 82 | sensitivity: 1000 83 | snap: 0 84 | invert: 0 85 | type: 0 86 | axis: 0 87 | joyNum: 0 88 | - serializedVersion: 3 89 | m_Name: Jump 90 | descriptiveName: 91 | descriptiveNegativeName: 92 | negativeButton: 93 | positiveButton: space 94 | altNegativeButton: 95 | altPositiveButton: 96 | gravity: 1000 97 | dead: 0.001 98 | sensitivity: 1000 99 | snap: 0 100 | invert: 0 101 | type: 0 102 | axis: 0 103 | joyNum: 0 104 | - serializedVersion: 3 105 | m_Name: Mouse X 106 | descriptiveName: 107 | descriptiveNegativeName: 108 | negativeButton: 109 | positiveButton: 110 | altNegativeButton: 111 | altPositiveButton: 112 | gravity: 0 113 | dead: 0 114 | sensitivity: 0.1 115 | snap: 0 116 | invert: 0 117 | type: 1 118 | axis: 0 119 | joyNum: 0 120 | - serializedVersion: 3 121 | m_Name: Mouse Y 122 | descriptiveName: 123 | descriptiveNegativeName: 124 | negativeButton: 125 | positiveButton: 126 | altNegativeButton: 127 | altPositiveButton: 128 | gravity: 0 129 | dead: 0 130 | sensitivity: 0.1 131 | snap: 0 132 | invert: 0 133 | type: 1 134 | axis: 1 135 | joyNum: 0 136 | - serializedVersion: 3 137 | m_Name: Mouse ScrollWheel 138 | descriptiveName: 139 | descriptiveNegativeName: 140 | negativeButton: 141 | positiveButton: 142 | altNegativeButton: 143 | altPositiveButton: 144 | gravity: 0 145 | dead: 0 146 | sensitivity: 0.1 147 | snap: 0 148 | invert: 0 149 | type: 1 150 | axis: 2 151 | joyNum: 0 152 | - serializedVersion: 3 153 | m_Name: Horizontal 154 | descriptiveName: 155 | descriptiveNegativeName: 156 | negativeButton: 157 | positiveButton: 158 | altNegativeButton: 159 | altPositiveButton: 160 | gravity: 0 161 | dead: 0.19 162 | sensitivity: 1 163 | snap: 0 164 | invert: 0 165 | type: 2 166 | axis: 0 167 | joyNum: 0 168 | - serializedVersion: 3 169 | m_Name: Vertical 170 | descriptiveName: 171 | descriptiveNegativeName: 172 | negativeButton: 173 | positiveButton: 174 | altNegativeButton: 175 | altPositiveButton: 176 | gravity: 0 177 | dead: 0.19 178 | sensitivity: 1 179 | snap: 0 180 | invert: 1 181 | type: 2 182 | axis: 1 183 | joyNum: 0 184 | - serializedVersion: 3 185 | m_Name: Fire1 186 | descriptiveName: 187 | descriptiveNegativeName: 188 | negativeButton: 189 | positiveButton: joystick button 0 190 | altNegativeButton: 191 | altPositiveButton: 192 | gravity: 1000 193 | dead: 0.001 194 | sensitivity: 1000 195 | snap: 0 196 | invert: 0 197 | type: 0 198 | axis: 0 199 | joyNum: 0 200 | - serializedVersion: 3 201 | m_Name: Fire2 202 | descriptiveName: 203 | descriptiveNegativeName: 204 | negativeButton: 205 | positiveButton: joystick button 1 206 | altNegativeButton: 207 | altPositiveButton: 208 | gravity: 1000 209 | dead: 0.001 210 | sensitivity: 1000 211 | snap: 0 212 | invert: 0 213 | type: 0 214 | axis: 0 215 | joyNum: 0 216 | - serializedVersion: 3 217 | m_Name: Fire3 218 | descriptiveName: 219 | descriptiveNegativeName: 220 | negativeButton: 221 | positiveButton: joystick button 2 222 | altNegativeButton: 223 | altPositiveButton: 224 | gravity: 1000 225 | dead: 0.001 226 | sensitivity: 1000 227 | snap: 0 228 | invert: 0 229 | type: 0 230 | axis: 0 231 | joyNum: 0 232 | - serializedVersion: 3 233 | m_Name: Jump 234 | descriptiveName: 235 | descriptiveNegativeName: 236 | negativeButton: 237 | positiveButton: joystick button 3 238 | altNegativeButton: 239 | altPositiveButton: 240 | gravity: 1000 241 | dead: 0.001 242 | sensitivity: 1000 243 | snap: 0 244 | invert: 0 245 | type: 0 246 | axis: 0 247 | joyNum: 0 248 | - serializedVersion: 3 249 | m_Name: Submit 250 | descriptiveName: 251 | descriptiveNegativeName: 252 | negativeButton: 253 | positiveButton: return 254 | altNegativeButton: 255 | altPositiveButton: joystick button 0 256 | gravity: 1000 257 | dead: 0.001 258 | sensitivity: 1000 259 | snap: 0 260 | invert: 0 261 | type: 0 262 | axis: 0 263 | joyNum: 0 264 | - serializedVersion: 3 265 | m_Name: Submit 266 | descriptiveName: 267 | descriptiveNegativeName: 268 | negativeButton: 269 | positiveButton: enter 270 | altNegativeButton: 271 | altPositiveButton: space 272 | gravity: 1000 273 | dead: 0.001 274 | sensitivity: 1000 275 | snap: 0 276 | invert: 0 277 | type: 0 278 | axis: 0 279 | joyNum: 0 280 | - serializedVersion: 3 281 | m_Name: Cancel 282 | descriptiveName: 283 | descriptiveNegativeName: 284 | negativeButton: 285 | positiveButton: escape 286 | altNegativeButton: 287 | altPositiveButton: joystick button 1 288 | gravity: 1000 289 | dead: 0.001 290 | sensitivity: 1000 291 | snap: 0 292 | invert: 0 293 | type: 0 294 | axis: 0 295 | joyNum: 0 296 | -------------------------------------------------------------------------------- /ProjectSettings/MemorySettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!387306366 &1 4 | MemorySettings: 5 | m_ObjectHideFlags: 0 6 | m_EditorMemorySettings: 7 | m_MainAllocatorBlockSize: -1 8 | m_ThreadAllocatorBlockSize: -1 9 | m_MainGfxBlockSize: -1 10 | m_ThreadGfxBlockSize: -1 11 | m_CacheBlockSize: -1 12 | m_TypetreeBlockSize: -1 13 | m_ProfilerBlockSize: -1 14 | m_ProfilerEditorBlockSize: -1 15 | m_BucketAllocatorGranularity: -1 16 | m_BucketAllocatorBucketsCount: -1 17 | m_BucketAllocatorBlockSize: -1 18 | m_BucketAllocatorBlockCount: -1 19 | m_ProfilerBucketAllocatorGranularity: -1 20 | m_ProfilerBucketAllocatorBucketsCount: -1 21 | m_ProfilerBucketAllocatorBlockSize: -1 22 | m_ProfilerBucketAllocatorBlockCount: -1 23 | m_TempAllocatorSizeMain: -1 24 | m_JobTempAllocatorBlockSize: -1 25 | m_BackgroundJobTempAllocatorBlockSize: -1 26 | m_JobTempAllocatorReducedBlockSize: -1 27 | m_TempAllocatorSizeGIBakingWorker: -1 28 | m_TempAllocatorSizeNavMeshWorker: -1 29 | m_TempAllocatorSizeAudioWorker: -1 30 | m_TempAllocatorSizeCloudWorker: -1 31 | m_TempAllocatorSizeGfx: -1 32 | m_TempAllocatorSizeJobWorker: -1 33 | m_TempAllocatorSizeBackgroundWorker: -1 34 | m_TempAllocatorSizePreloadManager: -1 35 | m_PlatformMemorySettings: {} 36 | -------------------------------------------------------------------------------- /ProjectSettings/NavMeshAreas.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!126 &1 4 | NavMeshProjectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | areas: 8 | - name: Walkable 9 | cost: 1 10 | - name: Not Walkable 11 | cost: 1 12 | - name: Jump 13 | cost: 2 14 | - name: 15 | cost: 1 16 | - name: 17 | cost: 1 18 | - name: 19 | cost: 1 20 | - name: 21 | cost: 1 22 | - name: 23 | cost: 1 24 | - name: 25 | cost: 1 26 | - name: 27 | cost: 1 28 | - name: 29 | cost: 1 30 | - name: 31 | cost: 1 32 | - name: 33 | cost: 1 34 | - name: 35 | cost: 1 36 | - name: 37 | cost: 1 38 | - name: 39 | cost: 1 40 | - name: 41 | cost: 1 42 | - name: 43 | cost: 1 44 | - name: 45 | cost: 1 46 | - name: 47 | cost: 1 48 | - name: 49 | cost: 1 50 | - name: 51 | cost: 1 52 | - name: 53 | cost: 1 54 | - name: 55 | cost: 1 56 | - name: 57 | cost: 1 58 | - name: 59 | cost: 1 60 | - name: 61 | cost: 1 62 | - name: 63 | cost: 1 64 | - name: 65 | cost: 1 66 | - name: 67 | cost: 1 68 | - name: 69 | cost: 1 70 | - name: 71 | cost: 1 72 | m_LastAgentTypeID: -887442657 73 | m_Settings: 74 | - serializedVersion: 2 75 | agentTypeID: 0 76 | agentRadius: 0.5 77 | agentHeight: 2 78 | agentSlope: 45 79 | agentClimb: 0.75 80 | ledgeDropHeight: 0 81 | maxJumpAcrossDistance: 0 82 | minRegionArea: 2 83 | manualCellSize: 0 84 | cellSize: 0.16666667 85 | manualTileSize: 0 86 | tileSize: 256 87 | accuratePlacement: 0 88 | debug: 89 | m_Flags: 0 90 | m_SettingNames: 91 | - Humanoid 92 | -------------------------------------------------------------------------------- /ProjectSettings/PackageManagerSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &1 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 61 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0} 13 | m_Name: 14 | m_EditorClassIdentifier: 15 | m_EnablePreviewPackages: 0 16 | m_EnablePackageDependencies: 0 17 | m_AdvancedSettingsExpanded: 1 18 | m_ScopedRegistriesSettingsExpanded: 1 19 | oneTimeWarningShown: 0 20 | m_Registries: 21 | - m_Id: main 22 | m_Name: 23 | m_Url: https://packages.unity.com 24 | m_Scopes: [] 25 | m_IsDefault: 1 26 | m_Capabilities: 7 27 | m_UserSelectedRegistryName: 28 | m_UserAddingNewScopedRegistry: 0 29 | m_RegistryInfoDraft: 30 | m_ErrorMessage: 31 | m_Original: 32 | m_Id: 33 | m_Name: 34 | m_Url: 35 | m_Scopes: [] 36 | m_IsDefault: 0 37 | m_Capabilities: 0 38 | m_Modified: 0 39 | m_Name: 40 | m_Url: 41 | m_Scopes: 42 | - 43 | m_SelectedScopeIndex: 0 44 | -------------------------------------------------------------------------------- /ProjectSettings/Physics2DSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!19 &1 4 | Physics2DSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 4 7 | m_Gravity: {x: 0, y: -9.81} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_VelocityIterations: 8 10 | m_PositionIterations: 3 11 | m_VelocityThreshold: 1 12 | m_MaxLinearCorrection: 0.2 13 | m_MaxAngularCorrection: 8 14 | m_MaxTranslationSpeed: 100 15 | m_MaxRotationSpeed: 360 16 | m_BaumgarteScale: 0.2 17 | m_BaumgarteTimeOfImpactScale: 0.75 18 | m_TimeToSleep: 0.5 19 | m_LinearSleepTolerance: 0.01 20 | m_AngularSleepTolerance: 2 21 | m_DefaultContactOffset: 0.01 22 | m_JobOptions: 23 | serializedVersion: 2 24 | useMultithreading: 0 25 | useConsistencySorting: 0 26 | m_InterpolationPosesPerJob: 100 27 | m_NewContactsPerJob: 30 28 | m_CollideContactsPerJob: 100 29 | m_ClearFlagsPerJob: 200 30 | m_ClearBodyForcesPerJob: 200 31 | m_SyncDiscreteFixturesPerJob: 50 32 | m_SyncContinuousFixturesPerJob: 50 33 | m_FindNearestContactsPerJob: 100 34 | m_UpdateTriggerContactsPerJob: 100 35 | m_IslandSolverCostThreshold: 100 36 | m_IslandSolverBodyCostScale: 1 37 | m_IslandSolverContactCostScale: 10 38 | m_IslandSolverJointCostScale: 10 39 | m_IslandSolverBodiesPerJob: 50 40 | m_IslandSolverContactsPerJob: 50 41 | m_AutoSimulation: 1 42 | m_QueriesHitTriggers: 1 43 | m_QueriesStartInColliders: 1 44 | m_CallbacksOnDisable: 1 45 | m_ReuseCollisionCallbacks: 1 46 | m_AutoSyncTransforms: 0 47 | m_AlwaysShowColliders: 0 48 | m_ShowColliderSleep: 1 49 | m_ShowColliderContacts: 0 50 | m_ShowColliderAABB: 0 51 | m_ContactArrowScale: 0.2 52 | m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} 53 | m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} 54 | m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} 55 | m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} 56 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 57 | -------------------------------------------------------------------------------- /ProjectSettings/PresetManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1386491679 &1 4 | PresetManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_DefaultPresets: {} 8 | -------------------------------------------------------------------------------- /ProjectSettings/ProjectVersion.txt: -------------------------------------------------------------------------------- 1 | m_EditorVersion: 2023.1.19f1 2 | m_EditorVersionWithRevision: 2023.1.19f1 (629111e352bc) 3 | -------------------------------------------------------------------------------- /ProjectSettings/QualitySettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!47 &1 4 | QualitySettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 5 7 | m_CurrentQuality: 5 8 | m_QualitySettings: 9 | - serializedVersion: 2 10 | name: Very Low 11 | pixelLightCount: 0 12 | shadows: 0 13 | shadowResolution: 0 14 | shadowProjection: 1 15 | shadowCascades: 1 16 | shadowDistance: 15 17 | shadowNearPlaneOffset: 3 18 | shadowCascade2Split: 0.33333334 19 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 20 | shadowmaskMode: 0 21 | blendWeights: 1 22 | textureQuality: 1 23 | anisotropicTextures: 0 24 | antiAliasing: 0 25 | softParticles: 0 26 | softVegetation: 0 27 | realtimeReflectionProbes: 0 28 | billboardsFaceCameraPosition: 0 29 | vSyncCount: 0 30 | lodBias: 0.3 31 | maximumLODLevel: 0 32 | streamingMipmapsActive: 0 33 | streamingMipmapsAddAllCameras: 1 34 | streamingMipmapsMemoryBudget: 512 35 | streamingMipmapsRenderersPerFrame: 512 36 | streamingMipmapsMaxLevelReduction: 2 37 | streamingMipmapsMaxFileIORequests: 1024 38 | particleRaycastBudget: 4 39 | asyncUploadTimeSlice: 2 40 | asyncUploadBufferSize: 16 41 | asyncUploadPersistentBuffer: 1 42 | resolutionScalingFixedDPIFactor: 1 43 | excludedTargetPlatforms: [] 44 | - serializedVersion: 2 45 | name: Low 46 | pixelLightCount: 0 47 | shadows: 0 48 | shadowResolution: 0 49 | shadowProjection: 1 50 | shadowCascades: 1 51 | shadowDistance: 20 52 | shadowNearPlaneOffset: 3 53 | shadowCascade2Split: 0.33333334 54 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 55 | shadowmaskMode: 0 56 | blendWeights: 2 57 | textureQuality: 0 58 | anisotropicTextures: 0 59 | antiAliasing: 0 60 | softParticles: 0 61 | softVegetation: 0 62 | realtimeReflectionProbes: 0 63 | billboardsFaceCameraPosition: 0 64 | vSyncCount: 0 65 | lodBias: 0.4 66 | maximumLODLevel: 0 67 | streamingMipmapsActive: 0 68 | streamingMipmapsAddAllCameras: 1 69 | streamingMipmapsMemoryBudget: 512 70 | streamingMipmapsRenderersPerFrame: 512 71 | streamingMipmapsMaxLevelReduction: 2 72 | streamingMipmapsMaxFileIORequests: 1024 73 | particleRaycastBudget: 16 74 | asyncUploadTimeSlice: 2 75 | asyncUploadBufferSize: 16 76 | asyncUploadPersistentBuffer: 1 77 | resolutionScalingFixedDPIFactor: 1 78 | excludedTargetPlatforms: [] 79 | - serializedVersion: 2 80 | name: Medium 81 | pixelLightCount: 1 82 | shadows: 1 83 | shadowResolution: 0 84 | shadowProjection: 1 85 | shadowCascades: 1 86 | shadowDistance: 20 87 | shadowNearPlaneOffset: 3 88 | shadowCascade2Split: 0.33333334 89 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 90 | shadowmaskMode: 0 91 | blendWeights: 2 92 | textureQuality: 0 93 | anisotropicTextures: 1 94 | antiAliasing: 0 95 | softParticles: 0 96 | softVegetation: 0 97 | realtimeReflectionProbes: 0 98 | billboardsFaceCameraPosition: 0 99 | vSyncCount: 1 100 | lodBias: 0.7 101 | maximumLODLevel: 0 102 | streamingMipmapsActive: 0 103 | streamingMipmapsAddAllCameras: 1 104 | streamingMipmapsMemoryBudget: 512 105 | streamingMipmapsRenderersPerFrame: 512 106 | streamingMipmapsMaxLevelReduction: 2 107 | streamingMipmapsMaxFileIORequests: 1024 108 | particleRaycastBudget: 64 109 | asyncUploadTimeSlice: 2 110 | asyncUploadBufferSize: 16 111 | asyncUploadPersistentBuffer: 1 112 | resolutionScalingFixedDPIFactor: 1 113 | excludedTargetPlatforms: [] 114 | - serializedVersion: 2 115 | name: High 116 | pixelLightCount: 2 117 | shadows: 2 118 | shadowResolution: 1 119 | shadowProjection: 1 120 | shadowCascades: 2 121 | shadowDistance: 40 122 | shadowNearPlaneOffset: 3 123 | shadowCascade2Split: 0.33333334 124 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 125 | shadowmaskMode: 1 126 | blendWeights: 2 127 | textureQuality: 0 128 | anisotropicTextures: 1 129 | antiAliasing: 0 130 | softParticles: 0 131 | softVegetation: 1 132 | realtimeReflectionProbes: 1 133 | billboardsFaceCameraPosition: 1 134 | vSyncCount: 1 135 | lodBias: 1 136 | maximumLODLevel: 0 137 | streamingMipmapsActive: 0 138 | streamingMipmapsAddAllCameras: 1 139 | streamingMipmapsMemoryBudget: 512 140 | streamingMipmapsRenderersPerFrame: 512 141 | streamingMipmapsMaxLevelReduction: 2 142 | streamingMipmapsMaxFileIORequests: 1024 143 | particleRaycastBudget: 256 144 | asyncUploadTimeSlice: 2 145 | asyncUploadBufferSize: 16 146 | asyncUploadPersistentBuffer: 1 147 | resolutionScalingFixedDPIFactor: 1 148 | excludedTargetPlatforms: [] 149 | - serializedVersion: 2 150 | name: Very High 151 | pixelLightCount: 3 152 | shadows: 2 153 | shadowResolution: 2 154 | shadowProjection: 1 155 | shadowCascades: 2 156 | shadowDistance: 70 157 | shadowNearPlaneOffset: 3 158 | shadowCascade2Split: 0.33333334 159 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 160 | shadowmaskMode: 1 161 | blendWeights: 4 162 | textureQuality: 0 163 | anisotropicTextures: 2 164 | antiAliasing: 2 165 | softParticles: 1 166 | softVegetation: 1 167 | realtimeReflectionProbes: 1 168 | billboardsFaceCameraPosition: 1 169 | vSyncCount: 1 170 | lodBias: 1.5 171 | maximumLODLevel: 0 172 | streamingMipmapsActive: 0 173 | streamingMipmapsAddAllCameras: 1 174 | streamingMipmapsMemoryBudget: 512 175 | streamingMipmapsRenderersPerFrame: 512 176 | streamingMipmapsMaxLevelReduction: 2 177 | streamingMipmapsMaxFileIORequests: 1024 178 | particleRaycastBudget: 1024 179 | asyncUploadTimeSlice: 2 180 | asyncUploadBufferSize: 16 181 | asyncUploadPersistentBuffer: 1 182 | resolutionScalingFixedDPIFactor: 1 183 | excludedTargetPlatforms: [] 184 | - serializedVersion: 2 185 | name: Ultra 186 | pixelLightCount: 4 187 | shadows: 2 188 | shadowResolution: 2 189 | shadowProjection: 1 190 | shadowCascades: 4 191 | shadowDistance: 150 192 | shadowNearPlaneOffset: 3 193 | shadowCascade2Split: 0.33333334 194 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 195 | shadowmaskMode: 1 196 | blendWeights: 4 197 | textureQuality: 0 198 | anisotropicTextures: 2 199 | antiAliasing: 2 200 | softParticles: 1 201 | softVegetation: 1 202 | realtimeReflectionProbes: 1 203 | billboardsFaceCameraPosition: 1 204 | vSyncCount: 1 205 | lodBias: 2 206 | maximumLODLevel: 0 207 | streamingMipmapsActive: 0 208 | streamingMipmapsAddAllCameras: 1 209 | streamingMipmapsMemoryBudget: 512 210 | streamingMipmapsRenderersPerFrame: 512 211 | streamingMipmapsMaxLevelReduction: 2 212 | streamingMipmapsMaxFileIORequests: 1024 213 | particleRaycastBudget: 4096 214 | asyncUploadTimeSlice: 2 215 | asyncUploadBufferSize: 16 216 | asyncUploadPersistentBuffer: 1 217 | resolutionScalingFixedDPIFactor: 1 218 | excludedTargetPlatforms: [] 219 | m_PerPlatformDefaultQuality: 220 | Android: 2 221 | Lumin: 5 222 | Nintendo 3DS: 5 223 | Nintendo Switch: 5 224 | PS4: 5 225 | PSP2: 2 226 | Stadia: 5 227 | Standalone: 5 228 | WebGL: 3 229 | Windows Store Apps: 5 230 | XboxOne: 5 231 | iPhone: 2 232 | tvOS: 2 233 | -------------------------------------------------------------------------------- /ProjectSettings/SceneTemplateSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "templatePinStates": [], 3 | "dependencyTypeInfos": [ 4 | { 5 | "userAdded": false, 6 | "type": "UnityEngine.AnimationClip", 7 | "defaultInstantiationMode": 0 8 | }, 9 | { 10 | "userAdded": false, 11 | "type": "UnityEditor.Animations.AnimatorController", 12 | "defaultInstantiationMode": 0 13 | }, 14 | { 15 | "userAdded": false, 16 | "type": "UnityEngine.AnimatorOverrideController", 17 | "defaultInstantiationMode": 0 18 | }, 19 | { 20 | "userAdded": false, 21 | "type": "UnityEditor.Audio.AudioMixerController", 22 | "defaultInstantiationMode": 0 23 | }, 24 | { 25 | "userAdded": false, 26 | "type": "UnityEngine.ComputeShader", 27 | "defaultInstantiationMode": 1 28 | }, 29 | { 30 | "userAdded": false, 31 | "type": "UnityEngine.Cubemap", 32 | "defaultInstantiationMode": 0 33 | }, 34 | { 35 | "userAdded": false, 36 | "type": "UnityEngine.GameObject", 37 | "defaultInstantiationMode": 0 38 | }, 39 | { 40 | "userAdded": false, 41 | "type": "UnityEditor.LightingDataAsset", 42 | "defaultInstantiationMode": 0 43 | }, 44 | { 45 | "userAdded": false, 46 | "type": "UnityEngine.LightingSettings", 47 | "defaultInstantiationMode": 0 48 | }, 49 | { 50 | "userAdded": false, 51 | "type": "UnityEngine.Material", 52 | "defaultInstantiationMode": 0 53 | }, 54 | { 55 | "userAdded": false, 56 | "type": "UnityEditor.MonoScript", 57 | "defaultInstantiationMode": 1 58 | }, 59 | { 60 | "userAdded": false, 61 | "type": "UnityEngine.PhysicMaterial", 62 | "defaultInstantiationMode": 0 63 | }, 64 | { 65 | "userAdded": false, 66 | "type": "UnityEngine.PhysicsMaterial2D", 67 | "defaultInstantiationMode": 0 68 | }, 69 | { 70 | "userAdded": false, 71 | "type": "UnityEngine.Rendering.PostProcessing.PostProcessProfile", 72 | "defaultInstantiationMode": 0 73 | }, 74 | { 75 | "userAdded": false, 76 | "type": "UnityEngine.Rendering.PostProcessing.PostProcessResources", 77 | "defaultInstantiationMode": 0 78 | }, 79 | { 80 | "userAdded": false, 81 | "type": "UnityEngine.Rendering.VolumeProfile", 82 | "defaultInstantiationMode": 0 83 | }, 84 | { 85 | "userAdded": false, 86 | "type": "UnityEditor.SceneAsset", 87 | "defaultInstantiationMode": 1 88 | }, 89 | { 90 | "userAdded": false, 91 | "type": "UnityEngine.Shader", 92 | "defaultInstantiationMode": 1 93 | }, 94 | { 95 | "userAdded": false, 96 | "type": "UnityEngine.ShaderVariantCollection", 97 | "defaultInstantiationMode": 1 98 | }, 99 | { 100 | "userAdded": false, 101 | "type": "UnityEngine.Texture", 102 | "defaultInstantiationMode": 0 103 | }, 104 | { 105 | "userAdded": false, 106 | "type": "UnityEngine.Texture2D", 107 | "defaultInstantiationMode": 0 108 | }, 109 | { 110 | "userAdded": false, 111 | "type": "UnityEngine.Timeline.TimelineAsset", 112 | "defaultInstantiationMode": 0 113 | } 114 | ], 115 | "defaultDependencyTypeInfo": { 116 | "userAdded": false, 117 | "type": "", 118 | "defaultInstantiationMode": 1 119 | }, 120 | "newSceneOverride": 0 121 | } -------------------------------------------------------------------------------- /ProjectSettings/TagManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!78 &1 4 | TagManager: 5 | serializedVersion: 2 6 | tags: [] 7 | layers: 8 | - Default 9 | - TransparentFX 10 | - Ignore Raycast 11 | - 12 | - Water 13 | - UI 14 | - 15 | - 16 | - 17 | - 18 | - 19 | - 20 | - 21 | - 22 | - 23 | - 24 | - 25 | - 26 | - 27 | - 28 | - 29 | - 30 | - 31 | - 32 | - 33 | - 34 | - 35 | - 36 | - 37 | - 38 | - 39 | - 40 | m_SortingLayers: 41 | - name: Default 42 | uniqueID: 0 43 | locked: 0 44 | -------------------------------------------------------------------------------- /ProjectSettings/TimeManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!5 &1 4 | TimeManager: 5 | m_ObjectHideFlags: 0 6 | Fixed Timestep: 0.02 7 | Maximum Allowed Timestep: 0.33333334 8 | m_TimeScale: 1 9 | Maximum Particle Timestep: 0.03 10 | -------------------------------------------------------------------------------- /ProjectSettings/UnityConnectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!310 &1 4 | UnityConnectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 1 7 | m_Enabled: 0 8 | m_TestMode: 0 9 | m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events 10 | m_EventUrl: https://cdp.cloud.unity3d.com/v1/events 11 | m_ConfigUrl: https://config.uca.cloud.unity3d.com 12 | m_DashboardUrl: https://dashboard.unity3d.com 13 | m_TestInitMode: 0 14 | CrashReportingSettings: 15 | m_EventUrl: https://perf-events.cloud.unity3d.com 16 | m_Enabled: 0 17 | m_LogBufferSize: 10 18 | m_CaptureEditorExceptions: 1 19 | UnityPurchasingSettings: 20 | m_Enabled: 0 21 | m_TestMode: 0 22 | UnityAnalyticsSettings: 23 | m_Enabled: 0 24 | m_TestMode: 0 25 | m_InitializeOnStartup: 1 26 | m_PackageRequiringCoreStatsPresent: 0 27 | UnityAdsSettings: 28 | m_Enabled: 0 29 | m_InitializeOnStartup: 1 30 | m_TestMode: 0 31 | m_IosGameId: 32 | m_AndroidGameId: 33 | m_GameIds: {} 34 | m_GameId: 35 | PerformanceReportingSettings: 36 | m_Enabled: 0 37 | -------------------------------------------------------------------------------- /ProjectSettings/VFXManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!937362698 &1 4 | VFXManager: 5 | m_ObjectHideFlags: 0 6 | m_IndirectShader: {fileID: 0} 7 | m_CopyBufferShader: {fileID: 0} 8 | m_SortShader: {fileID: 0} 9 | m_StripUpdateShader: {fileID: 0} 10 | m_RenderPipeSettingsPath: 11 | m_FixedTimeStep: 0.016666668 12 | m_MaxDeltaTime: 0.05 13 | -------------------------------------------------------------------------------- /ProjectSettings/VersionControlSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!890905787 &1 4 | VersionControlSettings: 5 | m_ObjectHideFlags: 0 6 | m_Mode: Visible Meta Files 7 | m_CollabEditorSettings: 8 | inProgressEnabled: 1 9 | -------------------------------------------------------------------------------- /ProjectSettings/XRSettings.asset: -------------------------------------------------------------------------------- 1 | { 2 | "m_SettingKeys": [ 3 | "VR Device Disabled", 4 | "VR Device User Alert" 5 | ], 6 | "m_SettingValues": [ 7 | "False", 8 | "False" 9 | ] 10 | } -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | # Unity Realtime Networking Client 2 | This is a unity project that will be used as client. 3 | -------------------------------------------------------------------------------- /UserSettings/EditorUserSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!162 &1 4 | EditorUserSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 4 7 | m_ConfigSettings: 8 | RecentlyUsedSceneGuid-0: 9 | value: 53040502060d5b59555e087b47725d4412151e737e2a70342e7c486ab7b9606f 10 | flags: 0 11 | RecentlyUsedSceneGuid-1: 12 | value: 060052025d075e0d0b0a557a44745944171541787f71776675284967e0b0673e 13 | flags: 0 14 | RecentlyUsedSceneGuid-2: 15 | value: 5a5757560101590a5d0c0e24427b5d44434e4c7a7b7a23677f2b4565b7b5353a 16 | flags: 0 17 | RecentlyUsedSceneGuid-3: 18 | value: 5201560555040d0b0e08597a11775e441015482b7d7f70332b7a1866e1b96460 19 | flags: 0 20 | RecentlyUsedSceneGuid-4: 21 | value: 015757025051500c5958097a477a06441316497e282b7f627f2f1e61bbe3673d 22 | flags: 0 23 | vcSharedLogLevel: 24 | value: 0d5e400f0650 25 | flags: 0 26 | m_VCAutomaticAdd: 1 27 | m_VCDebugCom: 0 28 | m_VCDebugCmd: 0 29 | m_VCDebugOut: 0 30 | m_SemanticMergeMode: 2 31 | m_DesiredImportWorkerCount: 1 32 | m_StandbyImportWorkerCount: 1 33 | m_IdleImportWorkerShutdownDelay: 60000 34 | m_VCShowFailedCheckout: 1 35 | m_VCOverwriteFailedCheckoutAssets: 1 36 | m_VCProjectOverlayIcons: 1 37 | m_VCHierarchyOverlayIcons: 1 38 | m_VCOtherOverlayIcons: 1 39 | m_VCAllowAsyncUpdate: 1 40 | m_ArtifactGarbageCollection: 1 41 | -------------------------------------------------------------------------------- /UserSettings/Search.settings: -------------------------------------------------------------------------------- 1 | {} --------------------------------------------------------------------------------