├── SocketClient ├── ProjectSettings │ ├── ProjectVersion.txt │ ├── ClusterInputManager.asset │ ├── PresetManager.asset │ ├── XRSettings.asset │ ├── TimeManager.asset │ ├── EditorBuildSettings.asset │ ├── VFXManager.asset │ ├── AudioManager.asset │ ├── TagManager.asset │ ├── UnityConnectSettings.asset │ ├── EditorSettings.asset │ ├── DynamicsManager.asset │ ├── NavMeshAreas.asset │ ├── Physics2DSettings.asset │ ├── GraphicsSettings.asset │ ├── InputManager.asset │ ├── QualitySettings.asset │ └── ProjectSettings.asset └── Assets │ ├── Scenes │ ├── SampleScene.unity.meta │ └── SampleScene.unity │ ├── Scenes.meta │ ├── Scripts.meta │ └── Scripts │ ├── Socket.meta │ ├── Socket │ ├── SocketEvent.cs │ ├── DataBuffer.cs.meta │ ├── SocketEvent.cs.meta │ ├── SocketClient.cs.meta │ ├── SocketDataPack.cs.meta │ ├── DataBuffer.cs │ ├── SocketDataPack.cs │ └── SocketClient.cs │ ├── Main.cs.meta │ └── Main.cs ├── SocketServer ├── ProjectSettings │ ├── ProjectVersion.txt │ ├── ClusterInputManager.asset │ ├── PresetManager.asset │ ├── XRSettings.asset │ ├── TimeManager.asset │ ├── EditorBuildSettings.asset │ ├── VFXManager.asset │ ├── AudioManager.asset │ ├── TagManager.asset │ ├── UnityConnectSettings.asset │ ├── EditorSettings.asset │ ├── DynamicsManager.asset │ ├── NavMeshAreas.asset │ ├── Physics2DSettings.asset │ ├── GraphicsSettings.asset │ ├── InputManager.asset │ ├── QualitySettings.asset │ └── ProjectSettings.asset └── Assets │ ├── Scenes │ ├── SampleScene.unity.meta │ └── SampleScene.unity │ ├── Scenes.meta │ ├── Scripts.meta │ └── Scripts │ ├── Socket.meta │ ├── Socket │ ├── SocketEvent.cs │ ├── DataBuffer.cs.meta │ ├── SocketEvent.cs.meta │ ├── SocketDataPack.cs.meta │ ├── SocketServer.cs.meta │ ├── DataBuffer.cs │ ├── SocketDataPack.cs │ └── SocketServer.cs │ ├── Main.cs.meta │ └── Main.cs ├── .gitignore └── README.md /SocketClient/ProjectSettings/ProjectVersion.txt: -------------------------------------------------------------------------------- 1 | m_EditorVersion: 2019.4.8f1 2 | m_EditorVersionWithRevision: 2019.4.8f1 (702a49318172) 3 | -------------------------------------------------------------------------------- /SocketServer/ProjectSettings/ProjectVersion.txt: -------------------------------------------------------------------------------- 1 | m_EditorVersion: 2019.4.8f1 2 | m_EditorVersionWithRevision: 2019.4.8f1 (702a49318172) 3 | -------------------------------------------------------------------------------- /SocketClient/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 | -------------------------------------------------------------------------------- /SocketServer/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 | -------------------------------------------------------------------------------- /SocketClient/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 | -------------------------------------------------------------------------------- /SocketServer/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 | -------------------------------------------------------------------------------- /SocketClient/Assets/Scenes/SampleScene.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9fc0d4010bbf28b4594072e72b8655ab 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /SocketServer/Assets/Scenes/SampleScene.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9fc0d4010bbf28b4594072e72b8655ab 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /SocketClient/Assets/Scenes.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 946982eb535a40943bb7781aaa600bf8 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /SocketClient/Assets/Scripts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2e04a0e82198abe4fb1796dc44bc9e9d 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /SocketServer/Assets/Scenes.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e7f13a5f5a0851946a8a0bf2a30e992d 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /SocketServer/Assets/Scripts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4dc01b245782bbd4a83290138f7e17df 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /SocketClient/Assets/Scripts/Socket.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e3cdc884284e12f48a350017446975ca 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /SocketServer/Assets/Scripts/Socket.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3d6c252842de8784b9d9b355be66093d 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /SocketClient/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 | } -------------------------------------------------------------------------------- /SocketServer/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 | } -------------------------------------------------------------------------------- /SocketClient/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 | -------------------------------------------------------------------------------- /SocketServer/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 | -------------------------------------------------------------------------------- /SocketClient/Assets/Scripts/Socket/SocketEvent.cs: -------------------------------------------------------------------------------- 1 | /// 2 | /// 网络事件协议ID枚举 3 | /// 4 | public enum SocketEvent 5 | { 6 | sc_head = 0x0001, //心跳包 7 | sc_disconn = 0x0002, //客户端主动断开 8 | sc_kickout = 0x0003, //服务端踢出 9 | 10 | sc_test = 0x1001, //测试用 11 | } 12 | -------------------------------------------------------------------------------- /SocketServer/Assets/Scripts/Socket/SocketEvent.cs: -------------------------------------------------------------------------------- 1 | /// 2 | /// 网络事件协议ID枚举 3 | /// 4 | public enum SocketEvent 5 | { 6 | sc_head = 0x0001, //心跳包 7 | sc_disconn = 0x0002, //客户端主动断开 8 | sc_kickout = 0x0003, //服务端踢出 9 | 10 | sc_test = 0x1001, //测试用 11 | } 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.sln 2 | *.csproj 3 | SocketClient/.vscode/ 4 | SocketClient/Packages/ 5 | SocketClient/Logs/ 6 | SocketClient/Library/ 7 | SocketServer/Packages/ 8 | SocketServer/obj/ 9 | SocketServer/Logs/ 10 | SocketServer/Library/ 11 | SocketServer/.vscode/ 12 | SocketClient/obj/ 13 | SocketClient/Temp/ 14 | SocketServer/Temp/ 15 | -------------------------------------------------------------------------------- /SocketClient/Assets/Scripts/Main.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 052b8595da3036e4a94eabc9a5a2b95b 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /SocketServer/Assets/Scripts/Main.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6b72333f2bc06a7428fb3c0eadeed0d1 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /SocketClient/Assets/Scripts/Socket/DataBuffer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e879d0a89aac39f4a8320fd3857d0012 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /SocketClient/Assets/Scripts/Socket/SocketEvent.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b1c8d60cbbc2c7547827955a371fda00 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /SocketServer/Assets/Scripts/Socket/DataBuffer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 38b4e06522c0d5e4288cbd3e9ecc60bd 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /SocketServer/Assets/Scripts/Socket/SocketEvent.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3e31095fdf89789458207d2188e0f4f2 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /SocketClient/Assets/Scripts/Socket/SocketClient.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8e91098b3165d6b478e1a1ab72aeb94c 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /SocketClient/Assets/Scripts/Socket/SocketDataPack.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cad0be70b592b594282e6606af8b3155 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /SocketServer/Assets/Scripts/Socket/SocketDataPack.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cad0be70b592b594282e6606af8b3155 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /SocketServer/Assets/Scripts/Socket/SocketServer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a2c6448e77af258458f5959d7e15c022 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /SocketClient/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/Scenes/SampleScene.unity 10 | guid: 9fc0d4010bbf28b4594072e72b8655ab 11 | m_configObjects: {} 12 | -------------------------------------------------------------------------------- /SocketServer/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/Scenes/SampleScene.unity 10 | guid: 9fc0d4010bbf28b4594072e72b8655ab 11 | m_configObjects: {} 12 | -------------------------------------------------------------------------------- /SocketClient/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 | -------------------------------------------------------------------------------- /SocketServer/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 | -------------------------------------------------------------------------------- /SocketClient/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 | -------------------------------------------------------------------------------- /SocketServer/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 | -------------------------------------------------------------------------------- /SocketClient/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 | -------------------------------------------------------------------------------- /SocketServer/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 | -------------------------------------------------------------------------------- /SocketClient/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_TestInitMode: 0 13 | CrashReportingSettings: 14 | m_EventUrl: https://perf-events.cloud.unity.cn 15 | m_Enabled: 0 16 | m_LogBufferSize: 10 17 | m_CaptureEditorExceptions: 1 18 | UnityPurchasingSettings: 19 | m_Enabled: 0 20 | m_TestMode: 0 21 | UnityAnalyticsSettings: 22 | m_Enabled: 0 23 | m_TestMode: 0 24 | m_InitializeOnStartup: 1 25 | UnityAdsSettings: 26 | m_Enabled: 0 27 | m_InitializeOnStartup: 1 28 | m_TestMode: 0 29 | m_IosGameId: 30 | m_AndroidGameId: 31 | m_GameIds: {} 32 | m_GameId: 33 | PerformanceReportingSettings: 34 | m_Enabled: 0 35 | -------------------------------------------------------------------------------- /SocketServer/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_TestInitMode: 0 13 | CrashReportingSettings: 14 | m_EventUrl: https://perf-events.cloud.unity.cn 15 | m_Enabled: 0 16 | m_LogBufferSize: 10 17 | m_CaptureEditorExceptions: 1 18 | UnityPurchasingSettings: 19 | m_Enabled: 0 20 | m_TestMode: 0 21 | UnityAnalyticsSettings: 22 | m_Enabled: 0 23 | m_TestMode: 0 24 | m_InitializeOnStartup: 1 25 | UnityAdsSettings: 26 | m_Enabled: 0 27 | m_InitializeOnStartup: 1 28 | m_TestMode: 0 29 | m_IosGameId: 30 | m_AndroidGameId: 31 | m_GameIds: {} 32 | m_GameId: 33 | PerformanceReportingSettings: 34 | m_Enabled: 0 35 | -------------------------------------------------------------------------------- /SocketClient/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: 9 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_AssetPipelineMode: 1 31 | m_CacheServerMode: 0 32 | m_CacheServerEndpoint: 33 | m_CacheServerNamespacePrefix: default 34 | m_CacheServerEnableDownload: 1 35 | m_CacheServerEnableUpload: 1 36 | -------------------------------------------------------------------------------- /SocketServer/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: 9 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_AssetPipelineMode: 1 31 | m_CacheServerMode: 0 32 | m_CacheServerEndpoint: 33 | m_CacheServerNamespacePrefix: default 34 | m_CacheServerEnableDownload: 1 35 | m_CacheServerEnableUpload: 1 36 | -------------------------------------------------------------------------------- /SocketClient/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 | -------------------------------------------------------------------------------- /SocketServer/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 | -------------------------------------------------------------------------------- /SocketServer/Assets/Scripts/Main.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | 5 | public class Main : MonoBehaviour 6 | { 7 | SocketServer _server; 8 | private void Awake() 9 | { 10 | _server = new SocketServer("127.0.0.1", 6854); 11 | _server.OnConnect += (client) => 12 | { 13 | UnityEngine.Debug.LogFormat("连接成功 >> IP:{0}", client.LocalEndPoint.ToString()); 14 | }; 15 | _server.OnDisconnect += (client) => 16 | { 17 | UnityEngine.Debug.LogFormat("连接断开 >> IP:{0}", client.LocalEndPoint.ToString()); 18 | }; 19 | _server.OnReceive += (client, data) => 20 | { 21 | UnityEngine.Debug.LogFormat("[{0}]接收到数据>>>{1} {2}", client.LocalEndPoint.ToString(), (SocketEvent)data.Type, data.Buff.Length); 22 | 23 | switch ((SocketEvent)data.Type) 24 | { 25 | case SocketEvent.sc_test: 26 | UnityEngine.Debug.LogFormat("接收到测试数据 >>> {0}", System.Text.Encoding.UTF8.GetString(data.Data)); 27 | break; 28 | } 29 | }; 30 | 31 | } 32 | private void Update() 33 | { 34 | if (Input.GetKeyDown(KeyCode.A)) 35 | { 36 | // 踢出连接 37 | foreach (var item in _server.ClientInfoDic.Keys) 38 | { 39 | _server.KickOutAll(); 40 | } 41 | 42 | } 43 | } 44 | private void OnDestroy() 45 | { 46 | // 注意由于Unity编译器环境下,游戏开启/关闭只影响主线程的开关,游戏关闭回调时需要通过Close函数来关闭服务端/客户端的线程。 47 | if (_server != null) 48 | { 49 | _server.Close(); 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /SocketClient/Assets/Scripts/Socket/DataBuffer.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | /// 3 | /// Socket传输过程的缓冲区,尝试拆包获得数据 4 | /// 5 | public class DataBuffer 6 | { 7 | // 缓存区长度 8 | private const int MIN_BUFF_LEN = 1024; 9 | 10 | private byte[] _buff; 11 | private int _buffLength = 0; 12 | 13 | public DataBuffer(int minBuffLen = MIN_BUFF_LEN) 14 | { 15 | if (minBuffLen <= 0) 16 | { 17 | minBuffLen = MIN_BUFF_LEN; 18 | } 19 | _buff = new byte[minBuffLen]; 20 | } 21 | 22 | /// 23 | /// 添加缓存数据 24 | /// 25 | public void AddBuffer(byte[] data, int len) 26 | { 27 | byte[] buff = new byte[len]; 28 | Array.Copy(data, buff, len); 29 | if (len > _buff.Length - _buffLength) //超过当前缓存 30 | { 31 | byte[] temp = new byte[_buffLength + len]; 32 | Array.Copy(_buff, 0, temp, 0, _buffLength); 33 | Array.Copy(buff, 0, temp, _buffLength, len); 34 | _buff = temp; 35 | } 36 | else 37 | { 38 | Array.Copy(data, 0, _buff, _buffLength, len); 39 | } 40 | _buffLength += len;//修改当前数据标记 41 | } 42 | 43 | public bool TryUnpack(out SocketDataPack dataPack) 44 | { 45 | dataPack = SocketDataPack.Unpack(_buff); 46 | if (dataPack == null) 47 | { 48 | return false; 49 | } 50 | // 清理旧缓存 51 | _buffLength -= dataPack.BuffLength; 52 | byte[] temp = new byte[_buffLength < MIN_BUFF_LEN ? MIN_BUFF_LEN : _buffLength]; 53 | Array.Copy(_buff, dataPack.BuffLength, temp, 0, _buffLength); 54 | _buff = temp; 55 | return true; 56 | } 57 | } -------------------------------------------------------------------------------- /SocketServer/Assets/Scripts/Socket/DataBuffer.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | /// 3 | /// Socket传输过程的缓冲区,尝试拆包获得数据 4 | /// 5 | public class DataBuffer 6 | { 7 | // 缓存区长度 8 | private const int MIN_BUFF_LEN = 1024; 9 | 10 | private byte[] _buff; 11 | private int _buffLength = 0; 12 | 13 | public DataBuffer(int minBuffLen = MIN_BUFF_LEN) 14 | { 15 | if (minBuffLen <= 0) 16 | { 17 | minBuffLen = MIN_BUFF_LEN; 18 | } 19 | _buff = new byte[minBuffLen]; 20 | } 21 | 22 | /// 23 | /// 添加缓存数据 24 | /// 25 | public void AddBuffer(byte[] data, int len) 26 | { 27 | byte[] buff = new byte[len]; 28 | Array.Copy(data, buff, len); 29 | if (len > _buff.Length - _buffLength) //超过当前缓存 30 | { 31 | byte[] temp = new byte[_buffLength + len]; 32 | Array.Copy(_buff, 0, temp, 0, _buffLength); 33 | Array.Copy(buff, 0, temp, _buffLength, len); 34 | _buff = temp; 35 | } 36 | else 37 | { 38 | Array.Copy(data, 0, _buff, _buffLength, len); 39 | } 40 | _buffLength += len;//修改当前数据标记 41 | } 42 | 43 | public bool TryUnpack(out SocketDataPack dataPack) 44 | { 45 | dataPack = SocketDataPack.Unpack(_buff); 46 | if (dataPack == null) 47 | { 48 | return false; 49 | } 50 | // 清理旧缓存 51 | _buffLength -= dataPack.BuffLength; 52 | byte[] temp = new byte[_buffLength < MIN_BUFF_LEN ? MIN_BUFF_LEN : _buffLength]; 53 | Array.Copy(_buff, dataPack.BuffLength, temp, 0, _buffLength); 54 | _buff = temp; 55 | return true; 56 | } 57 | } -------------------------------------------------------------------------------- /SocketClient/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 | -------------------------------------------------------------------------------- /SocketServer/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 | -------------------------------------------------------------------------------- /SocketClient/Assets/Scripts/Main.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | 5 | public class Main : MonoBehaviour 6 | { 7 | SocketClient _client; 8 | private void Awake() 9 | { 10 | 11 | _client = new SocketClient("127.0.0.1", 6854); 12 | _client.OnDisconnect += () => 13 | { 14 | UnityEngine.Debug.Log("断开连接"); 15 | }; 16 | 17 | _client.OnReceive += (dataPack) => 18 | { 19 | UnityEngine.Debug.LogFormat("接收数据>>>{0}", (SocketEvent)dataPack.Type); 20 | }; 21 | _client.OnSend += (dataPack) => 22 | { 23 | UnityEngine.Debug.LogFormat("发送数据>>>{0}", (SocketEvent)dataPack.Type); 24 | }; 25 | _client.OnError += (ex) => 26 | { 27 | UnityEngine.Debug.LogFormat("出现异常>>>{0}", ex); 28 | }; 29 | 30 | _client.OnReConnectSuccess += (num) => 31 | { 32 | UnityEngine.Debug.LogFormat("第{0}次重连成功", num); 33 | }; 34 | _client.OnReConnectError += (num) => 35 | { 36 | UnityEngine.Debug.LogFormat("第{0}次重连失败", num); 37 | }; 38 | _client.OnReconnecting += (num) => 39 | { 40 | UnityEngine.Debug.LogFormat("正在进行第{0}次重连", num); 41 | }; 42 | 43 | 44 | _client.Connect(() => 45 | { 46 | UnityEngine.Debug.Log("连接成功"); 47 | 48 | // _client.DisConnect(); 49 | }, () => 50 | { 51 | UnityEngine.Debug.Log("连接失败"); 52 | }); 53 | 54 | } 55 | 56 | private void Update() 57 | { 58 | if (Input.GetKeyDown(KeyCode.A)) 59 | { 60 | var bytes = System.Text.Encoding.UTF8.GetBytes("我是测试数据"); 61 | _client.Send((System.UInt16)SocketEvent.sc_test, bytes); 62 | } 63 | if (Input.GetKeyDown(KeyCode.D)) 64 | { 65 | _client.DisConnect(); 66 | } 67 | } 68 | 69 | private void OnDestroy() 70 | { 71 | // 注意由于Unity编译器环境下,游戏开启/关闭只影响主线程的开关,游戏关闭回调时需要通过Close函数来关闭服务端/客户端的线程。 72 | if (_client != null) 73 | { 74 | _client.Close(); 75 | } 76 | 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /SocketClient/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 | -------------------------------------------------------------------------------- /SocketServer/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 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # UnitySocket 2 | 该项目是基于Unity平台 纯C#编写的Socket网络模块,包括客户端与服务端的实现 3 | 4 | (针对Unity对线程的不友好,做了部分处理,本质是还是纯粹的C#代码编写,可以随意移植) 5 | 6 | **基于NodeJs平台下的Socket网络通信模块** >>> [前往项目](https://github.com/GrayGuardian/NodeJsSocket) 7 | 8 | ## 环境依赖 9 | 10 | - 项目运行平台: Unity2019.4.8f1 11 | 12 | 该项目仅包含网络底层的几个C#脚本与一个测试脚本,可以随意选择Unity版本测试。 13 | 14 | ## 特点 15 | 1. 回调事件完善,包含服务器主动踢出、客户端主动断开、心跳包等底层功能逻辑。 16 | 2. 对象形式,非单例模式,一个项目可new多个连接 17 | 3. 代码量少,纯C#编写,未使用插件、DLL及工具类,便于二次封装,利于移植 18 | ## 报文组成 19 | - 通用 20 | 21 | 报文总长度(4byte) + 报文类型(2byte) + 数据(N byte) 22 | 23 | - 心跳包 24 | 25 | 报文总长度(4byte) + 报文类型-心跳包(2byte) 26 | 27 | - 客户端断开 28 | 29 | 报文总长度(4byte) + 报文类型-客户端断开(2byte) 30 | 31 | - 服务端踢出 32 | 33 | 报文总长度(4byte) + 报文类型-服务端踢出(2byte) 34 | 35 | ## 工作流 36 | - 建立连接 37 | 1. 服务端通过 new SocketServer(string ip,int port) 建立连接 38 | 2. 客户端通过 new SocketClient(string ip,int port) 建立实例,通过Connect函数尝试连接。 39 | 3. 客户端连接成功后,开始定时发送心跳包报文;服务端接收后记录时间,定时检测判断是否超时。 40 | 4. 如存在以下情况,则断开连接: 41 | - 服务端主动踢出连接,即时响应,回调DisConnect 42 | - 客户端主动断开连接,即时响应,回调DisConnect 43 | - 客户端关闭连接,即时响应,回调DisConnect 44 | - 服务端检测到客户端太久没有发送心跳包,此处需要响应时间,根据心跳包超时间隔、心跳包发送间隔及服务端心跳包超时检测间隔来决定,发现超时则回调DisConnect 45 | - 通信逻辑过程中报错,即时响应,自动重连,默认重连上限为三次,达到重连上限并未成功,则回调DisConnect 46 | - 接收数据 47 | 1. 接收线程收到数据,存放入DataBuff数据缓存区。 48 | 2. DataBuff中不断通过SocketDataPack尝试解包,解包成功后将报文发送到接收线程。 49 | 3. 接收线程收到报文后,触发OnReceive回调 50 | 4. 业务层通过OnReceive回调接收到报文后,反序列化报文体得到数据 51 | - 发送数据 52 | 1. 业务层序列化数据得到报文体字节集,通过Send函数发送数据。 53 | 2. Send函数中,通过SocketDataPack装包后,以字节集的形式发送出去。 54 | 55 | ## 代码说明 56 | - DataBuffer:Socket传输数据缓存区,此处主要处理Socket传输时粘包、分包的情况 57 | - SocketEvent:Socket报文类型枚举,此处只枚举了网络底层需要发送的报文类型,业务逻辑层所使用的报文类型,建议封装至报文体序列化类中 58 | - SocketDataPack:Socket报文类,处理具体的拆包、装包逻辑 59 | - SocketServer:Socket服务端 60 | - SocketClient:Socket客户端 61 | 62 | ## 回调事件 63 | - SocketServer 服务端 64 | - public event Action OnConnect; //客户端建立连接回调 65 | - public event Action OnDisconnect; // 客户端断开连接回调 66 | - public event Action OnReceive; // 接收报文回调 67 | - SocketClient 客户端 68 | - public event Action OnConnectSuccess; // 连接成功回调 69 | - public event Action OnConnectError; // 连接失败回调 70 | - public event Action OnDisconnect; // 断开回调 71 | - public event Action OnReceive; // 接收报文回调 72 | - public event Action OnError; // 异常捕获回调 73 | - public event Action OnReConnectSuccess; // 重连成功回调 74 | - public event Action OnReConnectError; // 单次重连失败回调 75 | - public event Action OnReconnecting; // 单次重连中回调 -------------------------------------------------------------------------------- /SocketClient/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 | - {fileID: 16000, guid: 0000000000000000f000000000000000, type: 0} 39 | - {fileID: 16001, guid: 0000000000000000f000000000000000, type: 0} 40 | - {fileID: 16003, guid: 0000000000000000f000000000000000, type: 0} 41 | - {fileID: 17000, guid: 0000000000000000f000000000000000, type: 0} 42 | m_PreloadedShaders: [] 43 | m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, 44 | type: 0} 45 | m_CustomRenderPipeline: {fileID: 0} 46 | m_TransparencySortMode: 0 47 | m_TransparencySortAxis: {x: 0, y: 0, z: 1} 48 | m_DefaultRenderingPath: 1 49 | m_DefaultMobileRenderingPath: 1 50 | m_TierSettings: [] 51 | m_LightmapStripping: 0 52 | m_FogStripping: 0 53 | m_InstancingStripping: 0 54 | m_LightmapKeepPlain: 1 55 | m_LightmapKeepDirCombined: 1 56 | m_LightmapKeepDynamicPlain: 1 57 | m_LightmapKeepDynamicDirCombined: 1 58 | m_LightmapKeepShadowMask: 1 59 | m_LightmapKeepSubtractive: 1 60 | m_FogKeepLinear: 1 61 | m_FogKeepExp: 1 62 | m_FogKeepExp2: 1 63 | m_AlbedoSwatchInfos: [] 64 | m_LightsUseLinearIntensity: 0 65 | m_LightsUseColorTemperature: 0 66 | m_LogWhenShaderIsCompiled: 0 67 | m_AllowEnlightenSupportForUpgradedProject: 0 68 | -------------------------------------------------------------------------------- /SocketServer/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 | - {fileID: 16000, guid: 0000000000000000f000000000000000, type: 0} 39 | - {fileID: 16001, guid: 0000000000000000f000000000000000, type: 0} 40 | - {fileID: 16003, guid: 0000000000000000f000000000000000, type: 0} 41 | - {fileID: 17000, guid: 0000000000000000f000000000000000, type: 0} 42 | m_PreloadedShaders: [] 43 | m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, 44 | type: 0} 45 | m_CustomRenderPipeline: {fileID: 0} 46 | m_TransparencySortMode: 0 47 | m_TransparencySortAxis: {x: 0, y: 0, z: 1} 48 | m_DefaultRenderingPath: 1 49 | m_DefaultMobileRenderingPath: 1 50 | m_TierSettings: [] 51 | m_LightmapStripping: 0 52 | m_FogStripping: 0 53 | m_InstancingStripping: 0 54 | m_LightmapKeepPlain: 1 55 | m_LightmapKeepDirCombined: 1 56 | m_LightmapKeepDynamicPlain: 1 57 | m_LightmapKeepDynamicDirCombined: 1 58 | m_LightmapKeepShadowMask: 1 59 | m_LightmapKeepSubtractive: 1 60 | m_FogKeepLinear: 1 61 | m_FogKeepExp: 1 62 | m_FogKeepExp2: 1 63 | m_AlbedoSwatchInfos: [] 64 | m_LightsUseLinearIntensity: 0 65 | m_LightsUseColorTemperature: 0 66 | m_LogWhenShaderIsCompiled: 0 67 | m_AllowEnlightenSupportForUpgradedProject: 0 68 | -------------------------------------------------------------------------------- /SocketClient/Assets/Scripts/Socket/SocketDataPack.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | /// 4 | /// Socket通信过程中的数据包 处理具体拆包装包逻辑 5 | /// 6 | public class SocketDataPack 7 | { 8 | // 消息:数据总长度(4byte) + 数据类型(2byte) + 数据(N byte) 9 | public static int HEAD_DATA_LEN = 4; 10 | public static int HEAD_TYPE_LEN = 2; 11 | public static int HEAD_LEN 12 | { 13 | get { return HEAD_DATA_LEN + HEAD_TYPE_LEN; } 14 | } 15 | 16 | /// 17 | /// 数据包类型 18 | /// 19 | public UInt16 Type; 20 | /// 21 | /// 数据包数据 22 | /// 23 | public byte[] Data; 24 | public byte[] Buff; 25 | 26 | public int BuffLength 27 | { 28 | get { return Buff.Length; } 29 | } 30 | public int DataLength 31 | { 32 | get { return Data.Length; } 33 | } 34 | 35 | public SocketDataPack() 36 | { 37 | 38 | } 39 | public SocketDataPack(UInt16 type, byte[] data) 40 | { 41 | Type = type; 42 | Data = data; 43 | 44 | Buff = GetBuff(Type, Data); 45 | } 46 | 47 | public static byte[] GetBuff(UInt16 type, byte[] data) 48 | { 49 | byte[] buff = new byte[data.Length + HEAD_LEN]; 50 | byte[] temp; 51 | temp = BitConverter.GetBytes(buff.Length); 52 | Array.Copy(temp, 0, buff, 0, HEAD_DATA_LEN); 53 | temp = BitConverter.GetBytes(type); 54 | Array.Copy(temp, 0, buff, HEAD_DATA_LEN, HEAD_TYPE_LEN); 55 | 56 | Array.Copy(data, 0, buff, HEAD_LEN, data.Length); 57 | 58 | return buff; 59 | } 60 | 61 | public static SocketDataPack Unpack(byte[] buff) 62 | { 63 | try 64 | { 65 | if (buff.Length < HEAD_LEN) 66 | { 67 | // 头部没取完则返回 68 | return null; 69 | } 70 | byte[] temp; 71 | // 取数据长度 72 | temp = new byte[HEAD_DATA_LEN]; 73 | Array.Copy(buff, 0, temp, 0, HEAD_DATA_LEN); 74 | int buffLength = BitConverter.ToInt32(temp, 0); 75 | if (buffLength <= 0) return null; 76 | if (buffLength > buff.Length) 77 | { 78 | // 数据没取完 79 | return null; 80 | } 81 | int dataLength = buffLength - HEAD_LEN; 82 | // 取数据类型 83 | temp = new byte[HEAD_TYPE_LEN]; 84 | Array.Copy(buff, HEAD_DATA_LEN, temp, 0, HEAD_TYPE_LEN); 85 | UInt16 dataType = BitConverter.ToUInt16(temp, 0); 86 | // 取数据 87 | byte[] data = new byte[dataLength]; 88 | Array.Copy(buff, HEAD_LEN, data, 0, dataLength); 89 | 90 | var dataPack = new SocketDataPack(dataType, data); 91 | // UnityEngine.Debug.LogFormat("buffLen:{0} type:{1} dataLength:{2}", buffLength, dataType, data.Length); 92 | 93 | return dataPack; 94 | 95 | } 96 | catch 97 | { 98 | // 存在不完整数据解包 则返回null 99 | return null; 100 | } 101 | 102 | 103 | } 104 | } -------------------------------------------------------------------------------- /SocketServer/Assets/Scripts/Socket/SocketDataPack.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | /// 4 | /// Socket通信过程中的数据包 处理具体拆包装包逻辑 5 | /// 6 | public class SocketDataPack 7 | { 8 | // 消息:数据总长度(4byte) + 数据类型(2byte) + 数据(N byte) 9 | public static int HEAD_DATA_LEN = 4; 10 | public static int HEAD_TYPE_LEN = 2; 11 | public static int HEAD_LEN 12 | { 13 | get { return HEAD_DATA_LEN + HEAD_TYPE_LEN; } 14 | } 15 | 16 | /// 17 | /// 数据包类型 18 | /// 19 | public UInt16 Type; 20 | /// 21 | /// 数据包数据 22 | /// 23 | public byte[] Data; 24 | public byte[] Buff; 25 | 26 | public int BuffLength 27 | { 28 | get { return Buff.Length; } 29 | } 30 | public int DataLength 31 | { 32 | get { return Data.Length; } 33 | } 34 | 35 | public SocketDataPack() 36 | { 37 | 38 | } 39 | public SocketDataPack(UInt16 type, byte[] data) 40 | { 41 | Type = type; 42 | Data = data; 43 | 44 | Buff = GetBuff(Type, Data); 45 | } 46 | 47 | public static byte[] GetBuff(UInt16 type, byte[] data) 48 | { 49 | byte[] buff = new byte[data.Length + HEAD_LEN]; 50 | byte[] temp; 51 | temp = BitConverter.GetBytes(buff.Length); 52 | Array.Copy(temp, 0, buff, 0, HEAD_DATA_LEN); 53 | temp = BitConverter.GetBytes(type); 54 | Array.Copy(temp, 0, buff, HEAD_DATA_LEN, HEAD_TYPE_LEN); 55 | 56 | Array.Copy(data, 0, buff, HEAD_LEN, data.Length); 57 | 58 | return buff; 59 | } 60 | 61 | public static SocketDataPack Unpack(byte[] buff) 62 | { 63 | try 64 | { 65 | if (buff.Length < HEAD_LEN) 66 | { 67 | // 头部没取完则返回 68 | return null; 69 | } 70 | byte[] temp; 71 | // 取数据长度 72 | temp = new byte[HEAD_DATA_LEN]; 73 | Array.Copy(buff, 0, temp, 0, HEAD_DATA_LEN); 74 | int buffLength = BitConverter.ToInt32(temp, 0); 75 | if (buffLength <= 0) return null; 76 | if (buffLength > buff.Length) 77 | { 78 | // 数据没取完 79 | return null; 80 | } 81 | int dataLength = buffLength - HEAD_LEN; 82 | // 取数据类型 83 | temp = new byte[HEAD_TYPE_LEN]; 84 | Array.Copy(buff, HEAD_DATA_LEN, temp, 0, HEAD_TYPE_LEN); 85 | UInt16 dataType = BitConverter.ToUInt16(temp, 0); 86 | // 取数据 87 | byte[] data = new byte[dataLength]; 88 | Array.Copy(buff, HEAD_LEN, data, 0, dataLength); 89 | 90 | var dataPack = new SocketDataPack(dataType, data); 91 | // UnityEngine.Debug.LogFormat("buffLen:{0} type:{1} dataLength:{2}", buffLength, dataType, data.Length); 92 | 93 | return dataPack; 94 | 95 | } 96 | catch 97 | { 98 | // 存在不完整数据解包 则返回null 99 | return null; 100 | } 101 | 102 | 103 | } 104 | } -------------------------------------------------------------------------------- /SocketClient/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 | -------------------------------------------------------------------------------- /SocketServer/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 | -------------------------------------------------------------------------------- /SocketClient/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 | -------------------------------------------------------------------------------- /SocketServer/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 | -------------------------------------------------------------------------------- /SocketClient/Assets/Scenes/SampleScene.unity: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!29 &1 4 | OcclusionCullingSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_OcclusionBakeSettings: 8 | smallestOccluder: 5 9 | smallestHole: 0.25 10 | backfaceThreshold: 100 11 | m_SceneGUID: 00000000000000000000000000000000 12 | m_OcclusionCullingData: {fileID: 0} 13 | --- !u!104 &2 14 | RenderSettings: 15 | m_ObjectHideFlags: 0 16 | serializedVersion: 9 17 | m_Fog: 0 18 | m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} 19 | m_FogMode: 3 20 | m_FogDensity: 0.01 21 | m_LinearFogStart: 0 22 | m_LinearFogEnd: 300 23 | m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} 24 | m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} 25 | m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} 26 | m_AmbientIntensity: 1 27 | m_AmbientMode: 0 28 | m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} 29 | m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} 30 | m_HaloStrength: 0.5 31 | m_FlareStrength: 1 32 | m_FlareFadeSpeed: 3 33 | m_HaloTexture: {fileID: 0} 34 | m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} 35 | m_DefaultReflectionMode: 0 36 | m_DefaultReflectionResolution: 128 37 | m_ReflectionBounces: 1 38 | m_ReflectionIntensity: 1 39 | m_CustomReflection: {fileID: 0} 40 | m_Sun: {fileID: 0} 41 | m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} 42 | m_UseRadianceAmbientProbe: 0 43 | --- !u!157 &3 44 | LightmapSettings: 45 | m_ObjectHideFlags: 0 46 | serializedVersion: 11 47 | m_GIWorkflowMode: 1 48 | m_GISettings: 49 | serializedVersion: 2 50 | m_BounceScale: 1 51 | m_IndirectOutputScale: 1 52 | m_AlbedoBoost: 1 53 | m_EnvironmentLightingMode: 0 54 | m_EnableBakedLightmaps: 1 55 | m_EnableRealtimeLightmaps: 0 56 | m_LightmapEditorSettings: 57 | serializedVersion: 12 58 | m_Resolution: 2 59 | m_BakeResolution: 40 60 | m_AtlasSize: 1024 61 | m_AO: 0 62 | m_AOMaxDistance: 1 63 | m_CompAOExponent: 1 64 | m_CompAOExponentDirect: 0 65 | m_ExtractAmbientOcclusion: 0 66 | m_Padding: 2 67 | m_LightmapParameters: {fileID: 0} 68 | m_LightmapsBakeMode: 1 69 | m_TextureCompression: 1 70 | m_FinalGather: 0 71 | m_FinalGatherFiltering: 1 72 | m_FinalGatherRayCount: 256 73 | m_ReflectionCompression: 2 74 | m_MixedBakeMode: 2 75 | m_BakeBackend: 1 76 | m_PVRSampling: 1 77 | m_PVRDirectSampleCount: 32 78 | m_PVRSampleCount: 500 79 | m_PVRBounces: 2 80 | m_PVREnvironmentSampleCount: 500 81 | m_PVREnvironmentReferencePointCount: 2048 82 | m_PVRFilteringMode: 2 83 | m_PVRDenoiserTypeDirect: 0 84 | m_PVRDenoiserTypeIndirect: 0 85 | m_PVRDenoiserTypeAO: 0 86 | m_PVRFilterTypeDirect: 0 87 | m_PVRFilterTypeIndirect: 0 88 | m_PVRFilterTypeAO: 0 89 | m_PVREnvironmentMIS: 0 90 | m_PVRCulling: 1 91 | m_PVRFilteringGaussRadiusDirect: 1 92 | m_PVRFilteringGaussRadiusIndirect: 5 93 | m_PVRFilteringGaussRadiusAO: 2 94 | m_PVRFilteringAtrousPositionSigmaDirect: 0.5 95 | m_PVRFilteringAtrousPositionSigmaIndirect: 2 96 | m_PVRFilteringAtrousPositionSigmaAO: 1 97 | m_ExportTrainingData: 0 98 | m_TrainingDataDestination: TrainingData 99 | m_LightProbeSampleCountMultiplier: 4 100 | m_LightingDataAsset: {fileID: 0} 101 | m_UseShadowmask: 1 102 | --- !u!196 &4 103 | NavMeshSettings: 104 | serializedVersion: 2 105 | m_ObjectHideFlags: 0 106 | m_BuildSettings: 107 | serializedVersion: 2 108 | agentTypeID: 0 109 | agentRadius: 0.5 110 | agentHeight: 2 111 | agentSlope: 45 112 | agentClimb: 0.4 113 | ledgeDropHeight: 0 114 | maxJumpAcrossDistance: 0 115 | minRegionArea: 2 116 | manualCellSize: 0 117 | cellSize: 0.16666667 118 | manualTileSize: 0 119 | tileSize: 256 120 | accuratePlacement: 0 121 | debug: 122 | m_Flags: 0 123 | m_NavMeshData: {fileID: 0} 124 | --- !u!1 &272580672 125 | GameObject: 126 | m_ObjectHideFlags: 0 127 | m_CorrespondingSourceObject: {fileID: 0} 128 | m_PrefabInstance: {fileID: 0} 129 | m_PrefabAsset: {fileID: 0} 130 | serializedVersion: 6 131 | m_Component: 132 | - component: {fileID: 272580674} 133 | - component: {fileID: 272580673} 134 | m_Layer: 0 135 | m_Name: Main 136 | m_TagString: Untagged 137 | m_Icon: {fileID: 0} 138 | m_NavMeshLayer: 0 139 | m_StaticEditorFlags: 0 140 | m_IsActive: 1 141 | --- !u!114 &272580673 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: 272580672} 148 | m_Enabled: 1 149 | m_EditorHideFlags: 0 150 | m_Script: {fileID: 11500000, guid: 052b8595da3036e4a94eabc9a5a2b95b, type: 3} 151 | m_Name: 152 | m_EditorClassIdentifier: 153 | --- !u!4 &272580674 154 | Transform: 155 | m_ObjectHideFlags: 0 156 | m_CorrespondingSourceObject: {fileID: 0} 157 | m_PrefabInstance: {fileID: 0} 158 | m_PrefabAsset: {fileID: 0} 159 | m_GameObject: {fileID: 272580672} 160 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 161 | m_LocalPosition: {x: 0, y: 0, z: 0} 162 | m_LocalScale: {x: 1, y: 1, z: 1} 163 | m_Children: [] 164 | m_Father: {fileID: 0} 165 | m_RootOrder: 1 166 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 167 | --- !u!1 &1921837721 168 | GameObject: 169 | m_ObjectHideFlags: 0 170 | m_CorrespondingSourceObject: {fileID: 0} 171 | m_PrefabInstance: {fileID: 0} 172 | m_PrefabAsset: {fileID: 0} 173 | serializedVersion: 6 174 | m_Component: 175 | - component: {fileID: 1921837724} 176 | - component: {fileID: 1921837723} 177 | - component: {fileID: 1921837722} 178 | m_Layer: 0 179 | m_Name: Camera 180 | m_TagString: Untagged 181 | m_Icon: {fileID: 0} 182 | m_NavMeshLayer: 0 183 | m_StaticEditorFlags: 0 184 | m_IsActive: 1 185 | --- !u!81 &1921837722 186 | AudioListener: 187 | m_ObjectHideFlags: 0 188 | m_CorrespondingSourceObject: {fileID: 0} 189 | m_PrefabInstance: {fileID: 0} 190 | m_PrefabAsset: {fileID: 0} 191 | m_GameObject: {fileID: 1921837721} 192 | m_Enabled: 1 193 | --- !u!20 &1921837723 194 | Camera: 195 | m_ObjectHideFlags: 0 196 | m_CorrespondingSourceObject: {fileID: 0} 197 | m_PrefabInstance: {fileID: 0} 198 | m_PrefabAsset: {fileID: 0} 199 | m_GameObject: {fileID: 1921837721} 200 | m_Enabled: 1 201 | serializedVersion: 2 202 | m_ClearFlags: 2 203 | m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} 204 | m_projectionMatrixMode: 1 205 | m_GateFitMode: 2 206 | m_FOVAxisMode: 0 207 | m_SensorSize: {x: 36, y: 24} 208 | m_LensShift: {x: 0, y: 0} 209 | m_FocalLength: 50 210 | m_NormalizedViewPortRect: 211 | serializedVersion: 2 212 | x: 0 213 | y: 0 214 | width: 1 215 | height: 1 216 | near clip plane: 0.3 217 | far clip plane: 1000 218 | field of view: 60 219 | orthographic: 0 220 | orthographic size: 5 221 | m_Depth: 0 222 | m_CullingMask: 223 | serializedVersion: 2 224 | m_Bits: 4294967295 225 | m_RenderingPath: -1 226 | m_TargetTexture: {fileID: 0} 227 | m_TargetDisplay: 0 228 | m_TargetEye: 3 229 | m_HDR: 1 230 | m_AllowMSAA: 1 231 | m_AllowDynamicResolution: 0 232 | m_ForceIntoRT: 0 233 | m_OcclusionCulling: 1 234 | m_StereoConvergence: 10 235 | m_StereoSeparation: 0.022 236 | --- !u!4 &1921837724 237 | Transform: 238 | m_ObjectHideFlags: 0 239 | m_CorrespondingSourceObject: {fileID: 0} 240 | m_PrefabInstance: {fileID: 0} 241 | m_PrefabAsset: {fileID: 0} 242 | m_GameObject: {fileID: 1921837721} 243 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 244 | m_LocalPosition: {x: 0, y: 0, z: 0} 245 | m_LocalScale: {x: 1, y: 1, z: 1} 246 | m_Children: [] 247 | m_Father: {fileID: 0} 248 | m_RootOrder: 0 249 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 250 | -------------------------------------------------------------------------------- /SocketServer/Assets/Scenes/SampleScene.unity: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!29 &1 4 | OcclusionCullingSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_OcclusionBakeSettings: 8 | smallestOccluder: 5 9 | smallestHole: 0.25 10 | backfaceThreshold: 100 11 | m_SceneGUID: 00000000000000000000000000000000 12 | m_OcclusionCullingData: {fileID: 0} 13 | --- !u!104 &2 14 | RenderSettings: 15 | m_ObjectHideFlags: 0 16 | serializedVersion: 9 17 | m_Fog: 0 18 | m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} 19 | m_FogMode: 3 20 | m_FogDensity: 0.01 21 | m_LinearFogStart: 0 22 | m_LinearFogEnd: 300 23 | m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} 24 | m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} 25 | m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} 26 | m_AmbientIntensity: 1 27 | m_AmbientMode: 0 28 | m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} 29 | m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} 30 | m_HaloStrength: 0.5 31 | m_FlareStrength: 1 32 | m_FlareFadeSpeed: 3 33 | m_HaloTexture: {fileID: 0} 34 | m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} 35 | m_DefaultReflectionMode: 0 36 | m_DefaultReflectionResolution: 128 37 | m_ReflectionBounces: 1 38 | m_ReflectionIntensity: 1 39 | m_CustomReflection: {fileID: 0} 40 | m_Sun: {fileID: 0} 41 | m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} 42 | m_UseRadianceAmbientProbe: 0 43 | --- !u!157 &3 44 | LightmapSettings: 45 | m_ObjectHideFlags: 0 46 | serializedVersion: 11 47 | m_GIWorkflowMode: 1 48 | m_GISettings: 49 | serializedVersion: 2 50 | m_BounceScale: 1 51 | m_IndirectOutputScale: 1 52 | m_AlbedoBoost: 1 53 | m_EnvironmentLightingMode: 0 54 | m_EnableBakedLightmaps: 1 55 | m_EnableRealtimeLightmaps: 0 56 | m_LightmapEditorSettings: 57 | serializedVersion: 12 58 | m_Resolution: 2 59 | m_BakeResolution: 40 60 | m_AtlasSize: 1024 61 | m_AO: 0 62 | m_AOMaxDistance: 1 63 | m_CompAOExponent: 1 64 | m_CompAOExponentDirect: 0 65 | m_ExtractAmbientOcclusion: 0 66 | m_Padding: 2 67 | m_LightmapParameters: {fileID: 0} 68 | m_LightmapsBakeMode: 1 69 | m_TextureCompression: 1 70 | m_FinalGather: 0 71 | m_FinalGatherFiltering: 1 72 | m_FinalGatherRayCount: 256 73 | m_ReflectionCompression: 2 74 | m_MixedBakeMode: 2 75 | m_BakeBackend: 1 76 | m_PVRSampling: 1 77 | m_PVRDirectSampleCount: 32 78 | m_PVRSampleCount: 500 79 | m_PVRBounces: 2 80 | m_PVREnvironmentSampleCount: 500 81 | m_PVREnvironmentReferencePointCount: 2048 82 | m_PVRFilteringMode: 2 83 | m_PVRDenoiserTypeDirect: 0 84 | m_PVRDenoiserTypeIndirect: 0 85 | m_PVRDenoiserTypeAO: 0 86 | m_PVRFilterTypeDirect: 0 87 | m_PVRFilterTypeIndirect: 0 88 | m_PVRFilterTypeAO: 0 89 | m_PVREnvironmentMIS: 0 90 | m_PVRCulling: 1 91 | m_PVRFilteringGaussRadiusDirect: 1 92 | m_PVRFilteringGaussRadiusIndirect: 5 93 | m_PVRFilteringGaussRadiusAO: 2 94 | m_PVRFilteringAtrousPositionSigmaDirect: 0.5 95 | m_PVRFilteringAtrousPositionSigmaIndirect: 2 96 | m_PVRFilteringAtrousPositionSigmaAO: 1 97 | m_ExportTrainingData: 0 98 | m_TrainingDataDestination: TrainingData 99 | m_LightProbeSampleCountMultiplier: 4 100 | m_LightingDataAsset: {fileID: 0} 101 | m_UseShadowmask: 1 102 | --- !u!196 &4 103 | NavMeshSettings: 104 | serializedVersion: 2 105 | m_ObjectHideFlags: 0 106 | m_BuildSettings: 107 | serializedVersion: 2 108 | agentTypeID: 0 109 | agentRadius: 0.5 110 | agentHeight: 2 111 | agentSlope: 45 112 | agentClimb: 0.4 113 | ledgeDropHeight: 0 114 | maxJumpAcrossDistance: 0 115 | minRegionArea: 2 116 | manualCellSize: 0 117 | cellSize: 0.16666667 118 | manualTileSize: 0 119 | tileSize: 256 120 | accuratePlacement: 0 121 | debug: 122 | m_Flags: 0 123 | m_NavMeshData: {fileID: 0} 124 | --- !u!1 &1415579991 125 | GameObject: 126 | m_ObjectHideFlags: 0 127 | m_CorrespondingSourceObject: {fileID: 0} 128 | m_PrefabInstance: {fileID: 0} 129 | m_PrefabAsset: {fileID: 0} 130 | serializedVersion: 6 131 | m_Component: 132 | - component: {fileID: 1415579993} 133 | - component: {fileID: 1415579992} 134 | m_Layer: 0 135 | m_Name: Main 136 | m_TagString: Untagged 137 | m_Icon: {fileID: 0} 138 | m_NavMeshLayer: 0 139 | m_StaticEditorFlags: 0 140 | m_IsActive: 1 141 | --- !u!114 &1415579992 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: 1415579991} 148 | m_Enabled: 1 149 | m_EditorHideFlags: 0 150 | m_Script: {fileID: 11500000, guid: 6b72333f2bc06a7428fb3c0eadeed0d1, type: 3} 151 | m_Name: 152 | m_EditorClassIdentifier: 153 | --- !u!4 &1415579993 154 | Transform: 155 | m_ObjectHideFlags: 0 156 | m_CorrespondingSourceObject: {fileID: 0} 157 | m_PrefabInstance: {fileID: 0} 158 | m_PrefabAsset: {fileID: 0} 159 | m_GameObject: {fileID: 1415579991} 160 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 161 | m_LocalPosition: {x: 0, y: 0, z: 0} 162 | m_LocalScale: {x: 1, y: 1, z: 1} 163 | m_Children: [] 164 | m_Father: {fileID: 0} 165 | m_RootOrder: 1 166 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 167 | --- !u!1 &1968916244 168 | GameObject: 169 | m_ObjectHideFlags: 0 170 | m_CorrespondingSourceObject: {fileID: 0} 171 | m_PrefabInstance: {fileID: 0} 172 | m_PrefabAsset: {fileID: 0} 173 | serializedVersion: 6 174 | m_Component: 175 | - component: {fileID: 1968916247} 176 | - component: {fileID: 1968916246} 177 | - component: {fileID: 1968916245} 178 | m_Layer: 0 179 | m_Name: Camera 180 | m_TagString: Untagged 181 | m_Icon: {fileID: 0} 182 | m_NavMeshLayer: 0 183 | m_StaticEditorFlags: 0 184 | m_IsActive: 1 185 | --- !u!81 &1968916245 186 | AudioListener: 187 | m_ObjectHideFlags: 0 188 | m_CorrespondingSourceObject: {fileID: 0} 189 | m_PrefabInstance: {fileID: 0} 190 | m_PrefabAsset: {fileID: 0} 191 | m_GameObject: {fileID: 1968916244} 192 | m_Enabled: 1 193 | --- !u!20 &1968916246 194 | Camera: 195 | m_ObjectHideFlags: 0 196 | m_CorrespondingSourceObject: {fileID: 0} 197 | m_PrefabInstance: {fileID: 0} 198 | m_PrefabAsset: {fileID: 0} 199 | m_GameObject: {fileID: 1968916244} 200 | m_Enabled: 1 201 | serializedVersion: 2 202 | m_ClearFlags: 1 203 | m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} 204 | m_projectionMatrixMode: 1 205 | m_GateFitMode: 2 206 | m_FOVAxisMode: 0 207 | m_SensorSize: {x: 36, y: 24} 208 | m_LensShift: {x: 0, y: 0} 209 | m_FocalLength: 50 210 | m_NormalizedViewPortRect: 211 | serializedVersion: 2 212 | x: 0 213 | y: 0 214 | width: 1 215 | height: 1 216 | near clip plane: 0.3 217 | far clip plane: 1000 218 | field of view: 60 219 | orthographic: 0 220 | orthographic size: 5 221 | m_Depth: 0 222 | m_CullingMask: 223 | serializedVersion: 2 224 | m_Bits: 4294967295 225 | m_RenderingPath: -1 226 | m_TargetTexture: {fileID: 0} 227 | m_TargetDisplay: 0 228 | m_TargetEye: 3 229 | m_HDR: 1 230 | m_AllowMSAA: 1 231 | m_AllowDynamicResolution: 0 232 | m_ForceIntoRT: 0 233 | m_OcclusionCulling: 1 234 | m_StereoConvergence: 10 235 | m_StereoSeparation: 0.022 236 | --- !u!4 &1968916247 237 | Transform: 238 | m_ObjectHideFlags: 0 239 | m_CorrespondingSourceObject: {fileID: 0} 240 | m_PrefabInstance: {fileID: 0} 241 | m_PrefabAsset: {fileID: 0} 242 | m_GameObject: {fileID: 1968916244} 243 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 244 | m_LocalPosition: {x: 0, y: 0, z: 0} 245 | m_LocalScale: {x: 1, y: 1, z: 1} 246 | m_Children: [] 247 | m_Father: {fileID: 0} 248 | m_RootOrder: 0 249 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 250 | -------------------------------------------------------------------------------- /SocketClient/Assets/Scripts/Socket/SocketClient.cs: -------------------------------------------------------------------------------- 1 | 2 | 3 | using System; 4 | using System.IO; 5 | using System.Net; 6 | using System.Net.Sockets; 7 | using System.Threading; 8 | using System.Timers; 9 | 10 | 11 | 12 | /// 13 | /// Socket客户端 14 | /// 15 | public class SocketClient 16 | { 17 | /// 18 | /// 主线程 19 | /// 20 | private SynchronizationContext _mainThread; 21 | 22 | 23 | public string IP; 24 | public int Port; 25 | 26 | private const int TIMEOUT_CONNECT = 3000; // 连接超时时间 毫秒 27 | private const int TIMEOUT_SEND = 3000; // 发送超时时间 毫秒 28 | private const int TIMEOUT_RECEIVE = 3000; //接收超时时间 毫秒 29 | 30 | private const int HEAD_OFFSET = 2000; //心跳包发送间隔 毫秒 31 | private const int RECONN_MAX_SUM = 3; //最大重连次数 32 | 33 | private Socket _client; 34 | private Thread _receiveThread; 35 | private System.Timers.Timer _connTimeoutTimer; 36 | private System.Timers.Timer _headTimer; 37 | private DataBuffer _dataBuffer = new DataBuffer(); 38 | 39 | public event Action OnConnectSuccess; // 连接成功回调 40 | public event Action OnConnectError; // 连接失败回调 41 | public event Action OnDisconnect; // 断开回调 42 | public event Action OnReceive; // 接收报文回调 43 | public event Action OnSend; // 发送报文回调 44 | public event Action OnError; // 异常捕获回调 45 | public event Action OnReConnectSuccess; // 重连成功回调 46 | public event Action OnReConnectError; // 单次重连失败回调 47 | public event Action OnReconnecting; // 单次重连中回调 48 | 49 | private bool _isConnect = false; 50 | private bool _isReconnect = false; 51 | 52 | 53 | public SocketClient(string ip, int port) 54 | { 55 | _mainThread = SynchronizationContext.Current; 56 | 57 | IP = ip; 58 | Port = port; 59 | } 60 | public void Connect(Action success = null, Action error = null) 61 | { 62 | Action onTrigger = (flag) => 63 | { 64 | if (flag) 65 | { 66 | PostMainThreadAction(success); 67 | PostMainThreadAction(OnConnectSuccess); 68 | } 69 | else 70 | { 71 | PostMainThreadAction(error); 72 | PostMainThreadAction(OnConnectError); 73 | } 74 | if (_connTimeoutTimer != null) 75 | { 76 | _connTimeoutTimer.Stop(); 77 | _connTimeoutTimer = null; 78 | } 79 | }; 80 | try 81 | { 82 | _client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建套接字 83 | _client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, TIMEOUT_SEND); 84 | _client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, TIMEOUT_RECEIVE); 85 | IPAddress ipAddress = IPAddress.Parse(IP);//解析IP地址 86 | IPEndPoint ipEndpoint = new IPEndPoint(ipAddress, Port); 87 | IAsyncResult result = _client.BeginConnect(ipEndpoint, new AsyncCallback((iar) => 88 | { 89 | try 90 | { 91 | Socket client = (Socket)iar.AsyncState; 92 | client.EndConnect(iar); 93 | 94 | _isConnect = true; 95 | // 开始发送心跳包 96 | _headTimer = new System.Timers.Timer(HEAD_OFFSET); 97 | _headTimer.AutoReset = true; 98 | _headTimer.Elapsed += delegate (object sender, ElapsedEventArgs args) 99 | { 100 | Send((UInt16)SocketEvent.sc_head); 101 | }; 102 | _headTimer.Start(); 103 | 104 | // 开始接收数据 105 | _receiveThread = new Thread(new ThreadStart(ReceiveEvent)); 106 | _receiveThread.IsBackground = true; 107 | _receiveThread.Start(); 108 | 109 | onTrigger(true); 110 | } 111 | catch (SocketException ex) 112 | { 113 | onTrigger(false); 114 | } 115 | }), _client);//异步连接 116 | 117 | _connTimeoutTimer = new System.Timers.Timer(TIMEOUT_CONNECT); 118 | _connTimeoutTimer.AutoReset = false; 119 | _connTimeoutTimer.Elapsed += delegate (object sender, ElapsedEventArgs args) 120 | { 121 | onTrigger(false); 122 | }; 123 | _connTimeoutTimer.Start(); 124 | 125 | } 126 | catch (SocketException ex) 127 | { 128 | onTrigger(false); 129 | // throw; 130 | } 131 | } 132 | /// 133 | /// 断线重连 134 | /// 135 | /// 136 | public void ReConnect(int num = RECONN_MAX_SUM, int index = 0) 137 | { 138 | _isReconnect = true; 139 | 140 | num--; 141 | index++; 142 | if (num < 0) 143 | { 144 | onDisconnect(); 145 | _isReconnect = false; 146 | return; 147 | } 148 | PostMainThreadAction(OnReconnecting, index); 149 | Connect(() => 150 | { 151 | PostMainThreadAction(OnReConnectSuccess, index); 152 | _isReconnect = false; 153 | }, () => 154 | { 155 | PostMainThreadAction(OnReConnectError, index); 156 | ReConnect(num, index); 157 | }); 158 | 159 | } 160 | public void Send(UInt16 e, byte[] buff = null, Action onTrigger = null) 161 | { 162 | buff = buff ?? new byte[] { }; 163 | var dataPack = new SocketDataPack(e, buff); 164 | var data = dataPack.Buff; 165 | try 166 | { 167 | _client.BeginSend(data, 0, data.Length, SocketFlags.None, new AsyncCallback((asyncSend) => 168 | { 169 | Socket c = (Socket)asyncSend.AsyncState; 170 | c.EndSend(asyncSend); 171 | PostMainThreadAction(onTrigger, dataPack); 172 | PostMainThreadAction(OnSend, dataPack); 173 | }), _client); 174 | } 175 | catch (SocketException ex) 176 | { 177 | onError(ex); 178 | } 179 | 180 | } 181 | /// 182 | /// 线程内接收数据的函数 183 | /// 184 | private void ReceiveEvent() 185 | { 186 | while (true) 187 | { 188 | try 189 | { 190 | if (!_isConnect) break; 191 | if (_client.Available <= 0) continue; 192 | byte[] rbytes = new byte[8 * 1024]; 193 | int len = _client.Receive(rbytes); 194 | if (len > 0) 195 | { 196 | _dataBuffer.AddBuffer(rbytes, len); // 将收到的数据添加到缓存器中 197 | var dataPack = new SocketDataPack(); 198 | if (_dataBuffer.TryUnpack(out dataPack)) // 尝试解包 199 | { 200 | if (dataPack.Type == (UInt16)SocketEvent.sc_kickout) 201 | { 202 | // 服务端踢出 203 | onDisconnect(); 204 | } 205 | else 206 | { 207 | // 收到消息 208 | PostMainThreadAction(OnReceive, dataPack); 209 | } 210 | } 211 | } 212 | } 213 | catch (SocketException ex) 214 | { 215 | onError(ex); 216 | // throw; 217 | } 218 | } 219 | } 220 | /// 221 | /// 业务逻辑 - 客户端主动断开 222 | /// 223 | public void DisConnect() 224 | { 225 | Send((UInt16)SocketEvent.sc_disconn); 226 | onDisconnect(); 227 | } 228 | 229 | /// 230 | /// 缓存数据清理 231 | /// 232 | public void Close() 233 | { 234 | if (!_isConnect) return; 235 | _isConnect = false; 236 | if (_headTimer != null) 237 | { 238 | _headTimer.Stop(); 239 | _headTimer = null; 240 | } 241 | // if (_receiveThread != null) 242 | // { 243 | // _receiveThread.Abort(); 244 | // _receiveThread = null; 245 | // } 246 | if (_connTimeoutTimer != null) 247 | { 248 | _connTimeoutTimer.Stop(); 249 | _connTimeoutTimer = null; 250 | } 251 | if (_client != null) 252 | { 253 | _client.Close(); 254 | _client = null; 255 | } 256 | 257 | 258 | 259 | } 260 | 261 | 262 | /// 263 | /// 错误回调 264 | /// 265 | /// 266 | private void onError(SocketException ex) 267 | { 268 | Close(); 269 | 270 | PostMainThreadAction(OnError, ex); 271 | 272 | if (!_isReconnect) 273 | { 274 | ReConnect(); 275 | } 276 | } 277 | 278 | 279 | /// 280 | /// 断开回调 281 | /// 282 | private void onDisconnect() 283 | { 284 | 285 | Close(); 286 | 287 | PostMainThreadAction(OnDisconnect); 288 | } 289 | 290 | /// 291 | /// 通知主线程回调 292 | /// 293 | private void PostMainThreadAction(Action action) 294 | { 295 | _mainThread.Post(new SendOrPostCallback((o) => 296 | { 297 | Action e = (Action)o.GetType().GetProperty("action").GetValue(o); 298 | if (e != null) e(); 299 | }), new { action = action }); 300 | } 301 | private void PostMainThreadAction(Action action, T arg1) 302 | { 303 | _mainThread.Post(new SendOrPostCallback((o) => 304 | { 305 | Action e = (Action)o.GetType().GetProperty("action").GetValue(o); 306 | T t1 = (T)o.GetType().GetProperty("arg1").GetValue(o); 307 | if (e != null) e(t1); 308 | }), new { action = action, arg1 = arg1 }); 309 | } 310 | public void PostMainThreadAction(Action action, T1 arg1, T2 arg2) 311 | { 312 | _mainThread.Post(new SendOrPostCallback((o) => 313 | { 314 | Action e = (Action)o.GetType().GetProperty("action").GetValue(o); 315 | T1 t1 = (T1)o.GetType().GetProperty("arg1").GetValue(o); 316 | T2 t2 = (T2)o.GetType().GetProperty("arg2").GetValue(o); 317 | if (e != null) e(t1, t2); 318 | }), new { action = action, arg1 = arg1, arg2 = arg2 }); 319 | } 320 | } 321 | -------------------------------------------------------------------------------- /SocketServer/Assets/Scripts/Socket/SocketServer.cs: -------------------------------------------------------------------------------- 1 | 2 | 3 | using System; 4 | using System.Collections.Generic; 5 | using System.IO; 6 | using System.Net; 7 | using System.Net.Sockets; 8 | using System.Threading; 9 | using System.Timers; 10 | 11 | public class SocketInfo 12 | { 13 | public Socket Client; 14 | public Thread ReceiveThread; 15 | public long HeadTime; 16 | } 17 | 18 | /// 19 | /// Socket服务端 20 | /// 21 | public class SocketServer 22 | { 23 | /// 24 | /// 主线程 25 | /// 26 | private SynchronizationContext _mainThread; 27 | 28 | 29 | 30 | public string IP; 31 | public int Port; 32 | 33 | private const int HEAD_TIMEOUT = 5000; // 心跳超时 毫秒 34 | private const int HEAD_CHECKTIME = 5000; // 心跳包超时检测 毫秒 35 | 36 | public Dictionary ClientInfoDic = new Dictionary(); 37 | 38 | private Socket _server; 39 | private Thread _connectThread; 40 | private System.Timers.Timer _headCheckTimer; 41 | private DataBuffer _dataBuffer = new DataBuffer(); 42 | 43 | public event Action OnConnect; //客户端建立连接回调 44 | public event Action OnDisconnect; // 客户端断开连接回调 45 | public event Action OnReceive; // 接收报文回调 46 | public event Action OnSend; // 发送报文回调 47 | 48 | // 目前捕获异常将触发OnDisconnect回调 暂不单独处理 49 | // public event Action OnError; // 异常捕获回调 50 | 51 | private bool _isValid = true; 52 | 53 | public SocketServer(string ip, int port) 54 | { 55 | _mainThread = SynchronizationContext.Current; 56 | 57 | IP = ip; 58 | Port = port; 59 | 60 | _server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 61 | IPAddress ipAddress = IPAddress.Parse(IP);//解析IP地址 62 | _server.Bind(new IPEndPoint(ipAddress, Port)); //绑定IP地址:端口 63 | 64 | _server.Listen(10); //设定最多10个排队连接请求 65 | 66 | // 启动线程监听连接 67 | _connectThread = new Thread(ListenClientConnect); 68 | _connectThread.Start(); 69 | 70 | // 心跳包定时检测 71 | _headCheckTimer = new System.Timers.Timer(HEAD_CHECKTIME); 72 | _headCheckTimer.AutoReset = true; 73 | _headCheckTimer.Elapsed += delegate (object sender, ElapsedEventArgs args) 74 | { 75 | CheckHeadTimeOut(); 76 | }; 77 | _headCheckTimer.Start(); 78 | } 79 | /// 80 | /// 监听客户端连接 81 | /// 82 | private void ListenClientConnect() 83 | { 84 | while (true) 85 | { 86 | try 87 | { 88 | if (!_isValid) break; 89 | Socket client = _server.Accept(); 90 | Thread receiveThread = new Thread(ReceiveEvent); 91 | ClientInfoDic.Add(client, new SocketInfo() { Client = client, ReceiveThread = receiveThread, HeadTime = GetNowTime() }); 92 | receiveThread.Start(client); 93 | 94 | PostMainThreadAction(OnConnect, client); 95 | 96 | 97 | } 98 | catch 99 | { 100 | break; 101 | } 102 | 103 | } 104 | 105 | } 106 | /// 107 | /// 获取当前时间戳 108 | /// 109 | /// 110 | private long GetNowTime() 111 | { 112 | TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0); 113 | return Convert.ToInt64(ts.TotalMilliseconds); 114 | } 115 | 116 | public void Send(Socket client, UInt16 e, byte[] buff = null, Action onTrigger = null) 117 | { 118 | buff = buff ?? new byte[] { }; 119 | var dataPack = new SocketDataPack(e, buff); 120 | var data = dataPack.Buff; 121 | try 122 | { 123 | client.BeginSend(data, 0, data.Length, SocketFlags.None, new AsyncCallback((asyncSend) => 124 | { 125 | Socket c = (Socket)asyncSend.AsyncState; 126 | c.EndSend(asyncSend); 127 | PostMainThreadAction(onTrigger, dataPack); 128 | PostMainThreadAction(OnSend, client, dataPack); 129 | }), client); 130 | } 131 | catch (SocketException ex) 132 | { 133 | CloseClient(client); 134 | // onError(ex); 135 | } 136 | 137 | } 138 | /// 139 | /// 线程内接收数据的函数 140 | /// 141 | private void ReceiveEvent(object client) 142 | { 143 | Socket tsocket = (Socket)client; 144 | while (true) 145 | { 146 | if (!_isValid) return; 147 | if (!ClientInfoDic.ContainsKey(tsocket)) 148 | { 149 | return; 150 | } 151 | try 152 | { 153 | byte[] rbytes = new byte[8 * 1024]; 154 | int len = tsocket.Receive(rbytes); 155 | if (len > 0) 156 | { 157 | _dataBuffer.AddBuffer(rbytes, len); // 将收到的数据添加到缓存器中 158 | var dataPack = new SocketDataPack(); 159 | if (_dataBuffer.TryUnpack(out dataPack)) // 尝试解包 160 | { 161 | if (dataPack.Type == (UInt16)SocketEvent.sc_head) 162 | { 163 | // 接收到心跳包 164 | ReceiveHead(tsocket); 165 | } 166 | else if (dataPack.Type == (UInt16)SocketEvent.sc_disconn) 167 | { 168 | // 客户端断开连接 169 | CloseClient(tsocket); 170 | } 171 | else 172 | { 173 | // 收到消息 174 | PostMainThreadAction(OnReceive, tsocket, dataPack); 175 | } 176 | 177 | } 178 | } 179 | else 180 | { 181 | if (tsocket.Poll(-1, SelectMode.SelectRead)) 182 | { 183 | CloseClient(tsocket); 184 | return; 185 | } 186 | } 187 | } 188 | catch (SocketException ex) 189 | { 190 | CloseClient(tsocket); 191 | // onError(ex); 192 | return; 193 | } 194 | } 195 | } 196 | /// 197 | /// 接收到心跳包 198 | /// 199 | private void ReceiveHead(Socket client) 200 | { 201 | SocketInfo info; 202 | if (ClientInfoDic.TryGetValue(client, out info)) 203 | { 204 | long now = GetNowTime(); 205 | long offset = now - info.HeadTime; 206 | UnityEngine.Debug.Log("更新心跳时间戳 >>>" + now + " 间隔>>>" + offset); 207 | if (offset > HEAD_TIMEOUT) 208 | { 209 | // 心跳包收到但超时逻辑 210 | } 211 | info.HeadTime = now; 212 | } 213 | } 214 | /// 215 | /// 检测心跳包超时 216 | /// 217 | private void CheckHeadTimeOut() 218 | { 219 | var tempList = new List(); 220 | foreach (var socket in ClientInfoDic.Keys) 221 | { 222 | tempList.Add(socket); 223 | } 224 | foreach (var socket in tempList) 225 | { 226 | var info = ClientInfoDic[socket]; 227 | long now = GetNowTime(); 228 | long offset = now - info.HeadTime; 229 | if (offset > HEAD_TIMEOUT) 230 | { 231 | // 心跳包超时 232 | KickOut(socket); 233 | } 234 | } 235 | } 236 | public void KickOut(Socket client) 237 | { 238 | // 踢出连接 239 | Send(client, (UInt16)SocketEvent.sc_kickout, null, (dataPack) => 240 | { 241 | CloseClient(client); 242 | }); 243 | } 244 | public void KickOutAll() 245 | { 246 | var tempList = new List(); 247 | foreach (var socket in ClientInfoDic.Keys) 248 | { 249 | tempList.Add(socket); 250 | } 251 | foreach (var socket in tempList) 252 | { 253 | KickOut(socket); 254 | } 255 | } 256 | /// 257 | /// 清理客户端连接 258 | /// 259 | /// 260 | private void CloseClient(Socket client) 261 | { 262 | PostMainThreadAction((socket) => 263 | { 264 | if (OnDisconnect != null) OnDisconnect(socket); 265 | ClientInfoDic.Remove(socket); 266 | socket.Close(); 267 | }, client); 268 | 269 | } 270 | /// 271 | /// 关闭 272 | /// 273 | public void Close() 274 | { 275 | if (!_isValid) return; 276 | _isValid = false; 277 | // if (_connectThread != null) _connectThread.Abort(); 278 | var tempList = new List(); 279 | foreach (var socket in ClientInfoDic.Keys) 280 | { 281 | tempList.Add(socket); 282 | } 283 | foreach (var socket in tempList) 284 | { 285 | CloseClient(socket); 286 | } 287 | if (_headCheckTimer != null) 288 | { 289 | _headCheckTimer.Stop(); 290 | _headCheckTimer = null; 291 | } 292 | _server.Close(); 293 | } 294 | 295 | // /// 296 | // /// 错误回调 297 | // /// 298 | // /// 299 | // private void onError(SocketException ex) 300 | // { 301 | // PostMainThreadAction(OnError, ex); 302 | // } 303 | 304 | 305 | // 306 | /// 通知主线程回调 307 | /// 308 | private void PostMainThreadAction(Action action) 309 | { 310 | _mainThread.Post(new SendOrPostCallback((o) => 311 | { 312 | Action e = (Action)o.GetType().GetProperty("action").GetValue(o); 313 | if (e != null) e(); 314 | }), new { action = action }); 315 | } 316 | private void PostMainThreadAction(Action action, T arg1) 317 | { 318 | _mainThread.Post(new SendOrPostCallback((o) => 319 | { 320 | Action e = (Action)o.GetType().GetProperty("action").GetValue(o); 321 | T t1 = (T)o.GetType().GetProperty("arg1").GetValue(o); 322 | if (e != null) e(t1); 323 | }), new { action = action, arg1 = arg1 }); 324 | } 325 | public void PostMainThreadAction(Action action, T1 arg1, T2 arg2) 326 | { 327 | _mainThread.Post(new SendOrPostCallback((o) => 328 | { 329 | Action e = (Action)o.GetType().GetProperty("action").GetValue(o); 330 | T1 t1 = (T1)o.GetType().GetProperty("arg1").GetValue(o); 331 | T2 t2 = (T2)o.GetType().GetProperty("arg2").GetValue(o); 332 | if (e != null) e(t1, t2); 333 | }), new { action = action, arg1 = arg1, arg2 = arg2 }); 334 | } 335 | } 336 | -------------------------------------------------------------------------------- /SocketClient/ProjectSettings/ProjectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!129 &1 4 | PlayerSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 20 7 | productGUID: f94479c3299aa1f408d760bf7bbc9edf 8 | AndroidProfiler: 0 9 | AndroidFilterTouchesWhenObscured: 0 10 | AndroidEnableSustainedPerformanceMode: 0 11 | defaultScreenOrientation: 4 12 | targetDevice: 2 13 | useOnDemandResources: 0 14 | accelerometerFrequency: 60 15 | companyName: DefaultCompany 16 | productName: SocketClient 17 | m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} 18 | m_ShowUnitySplashScreen: 1 19 | m_ShowUnitySplashLogo: 1 20 | m_SplashScreenOverlayOpacity: 1 21 | m_SplashScreenAnimation: 1 22 | m_SplashScreenLogoStyle: 1 23 | m_SplashScreenDrawMode: 0 24 | m_SplashScreenBackgroundAnimationZoom: 1 25 | m_SplashScreenLogoAnimationZoom: 1 26 | m_SplashScreenBackgroundLandscapeAspect: 1 27 | m_SplashScreenBackgroundPortraitAspect: 1 28 | m_SplashScreenBackgroundLandscapeUvs: 29 | serializedVersion: 2 30 | x: 0 31 | y: 0 32 | width: 1 33 | height: 1 34 | m_SplashScreenBackgroundPortraitUvs: 35 | serializedVersion: 2 36 | x: 0 37 | y: 0 38 | width: 1 39 | height: 1 40 | m_SplashScreenLogos: [] 41 | m_VirtualRealitySplashScreen: {fileID: 0} 42 | m_ShowUnitySplashAds: 0 43 | m_AdsAndroidGameId: 44 | m_AdsIosGameId: 45 | m_ShowSplashAdsSlogan: 0 46 | m_SloganImage: {fileID: 0} 47 | m_SloganHeight: 150 48 | defaultCursor: {fileID: 0} 49 | cursorHotspot: {x: 0, y: 0} 50 | m_HolographicTrackingLossScreen: {fileID: 0} 51 | defaultScreenWidth: 1024 52 | defaultScreenHeight: 768 53 | defaultScreenWidthWeb: 960 54 | defaultScreenHeightWeb: 600 55 | m_StereoRenderingPath: 0 56 | m_ActiveColorSpace: 0 57 | m_MTRendering: 1 58 | m_StackTraceTypes: 010000000100000001000000010000000100000001000000 59 | iosShowActivityIndicatorOnLoading: -1 60 | androidShowActivityIndicatorOnLoading: -1 61 | iosUseCustomAppBackgroundBehavior: 0 62 | iosAllowHTTPDownload: 1 63 | allowedAutorotateToPortrait: 1 64 | allowedAutorotateToPortraitUpsideDown: 1 65 | allowedAutorotateToLandscapeRight: 1 66 | allowedAutorotateToLandscapeLeft: 1 67 | useOSAutorotation: 1 68 | use32BitDisplayBuffer: 1 69 | preserveFramebufferAlpha: 0 70 | disableDepthAndStencilBuffers: 0 71 | androidStartInFullscreen: 1 72 | androidRenderOutsideSafeArea: 1 73 | androidUseSwappy: 0 74 | androidBlitType: 0 75 | defaultIsNativeResolution: 1 76 | macRetinaSupport: 1 77 | runInBackground: 1 78 | captureSingleScreen: 0 79 | muteOtherAudioSources: 0 80 | Prepare IOS For Recording: 0 81 | Force IOS Speakers When Recording: 0 82 | deferSystemGesturesMode: 0 83 | hideHomeButton: 0 84 | submitAnalytics: 1 85 | usePlayerLog: 1 86 | bakeCollisionMeshes: 0 87 | forceSingleInstance: 0 88 | useFlipModelSwapchain: 1 89 | resizableWindow: 0 90 | useMacAppStoreValidation: 0 91 | macAppStoreCategory: public.app-category.games 92 | gpuSkinning: 1 93 | xboxPIXTextureCapture: 0 94 | xboxEnableAvatar: 0 95 | xboxEnableKinect: 0 96 | xboxEnableKinectAutoTracking: 0 97 | xboxEnableFitness: 0 98 | visibleInBackground: 1 99 | allowFullscreenSwitch: 1 100 | fullscreenMode: 1 101 | xboxSpeechDB: 0 102 | xboxEnableHeadOrientation: 0 103 | xboxEnableGuest: 0 104 | xboxEnablePIXSampling: 0 105 | metalFramebufferOnly: 0 106 | xboxOneResolution: 0 107 | xboxOneSResolution: 0 108 | xboxOneXResolution: 3 109 | xboxOneMonoLoggingLevel: 0 110 | xboxOneLoggingLevel: 1 111 | xboxOneDisableEsram: 0 112 | xboxOneEnableTypeOptimization: 0 113 | xboxOnePresentImmediateThreshold: 0 114 | switchQueueCommandMemory: 0 115 | switchQueueControlMemory: 16384 116 | switchQueueComputeMemory: 262144 117 | switchNVNShaderPoolsGranularity: 33554432 118 | switchNVNDefaultPoolsGranularity: 16777216 119 | switchNVNOtherPoolsGranularity: 16777216 120 | switchNVNMaxPublicTextureIDCount: 0 121 | switchNVNMaxPublicSamplerIDCount: 0 122 | stadiaPresentMode: 0 123 | stadiaTargetFramerate: 0 124 | vulkanNumSwapchainBuffers: 3 125 | vulkanEnableSetSRGBWrite: 0 126 | vulkanEnableLateAcquireNextImage: 0 127 | useSecurityBuild: 0 128 | m_SupportedAspectRatios: 129 | 4:3: 1 130 | 5:4: 1 131 | 16:10: 1 132 | 16:9: 1 133 | Others: 1 134 | bundleVersion: 0.1 135 | preloadedAssets: [] 136 | metroInputSource: 0 137 | wsaTransparentSwapchain: 0 138 | m_HolographicPauseOnTrackingLoss: 1 139 | xboxOneDisableKinectGpuReservation: 1 140 | xboxOneEnable7thCore: 1 141 | vrSettings: 142 | cardboard: 143 | depthFormat: 0 144 | enableTransitionView: 0 145 | daydream: 146 | depthFormat: 0 147 | useSustainedPerformanceMode: 0 148 | enableVideoLayer: 0 149 | useProtectedVideoMemory: 0 150 | minimumSupportedHeadTracking: 0 151 | maximumSupportedHeadTracking: 1 152 | hololens: 153 | depthFormat: 1 154 | depthBufferSharingEnabled: 1 155 | lumin: 156 | depthFormat: 0 157 | frameTiming: 2 158 | enableGLCache: 0 159 | glCacheMaxBlobSize: 524288 160 | glCacheMaxFileSize: 8388608 161 | oculus: 162 | sharedDepthBuffer: 1 163 | dashSupport: 1 164 | lowOverheadMode: 0 165 | protectedContext: 0 166 | v2Signing: 1 167 | enable360StereoCapture: 0 168 | isWsaHolographicRemotingEnabled: 0 169 | enableFrameTimingStats: 0 170 | useHDRDisplay: 0 171 | D3DHDRBitDepth: 0 172 | m_ColorGamuts: 00000000 173 | targetPixelDensity: 30 174 | resolutionScalingMode: 0 175 | androidSupportedAspectRatio: 1 176 | androidMaxAspectRatio: 2.1 177 | applicationIdentifier: {} 178 | buildNumber: {} 179 | AndroidBundleVersionCode: 1 180 | AndroidMinSdkVersion: 19 181 | AndroidTargetSdkVersion: 0 182 | AndroidPreferredInstallLocation: 1 183 | aotOptions: 184 | stripEngineCode: 1 185 | iPhoneStrippingLevel: 0 186 | iPhoneScriptCallOptimization: 0 187 | ForceInternetPermission: 0 188 | ForceSDCardPermission: 0 189 | CreateWallpaper: 0 190 | APKExpansionFiles: 0 191 | keepLoadedShadersAlive: 0 192 | StripUnusedMeshComponents: 1 193 | VertexChannelCompressionMask: 4054 194 | iPhoneSdkVersion: 988 195 | iOSTargetOSVersionString: 10.0 196 | tvOSSdkVersion: 0 197 | tvOSRequireExtendedGameController: 0 198 | tvOSTargetOSVersionString: 10.0 199 | uIPrerenderedIcon: 0 200 | uIRequiresPersistentWiFi: 0 201 | uIRequiresFullScreen: 1 202 | uIStatusBarHidden: 1 203 | uIExitOnSuspend: 0 204 | uIStatusBarStyle: 0 205 | appleTVSplashScreen: {fileID: 0} 206 | appleTVSplashScreen2x: {fileID: 0} 207 | tvOSSmallIconLayers: [] 208 | tvOSSmallIconLayers2x: [] 209 | tvOSLargeIconLayers: [] 210 | tvOSLargeIconLayers2x: [] 211 | tvOSTopShelfImageLayers: [] 212 | tvOSTopShelfImageLayers2x: [] 213 | tvOSTopShelfImageWideLayers: [] 214 | tvOSTopShelfImageWideLayers2x: [] 215 | iOSLaunchScreenType: 0 216 | iOSLaunchScreenPortrait: {fileID: 0} 217 | iOSLaunchScreenLandscape: {fileID: 0} 218 | iOSLaunchScreenBackgroundColor: 219 | serializedVersion: 2 220 | rgba: 0 221 | iOSLaunchScreenFillPct: 100 222 | iOSLaunchScreenSize: 100 223 | iOSLaunchScreenCustomXibPath: 224 | iOSLaunchScreeniPadType: 0 225 | iOSLaunchScreeniPadImage: {fileID: 0} 226 | iOSLaunchScreeniPadBackgroundColor: 227 | serializedVersion: 2 228 | rgba: 0 229 | iOSLaunchScreeniPadFillPct: 100 230 | iOSLaunchScreeniPadSize: 100 231 | iOSLaunchScreeniPadCustomXibPath: 232 | iOSUseLaunchScreenStoryboard: 0 233 | iOSLaunchScreenCustomStoryboardPath: 234 | iOSDeviceRequirements: [] 235 | iOSURLSchemes: [] 236 | iOSBackgroundModes: 0 237 | iOSMetalForceHardShadows: 0 238 | metalEditorSupport: 1 239 | metalAPIValidation: 1 240 | iOSRenderExtraFrameOnPause: 0 241 | appleDeveloperTeamID: 242 | iOSManualSigningProvisioningProfileID: 243 | tvOSManualSigningProvisioningProfileID: 244 | iOSManualSigningProvisioningProfileType: 0 245 | tvOSManualSigningProvisioningProfileType: 0 246 | appleEnableAutomaticSigning: 0 247 | iOSRequireARKit: 0 248 | iOSAutomaticallyDetectAndAddCapabilities: 1 249 | appleEnableProMotion: 0 250 | clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea 251 | templatePackageId: com.unity.template.3d@4.2.8 252 | templateDefaultScene: Assets/Scenes/SampleScene.unity 253 | AndroidTargetArchitectures: 1 254 | AndroidSplashScreenScale: 0 255 | androidSplashScreen: {fileID: 0} 256 | AndroidKeystoreName: 257 | AndroidKeyaliasName: 258 | AndroidBuildApkPerCpuArchitecture: 0 259 | AndroidTVCompatibility: 0 260 | AndroidIsGame: 1 261 | AndroidEnableTango: 0 262 | androidEnableBanner: 1 263 | androidUseLowAccuracyLocation: 0 264 | androidUseCustomKeystore: 0 265 | m_AndroidBanners: 266 | - width: 320 267 | height: 180 268 | banner: {fileID: 0} 269 | androidGamepadSupportLevel: 0 270 | AndroidValidateAppBundleSize: 1 271 | AndroidAppBundleSizeToValidate: 150 272 | m_BuildTargetIcons: [] 273 | m_BuildTargetPlatformIcons: 274 | - m_BuildTarget: Android 275 | m_Icons: 276 | - m_Textures: [] 277 | m_Width: 432 278 | m_Height: 432 279 | m_Kind: 2 280 | m_SubKind: 281 | - m_Textures: [] 282 | m_Width: 324 283 | m_Height: 324 284 | m_Kind: 2 285 | m_SubKind: 286 | - m_Textures: [] 287 | m_Width: 216 288 | m_Height: 216 289 | m_Kind: 2 290 | m_SubKind: 291 | - m_Textures: [] 292 | m_Width: 162 293 | m_Height: 162 294 | m_Kind: 2 295 | m_SubKind: 296 | - m_Textures: [] 297 | m_Width: 108 298 | m_Height: 108 299 | m_Kind: 2 300 | m_SubKind: 301 | - m_Textures: [] 302 | m_Width: 81 303 | m_Height: 81 304 | m_Kind: 2 305 | m_SubKind: 306 | - m_Textures: [] 307 | m_Width: 192 308 | m_Height: 192 309 | m_Kind: 0 310 | m_SubKind: 311 | - m_Textures: [] 312 | m_Width: 144 313 | m_Height: 144 314 | m_Kind: 0 315 | m_SubKind: 316 | - m_Textures: [] 317 | m_Width: 96 318 | m_Height: 96 319 | m_Kind: 0 320 | m_SubKind: 321 | - m_Textures: [] 322 | m_Width: 72 323 | m_Height: 72 324 | m_Kind: 0 325 | m_SubKind: 326 | - m_Textures: [] 327 | m_Width: 48 328 | m_Height: 48 329 | m_Kind: 0 330 | m_SubKind: 331 | - m_Textures: [] 332 | m_Width: 36 333 | m_Height: 36 334 | m_Kind: 0 335 | m_SubKind: 336 | - m_Textures: [] 337 | m_Width: 192 338 | m_Height: 192 339 | m_Kind: 1 340 | m_SubKind: 341 | - m_Textures: [] 342 | m_Width: 144 343 | m_Height: 144 344 | m_Kind: 1 345 | m_SubKind: 346 | - m_Textures: [] 347 | m_Width: 96 348 | m_Height: 96 349 | m_Kind: 1 350 | m_SubKind: 351 | - m_Textures: [] 352 | m_Width: 72 353 | m_Height: 72 354 | m_Kind: 1 355 | m_SubKind: 356 | - m_Textures: [] 357 | m_Width: 48 358 | m_Height: 48 359 | m_Kind: 1 360 | m_SubKind: 361 | - m_Textures: [] 362 | m_Width: 36 363 | m_Height: 36 364 | m_Kind: 1 365 | m_SubKind: 366 | m_BuildTargetBatching: 367 | - m_BuildTarget: Standalone 368 | m_StaticBatching: 1 369 | m_DynamicBatching: 0 370 | - m_BuildTarget: tvOS 371 | m_StaticBatching: 1 372 | m_DynamicBatching: 0 373 | - m_BuildTarget: Android 374 | m_StaticBatching: 1 375 | m_DynamicBatching: 0 376 | - m_BuildTarget: iPhone 377 | m_StaticBatching: 1 378 | m_DynamicBatching: 0 379 | - m_BuildTarget: WebGL 380 | m_StaticBatching: 0 381 | m_DynamicBatching: 0 382 | m_BuildTargetEncrypting: [] 383 | m_BuildTargetGraphicsJobs: 384 | - m_BuildTarget: MacStandaloneSupport 385 | m_GraphicsJobs: 0 386 | - m_BuildTarget: Switch 387 | m_GraphicsJobs: 1 388 | - m_BuildTarget: MetroSupport 389 | m_GraphicsJobs: 1 390 | - m_BuildTarget: AppleTVSupport 391 | m_GraphicsJobs: 0 392 | - m_BuildTarget: BJMSupport 393 | m_GraphicsJobs: 1 394 | - m_BuildTarget: LinuxStandaloneSupport 395 | m_GraphicsJobs: 1 396 | - m_BuildTarget: PS4Player 397 | m_GraphicsJobs: 1 398 | - m_BuildTarget: iOSSupport 399 | m_GraphicsJobs: 0 400 | - m_BuildTarget: WindowsStandaloneSupport 401 | m_GraphicsJobs: 1 402 | - m_BuildTarget: XboxOnePlayer 403 | m_GraphicsJobs: 1 404 | - m_BuildTarget: LuminSupport 405 | m_GraphicsJobs: 0 406 | - m_BuildTarget: AndroidPlayer 407 | m_GraphicsJobs: 0 408 | - m_BuildTarget: WebGLSupport 409 | m_GraphicsJobs: 0 410 | m_BuildTargetGraphicsJobMode: 411 | - m_BuildTarget: PS4Player 412 | m_GraphicsJobMode: 0 413 | - m_BuildTarget: XboxOnePlayer 414 | m_GraphicsJobMode: 0 415 | m_BuildTargetGraphicsAPIs: 416 | - m_BuildTarget: AndroidPlayer 417 | m_APIs: 150000000b000000 418 | m_Automatic: 0 419 | - m_BuildTarget: iOSSupport 420 | m_APIs: 10000000 421 | m_Automatic: 1 422 | - m_BuildTarget: AppleTVSupport 423 | m_APIs: 10000000 424 | m_Automatic: 0 425 | - m_BuildTarget: WebGLSupport 426 | m_APIs: 0b000000 427 | m_Automatic: 1 428 | m_BuildTargetVRSettings: 429 | - m_BuildTarget: Standalone 430 | m_Enabled: 0 431 | m_Devices: 432 | - Oculus 433 | - OpenVR 434 | openGLRequireES31: 0 435 | openGLRequireES31AEP: 0 436 | openGLRequireES32: 0 437 | m_TemplateCustomTags: {} 438 | mobileMTRendering: 439 | Android: 1 440 | iPhone: 1 441 | tvOS: 1 442 | m_BuildTargetGroupLightmapEncodingQuality: [] 443 | m_BuildTargetGroupLightmapSettings: [] 444 | playModeTestRunnerEnabled: 0 445 | runPlayModeTestAsEditModeTest: 0 446 | actionOnDotNetUnhandledException: 1 447 | enableInternalProfiler: 0 448 | logObjCUncaughtExceptions: 1 449 | enableCrashReportAPI: 0 450 | cameraUsageDescription: 451 | locationUsageDescription: 452 | microphoneUsageDescription: 453 | switchNetLibKey: 454 | switchSocketMemoryPoolSize: 6144 455 | switchSocketAllocatorPoolSize: 128 456 | switchSocketConcurrencyLimit: 14 457 | switchScreenResolutionBehavior: 2 458 | switchUseCPUProfiler: 0 459 | switchApplicationID: 0x01004b9000490000 460 | switchNSODependencies: 461 | switchTitleNames_0: 462 | switchTitleNames_1: 463 | switchTitleNames_2: 464 | switchTitleNames_3: 465 | switchTitleNames_4: 466 | switchTitleNames_5: 467 | switchTitleNames_6: 468 | switchTitleNames_7: 469 | switchTitleNames_8: 470 | switchTitleNames_9: 471 | switchTitleNames_10: 472 | switchTitleNames_11: 473 | switchTitleNames_12: 474 | switchTitleNames_13: 475 | switchTitleNames_14: 476 | switchPublisherNames_0: 477 | switchPublisherNames_1: 478 | switchPublisherNames_2: 479 | switchPublisherNames_3: 480 | switchPublisherNames_4: 481 | switchPublisherNames_5: 482 | switchPublisherNames_6: 483 | switchPublisherNames_7: 484 | switchPublisherNames_8: 485 | switchPublisherNames_9: 486 | switchPublisherNames_10: 487 | switchPublisherNames_11: 488 | switchPublisherNames_12: 489 | switchPublisherNames_13: 490 | switchPublisherNames_14: 491 | switchIcons_0: {fileID: 0} 492 | switchIcons_1: {fileID: 0} 493 | switchIcons_2: {fileID: 0} 494 | switchIcons_3: {fileID: 0} 495 | switchIcons_4: {fileID: 0} 496 | switchIcons_5: {fileID: 0} 497 | switchIcons_6: {fileID: 0} 498 | switchIcons_7: {fileID: 0} 499 | switchIcons_8: {fileID: 0} 500 | switchIcons_9: {fileID: 0} 501 | switchIcons_10: {fileID: 0} 502 | switchIcons_11: {fileID: 0} 503 | switchIcons_12: {fileID: 0} 504 | switchIcons_13: {fileID: 0} 505 | switchIcons_14: {fileID: 0} 506 | switchSmallIcons_0: {fileID: 0} 507 | switchSmallIcons_1: {fileID: 0} 508 | switchSmallIcons_2: {fileID: 0} 509 | switchSmallIcons_3: {fileID: 0} 510 | switchSmallIcons_4: {fileID: 0} 511 | switchSmallIcons_5: {fileID: 0} 512 | switchSmallIcons_6: {fileID: 0} 513 | switchSmallIcons_7: {fileID: 0} 514 | switchSmallIcons_8: {fileID: 0} 515 | switchSmallIcons_9: {fileID: 0} 516 | switchSmallIcons_10: {fileID: 0} 517 | switchSmallIcons_11: {fileID: 0} 518 | switchSmallIcons_12: {fileID: 0} 519 | switchSmallIcons_13: {fileID: 0} 520 | switchSmallIcons_14: {fileID: 0} 521 | switchManualHTML: 522 | switchAccessibleURLs: 523 | switchLegalInformation: 524 | switchMainThreadStackSize: 1048576 525 | switchPresenceGroupId: 526 | switchLogoHandling: 0 527 | switchReleaseVersion: 0 528 | switchDisplayVersion: 1.0.0 529 | switchStartupUserAccount: 0 530 | switchTouchScreenUsage: 0 531 | switchSupportedLanguagesMask: 0 532 | switchLogoType: 0 533 | switchApplicationErrorCodeCategory: 534 | switchUserAccountSaveDataSize: 0 535 | switchUserAccountSaveDataJournalSize: 0 536 | switchApplicationAttribute: 0 537 | switchCardSpecSize: -1 538 | switchCardSpecClock: -1 539 | switchRatingsMask: 0 540 | switchRatingsInt_0: 0 541 | switchRatingsInt_1: 0 542 | switchRatingsInt_2: 0 543 | switchRatingsInt_3: 0 544 | switchRatingsInt_4: 0 545 | switchRatingsInt_5: 0 546 | switchRatingsInt_6: 0 547 | switchRatingsInt_7: 0 548 | switchRatingsInt_8: 0 549 | switchRatingsInt_9: 0 550 | switchRatingsInt_10: 0 551 | switchRatingsInt_11: 0 552 | switchRatingsInt_12: 0 553 | switchLocalCommunicationIds_0: 554 | switchLocalCommunicationIds_1: 555 | switchLocalCommunicationIds_2: 556 | switchLocalCommunicationIds_3: 557 | switchLocalCommunicationIds_4: 558 | switchLocalCommunicationIds_5: 559 | switchLocalCommunicationIds_6: 560 | switchLocalCommunicationIds_7: 561 | switchParentalControl: 0 562 | switchAllowsScreenshot: 1 563 | switchAllowsVideoCapturing: 1 564 | switchAllowsRuntimeAddOnContentInstall: 0 565 | switchDataLossConfirmation: 0 566 | switchUserAccountLockEnabled: 0 567 | switchSystemResourceMemory: 16777216 568 | switchSupportedNpadStyles: 22 569 | switchNativeFsCacheSize: 32 570 | switchIsHoldTypeHorizontal: 0 571 | switchSupportedNpadCount: 8 572 | switchSocketConfigEnabled: 0 573 | switchTcpInitialSendBufferSize: 32 574 | switchTcpInitialReceiveBufferSize: 64 575 | switchTcpAutoSendBufferSizeMax: 256 576 | switchTcpAutoReceiveBufferSizeMax: 256 577 | switchUdpSendBufferSize: 9 578 | switchUdpReceiveBufferSize: 42 579 | switchSocketBufferEfficiency: 4 580 | switchSocketInitializeEnabled: 1 581 | switchNetworkInterfaceManagerInitializeEnabled: 1 582 | switchPlayerConnectionEnabled: 1 583 | ps4NPAgeRating: 12 584 | ps4NPTitleSecret: 585 | ps4NPTrophyPackPath: 586 | ps4ParentalLevel: 11 587 | ps4ContentID: ED1633-NPXX51362_00-0000000000000000 588 | ps4Category: 0 589 | ps4MasterVersion: 01.00 590 | ps4AppVersion: 01.00 591 | ps4AppType: 0 592 | ps4ParamSfxPath: 593 | ps4VideoOutPixelFormat: 0 594 | ps4VideoOutInitialWidth: 1920 595 | ps4VideoOutBaseModeInitialWidth: 1920 596 | ps4VideoOutReprojectionRate: 60 597 | ps4PronunciationXMLPath: 598 | ps4PronunciationSIGPath: 599 | ps4BackgroundImagePath: 600 | ps4StartupImagePath: 601 | ps4StartupImagesFolder: 602 | ps4IconImagesFolder: 603 | ps4SaveDataImagePath: 604 | ps4SdkOverride: 605 | ps4BGMPath: 606 | ps4ShareFilePath: 607 | ps4ShareOverlayImagePath: 608 | ps4PrivacyGuardImagePath: 609 | ps4ExtraSceSysFile: 610 | ps4NPtitleDatPath: 611 | ps4RemotePlayKeyAssignment: -1 612 | ps4RemotePlayKeyMappingDir: 613 | ps4PlayTogetherPlayerCount: 0 614 | ps4EnterButtonAssignment: 1 615 | ps4ApplicationParam1: 0 616 | ps4ApplicationParam2: 0 617 | ps4ApplicationParam3: 0 618 | ps4ApplicationParam4: 0 619 | ps4DownloadDataSize: 0 620 | ps4GarlicHeapSize: 2048 621 | ps4ProGarlicHeapSize: 2560 622 | playerPrefsMaxSize: 32768 623 | ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ 624 | ps4pnSessions: 1 625 | ps4pnPresence: 1 626 | ps4pnFriends: 1 627 | ps4pnGameCustomData: 1 628 | playerPrefsSupport: 0 629 | enableApplicationExit: 0 630 | resetTempFolder: 1 631 | restrictedAudioUsageRights: 0 632 | ps4UseResolutionFallback: 0 633 | ps4ReprojectionSupport: 0 634 | ps4UseAudio3dBackend: 0 635 | ps4UseLowGarlicFragmentationMode: 1 636 | ps4SocialScreenEnabled: 0 637 | ps4ScriptOptimizationLevel: 0 638 | ps4Audio3dVirtualSpeakerCount: 14 639 | ps4attribCpuUsage: 0 640 | ps4PatchPkgPath: 641 | ps4PatchLatestPkgPath: 642 | ps4PatchChangeinfoPath: 643 | ps4PatchDayOne: 0 644 | ps4attribUserManagement: 0 645 | ps4attribMoveSupport: 0 646 | ps4attrib3DSupport: 0 647 | ps4attribShareSupport: 0 648 | ps4attribExclusiveVR: 0 649 | ps4disableAutoHideSplash: 0 650 | ps4videoRecordingFeaturesUsed: 0 651 | ps4contentSearchFeaturesUsed: 0 652 | ps4CompatibilityPS5: 0 653 | ps4GPU800MHz: 1 654 | ps4attribEyeToEyeDistanceSettingVR: 0 655 | ps4IncludedModules: [] 656 | ps4attribVROutputEnabled: 0 657 | monoEnv: 658 | splashScreenBackgroundSourceLandscape: {fileID: 0} 659 | splashScreenBackgroundSourcePortrait: {fileID: 0} 660 | blurSplashScreenBackground: 1 661 | spritePackerPolicy: 662 | webGLMemorySize: 16 663 | webGLExceptionSupport: 1 664 | webGLNameFilesAsHashes: 0 665 | webGLDataCaching: 1 666 | webGLDebugSymbols: 0 667 | webGLEmscriptenArgs: 668 | webGLModulesDirectory: 669 | webGLTemplate: APPLICATION:Default 670 | webGLAnalyzeBuildSize: 0 671 | webGLUseEmbeddedResources: 0 672 | webGLCompressionFormat: 1 673 | webGLLinkerTarget: 1 674 | webGLThreadsSupport: 0 675 | webGLWasmStreaming: 0 676 | scriptingDefineSymbols: {} 677 | platformArchitecture: {} 678 | scriptingBackend: {} 679 | il2cppCompilerConfiguration: {} 680 | managedStrippingLevel: {} 681 | incrementalIl2cppBuild: {} 682 | allowUnsafeCode: 0 683 | additionalIl2CppArgs: 684 | scriptingRuntimeVersion: 1 685 | gcIncremental: 0 686 | gcWBarrierValidation: 0 687 | apiCompatibilityLevelPerPlatform: {} 688 | m_RenderingPath: 1 689 | m_MobileRenderingPath: 1 690 | metroPackageName: Template_3D 691 | metroPackageVersion: 692 | metroCertificatePath: 693 | metroCertificatePassword: 694 | metroCertificateSubject: 695 | metroCertificateIssuer: 696 | metroCertificateNotAfter: 0000000000000000 697 | metroApplicationDescription: Template_3D 698 | wsaImages: {} 699 | metroTileShortName: 700 | metroTileShowName: 0 701 | metroMediumTileShowName: 0 702 | metroLargeTileShowName: 0 703 | metroWideTileShowName: 0 704 | metroSupportStreamingInstall: 0 705 | metroLastRequiredScene: 0 706 | metroDefaultTileSize: 1 707 | metroTileForegroundText: 2 708 | metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} 709 | metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, 710 | a: 1} 711 | metroSplashScreenUseBackgroundColor: 0 712 | platformCapabilities: {} 713 | metroTargetDeviceFamilies: {} 714 | metroFTAName: 715 | metroFTAFileTypes: [] 716 | metroProtocolName: 717 | XboxOneProductId: 718 | XboxOneUpdateKey: 719 | XboxOneSandboxId: 720 | XboxOneContentId: 721 | XboxOneTitleId: 722 | XboxOneSCId: 723 | XboxOneGameOsOverridePath: 724 | XboxOnePackagingOverridePath: 725 | XboxOneAppManifestOverridePath: 726 | XboxOneVersion: 1.0.0.0 727 | XboxOnePackageEncryption: 0 728 | XboxOnePackageUpdateGranularity: 2 729 | XboxOneDescription: 730 | XboxOneLanguage: 731 | - enus 732 | XboxOneCapability: [] 733 | XboxOneGameRating: {} 734 | XboxOneIsContentPackage: 0 735 | XboxOneEnableGPUVariability: 1 736 | XboxOneSockets: {} 737 | XboxOneSplashScreen: {fileID: 0} 738 | XboxOneAllowedProductIds: [] 739 | XboxOnePersistentLocalStorageSize: 0 740 | XboxOneXTitleMemory: 8 741 | XboxOneOverrideIdentityName: 742 | XboxOneOverrideIdentityPublisher: 743 | vrEditorSettings: 744 | daydream: 745 | daydreamIconForeground: {fileID: 0} 746 | daydreamIconBackground: {fileID: 0} 747 | cloudServicesEnabled: 748 | UNet: 1 749 | luminIcon: 750 | m_Name: 751 | m_ModelFolderPath: 752 | m_PortalFolderPath: 753 | luminCert: 754 | m_CertPath: 755 | m_SignPackage: 1 756 | luminIsChannelApp: 0 757 | luminVersion: 758 | m_VersionCode: 1 759 | m_VersionName: 760 | apiCompatibilityLevel: 6 761 | cloudProjectId: 762 | framebufferDepthMemorylessMode: 0 763 | projectName: 764 | organizationId: 765 | cloudEnabled: 0 766 | enableNativePlatformBackendsForNewInputSystem: 0 767 | disableOldInputManagerSupport: 0 768 | legacyClampBlendShapeWeights: 0 769 | -------------------------------------------------------------------------------- /SocketServer/ProjectSettings/ProjectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!129 &1 4 | PlayerSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 20 7 | productGUID: a694642d54427d14090ce5eda89cc508 8 | AndroidProfiler: 0 9 | AndroidFilterTouchesWhenObscured: 0 10 | AndroidEnableSustainedPerformanceMode: 0 11 | defaultScreenOrientation: 4 12 | targetDevice: 2 13 | useOnDemandResources: 0 14 | accelerometerFrequency: 60 15 | companyName: DefaultCompany 16 | productName: SocketServer 17 | m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} 18 | m_ShowUnitySplashScreen: 1 19 | m_ShowUnitySplashLogo: 1 20 | m_SplashScreenOverlayOpacity: 1 21 | m_SplashScreenAnimation: 1 22 | m_SplashScreenLogoStyle: 1 23 | m_SplashScreenDrawMode: 0 24 | m_SplashScreenBackgroundAnimationZoom: 1 25 | m_SplashScreenLogoAnimationZoom: 1 26 | m_SplashScreenBackgroundLandscapeAspect: 1 27 | m_SplashScreenBackgroundPortraitAspect: 1 28 | m_SplashScreenBackgroundLandscapeUvs: 29 | serializedVersion: 2 30 | x: 0 31 | y: 0 32 | width: 1 33 | height: 1 34 | m_SplashScreenBackgroundPortraitUvs: 35 | serializedVersion: 2 36 | x: 0 37 | y: 0 38 | width: 1 39 | height: 1 40 | m_SplashScreenLogos: [] 41 | m_VirtualRealitySplashScreen: {fileID: 0} 42 | m_ShowUnitySplashAds: 0 43 | m_AdsAndroidGameId: 44 | m_AdsIosGameId: 45 | m_ShowSplashAdsSlogan: 0 46 | m_SloganImage: {fileID: 0} 47 | m_SloganHeight: 150 48 | defaultCursor: {fileID: 0} 49 | cursorHotspot: {x: 0, y: 0} 50 | m_HolographicTrackingLossScreen: {fileID: 0} 51 | defaultScreenWidth: 1024 52 | defaultScreenHeight: 768 53 | defaultScreenWidthWeb: 960 54 | defaultScreenHeightWeb: 600 55 | m_StereoRenderingPath: 0 56 | m_ActiveColorSpace: 0 57 | m_MTRendering: 1 58 | m_StackTraceTypes: 010000000100000001000000010000000100000001000000 59 | iosShowActivityIndicatorOnLoading: -1 60 | androidShowActivityIndicatorOnLoading: -1 61 | iosUseCustomAppBackgroundBehavior: 0 62 | iosAllowHTTPDownload: 1 63 | allowedAutorotateToPortrait: 1 64 | allowedAutorotateToPortraitUpsideDown: 1 65 | allowedAutorotateToLandscapeRight: 1 66 | allowedAutorotateToLandscapeLeft: 1 67 | useOSAutorotation: 1 68 | use32BitDisplayBuffer: 1 69 | preserveFramebufferAlpha: 0 70 | disableDepthAndStencilBuffers: 0 71 | androidStartInFullscreen: 1 72 | androidRenderOutsideSafeArea: 1 73 | androidUseSwappy: 0 74 | androidBlitType: 0 75 | defaultIsNativeResolution: 1 76 | macRetinaSupport: 1 77 | runInBackground: 1 78 | captureSingleScreen: 0 79 | muteOtherAudioSources: 0 80 | Prepare IOS For Recording: 0 81 | Force IOS Speakers When Recording: 0 82 | deferSystemGesturesMode: 0 83 | hideHomeButton: 0 84 | submitAnalytics: 1 85 | usePlayerLog: 1 86 | bakeCollisionMeshes: 0 87 | forceSingleInstance: 0 88 | useFlipModelSwapchain: 1 89 | resizableWindow: 0 90 | useMacAppStoreValidation: 0 91 | macAppStoreCategory: public.app-category.games 92 | gpuSkinning: 1 93 | xboxPIXTextureCapture: 0 94 | xboxEnableAvatar: 0 95 | xboxEnableKinect: 0 96 | xboxEnableKinectAutoTracking: 0 97 | xboxEnableFitness: 0 98 | visibleInBackground: 1 99 | allowFullscreenSwitch: 1 100 | fullscreenMode: 1 101 | xboxSpeechDB: 0 102 | xboxEnableHeadOrientation: 0 103 | xboxEnableGuest: 0 104 | xboxEnablePIXSampling: 0 105 | metalFramebufferOnly: 0 106 | xboxOneResolution: 0 107 | xboxOneSResolution: 0 108 | xboxOneXResolution: 3 109 | xboxOneMonoLoggingLevel: 0 110 | xboxOneLoggingLevel: 1 111 | xboxOneDisableEsram: 0 112 | xboxOneEnableTypeOptimization: 0 113 | xboxOnePresentImmediateThreshold: 0 114 | switchQueueCommandMemory: 0 115 | switchQueueControlMemory: 16384 116 | switchQueueComputeMemory: 262144 117 | switchNVNShaderPoolsGranularity: 33554432 118 | switchNVNDefaultPoolsGranularity: 16777216 119 | switchNVNOtherPoolsGranularity: 16777216 120 | switchNVNMaxPublicTextureIDCount: 0 121 | switchNVNMaxPublicSamplerIDCount: 0 122 | stadiaPresentMode: 0 123 | stadiaTargetFramerate: 0 124 | vulkanNumSwapchainBuffers: 3 125 | vulkanEnableSetSRGBWrite: 0 126 | vulkanEnableLateAcquireNextImage: 0 127 | useSecurityBuild: 0 128 | m_SupportedAspectRatios: 129 | 4:3: 1 130 | 5:4: 1 131 | 16:10: 1 132 | 16:9: 1 133 | Others: 1 134 | bundleVersion: 0.1 135 | preloadedAssets: [] 136 | metroInputSource: 0 137 | wsaTransparentSwapchain: 0 138 | m_HolographicPauseOnTrackingLoss: 1 139 | xboxOneDisableKinectGpuReservation: 1 140 | xboxOneEnable7thCore: 1 141 | vrSettings: 142 | cardboard: 143 | depthFormat: 0 144 | enableTransitionView: 0 145 | daydream: 146 | depthFormat: 0 147 | useSustainedPerformanceMode: 0 148 | enableVideoLayer: 0 149 | useProtectedVideoMemory: 0 150 | minimumSupportedHeadTracking: 0 151 | maximumSupportedHeadTracking: 1 152 | hololens: 153 | depthFormat: 1 154 | depthBufferSharingEnabled: 1 155 | lumin: 156 | depthFormat: 0 157 | frameTiming: 2 158 | enableGLCache: 0 159 | glCacheMaxBlobSize: 524288 160 | glCacheMaxFileSize: 8388608 161 | oculus: 162 | sharedDepthBuffer: 1 163 | dashSupport: 1 164 | lowOverheadMode: 0 165 | protectedContext: 0 166 | v2Signing: 1 167 | enable360StereoCapture: 0 168 | isWsaHolographicRemotingEnabled: 0 169 | enableFrameTimingStats: 0 170 | useHDRDisplay: 0 171 | D3DHDRBitDepth: 0 172 | m_ColorGamuts: 00000000 173 | targetPixelDensity: 30 174 | resolutionScalingMode: 0 175 | androidSupportedAspectRatio: 1 176 | androidMaxAspectRatio: 2.1 177 | applicationIdentifier: {} 178 | buildNumber: {} 179 | AndroidBundleVersionCode: 1 180 | AndroidMinSdkVersion: 19 181 | AndroidTargetSdkVersion: 0 182 | AndroidPreferredInstallLocation: 1 183 | aotOptions: 184 | stripEngineCode: 1 185 | iPhoneStrippingLevel: 0 186 | iPhoneScriptCallOptimization: 0 187 | ForceInternetPermission: 0 188 | ForceSDCardPermission: 0 189 | CreateWallpaper: 0 190 | APKExpansionFiles: 0 191 | keepLoadedShadersAlive: 0 192 | StripUnusedMeshComponents: 1 193 | VertexChannelCompressionMask: 4054 194 | iPhoneSdkVersion: 988 195 | iOSTargetOSVersionString: 10.0 196 | tvOSSdkVersion: 0 197 | tvOSRequireExtendedGameController: 0 198 | tvOSTargetOSVersionString: 10.0 199 | uIPrerenderedIcon: 0 200 | uIRequiresPersistentWiFi: 0 201 | uIRequiresFullScreen: 1 202 | uIStatusBarHidden: 1 203 | uIExitOnSuspend: 0 204 | uIStatusBarStyle: 0 205 | appleTVSplashScreen: {fileID: 0} 206 | appleTVSplashScreen2x: {fileID: 0} 207 | tvOSSmallIconLayers: [] 208 | tvOSSmallIconLayers2x: [] 209 | tvOSLargeIconLayers: [] 210 | tvOSLargeIconLayers2x: [] 211 | tvOSTopShelfImageLayers: [] 212 | tvOSTopShelfImageLayers2x: [] 213 | tvOSTopShelfImageWideLayers: [] 214 | tvOSTopShelfImageWideLayers2x: [] 215 | iOSLaunchScreenType: 0 216 | iOSLaunchScreenPortrait: {fileID: 0} 217 | iOSLaunchScreenLandscape: {fileID: 0} 218 | iOSLaunchScreenBackgroundColor: 219 | serializedVersion: 2 220 | rgba: 0 221 | iOSLaunchScreenFillPct: 100 222 | iOSLaunchScreenSize: 100 223 | iOSLaunchScreenCustomXibPath: 224 | iOSLaunchScreeniPadType: 0 225 | iOSLaunchScreeniPadImage: {fileID: 0} 226 | iOSLaunchScreeniPadBackgroundColor: 227 | serializedVersion: 2 228 | rgba: 0 229 | iOSLaunchScreeniPadFillPct: 100 230 | iOSLaunchScreeniPadSize: 100 231 | iOSLaunchScreeniPadCustomXibPath: 232 | iOSUseLaunchScreenStoryboard: 0 233 | iOSLaunchScreenCustomStoryboardPath: 234 | iOSDeviceRequirements: [] 235 | iOSURLSchemes: [] 236 | iOSBackgroundModes: 0 237 | iOSMetalForceHardShadows: 0 238 | metalEditorSupport: 1 239 | metalAPIValidation: 1 240 | iOSRenderExtraFrameOnPause: 0 241 | appleDeveloperTeamID: 242 | iOSManualSigningProvisioningProfileID: 243 | tvOSManualSigningProvisioningProfileID: 244 | iOSManualSigningProvisioningProfileType: 0 245 | tvOSManualSigningProvisioningProfileType: 0 246 | appleEnableAutomaticSigning: 0 247 | iOSRequireARKit: 0 248 | iOSAutomaticallyDetectAndAddCapabilities: 1 249 | appleEnableProMotion: 0 250 | clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea 251 | templatePackageId: com.unity.template.3d@4.2.8 252 | templateDefaultScene: Assets/Scenes/SampleScene.unity 253 | AndroidTargetArchitectures: 1 254 | AndroidSplashScreenScale: 0 255 | androidSplashScreen: {fileID: 0} 256 | AndroidKeystoreName: 257 | AndroidKeyaliasName: 258 | AndroidBuildApkPerCpuArchitecture: 0 259 | AndroidTVCompatibility: 0 260 | AndroidIsGame: 1 261 | AndroidEnableTango: 0 262 | androidEnableBanner: 1 263 | androidUseLowAccuracyLocation: 0 264 | androidUseCustomKeystore: 0 265 | m_AndroidBanners: 266 | - width: 320 267 | height: 180 268 | banner: {fileID: 0} 269 | androidGamepadSupportLevel: 0 270 | AndroidValidateAppBundleSize: 1 271 | AndroidAppBundleSizeToValidate: 150 272 | m_BuildTargetIcons: [] 273 | m_BuildTargetPlatformIcons: 274 | - m_BuildTarget: Android 275 | m_Icons: 276 | - m_Textures: [] 277 | m_Width: 432 278 | m_Height: 432 279 | m_Kind: 2 280 | m_SubKind: 281 | - m_Textures: [] 282 | m_Width: 324 283 | m_Height: 324 284 | m_Kind: 2 285 | m_SubKind: 286 | - m_Textures: [] 287 | m_Width: 216 288 | m_Height: 216 289 | m_Kind: 2 290 | m_SubKind: 291 | - m_Textures: [] 292 | m_Width: 162 293 | m_Height: 162 294 | m_Kind: 2 295 | m_SubKind: 296 | - m_Textures: [] 297 | m_Width: 108 298 | m_Height: 108 299 | m_Kind: 2 300 | m_SubKind: 301 | - m_Textures: [] 302 | m_Width: 81 303 | m_Height: 81 304 | m_Kind: 2 305 | m_SubKind: 306 | - m_Textures: [] 307 | m_Width: 192 308 | m_Height: 192 309 | m_Kind: 0 310 | m_SubKind: 311 | - m_Textures: [] 312 | m_Width: 144 313 | m_Height: 144 314 | m_Kind: 0 315 | m_SubKind: 316 | - m_Textures: [] 317 | m_Width: 96 318 | m_Height: 96 319 | m_Kind: 0 320 | m_SubKind: 321 | - m_Textures: [] 322 | m_Width: 72 323 | m_Height: 72 324 | m_Kind: 0 325 | m_SubKind: 326 | - m_Textures: [] 327 | m_Width: 48 328 | m_Height: 48 329 | m_Kind: 0 330 | m_SubKind: 331 | - m_Textures: [] 332 | m_Width: 36 333 | m_Height: 36 334 | m_Kind: 0 335 | m_SubKind: 336 | - m_Textures: [] 337 | m_Width: 192 338 | m_Height: 192 339 | m_Kind: 1 340 | m_SubKind: 341 | - m_Textures: [] 342 | m_Width: 144 343 | m_Height: 144 344 | m_Kind: 1 345 | m_SubKind: 346 | - m_Textures: [] 347 | m_Width: 96 348 | m_Height: 96 349 | m_Kind: 1 350 | m_SubKind: 351 | - m_Textures: [] 352 | m_Width: 72 353 | m_Height: 72 354 | m_Kind: 1 355 | m_SubKind: 356 | - m_Textures: [] 357 | m_Width: 48 358 | m_Height: 48 359 | m_Kind: 1 360 | m_SubKind: 361 | - m_Textures: [] 362 | m_Width: 36 363 | m_Height: 36 364 | m_Kind: 1 365 | m_SubKind: 366 | m_BuildTargetBatching: 367 | - m_BuildTarget: Standalone 368 | m_StaticBatching: 1 369 | m_DynamicBatching: 0 370 | - m_BuildTarget: tvOS 371 | m_StaticBatching: 1 372 | m_DynamicBatching: 0 373 | - m_BuildTarget: Android 374 | m_StaticBatching: 1 375 | m_DynamicBatching: 0 376 | - m_BuildTarget: iPhone 377 | m_StaticBatching: 1 378 | m_DynamicBatching: 0 379 | - m_BuildTarget: WebGL 380 | m_StaticBatching: 0 381 | m_DynamicBatching: 0 382 | m_BuildTargetEncrypting: [] 383 | m_BuildTargetGraphicsJobs: 384 | - m_BuildTarget: MacStandaloneSupport 385 | m_GraphicsJobs: 0 386 | - m_BuildTarget: Switch 387 | m_GraphicsJobs: 1 388 | - m_BuildTarget: MetroSupport 389 | m_GraphicsJobs: 1 390 | - m_BuildTarget: AppleTVSupport 391 | m_GraphicsJobs: 0 392 | - m_BuildTarget: BJMSupport 393 | m_GraphicsJobs: 1 394 | - m_BuildTarget: LinuxStandaloneSupport 395 | m_GraphicsJobs: 1 396 | - m_BuildTarget: PS4Player 397 | m_GraphicsJobs: 1 398 | - m_BuildTarget: iOSSupport 399 | m_GraphicsJobs: 0 400 | - m_BuildTarget: WindowsStandaloneSupport 401 | m_GraphicsJobs: 1 402 | - m_BuildTarget: XboxOnePlayer 403 | m_GraphicsJobs: 1 404 | - m_BuildTarget: LuminSupport 405 | m_GraphicsJobs: 0 406 | - m_BuildTarget: AndroidPlayer 407 | m_GraphicsJobs: 0 408 | - m_BuildTarget: WebGLSupport 409 | m_GraphicsJobs: 0 410 | m_BuildTargetGraphicsJobMode: 411 | - m_BuildTarget: PS4Player 412 | m_GraphicsJobMode: 0 413 | - m_BuildTarget: XboxOnePlayer 414 | m_GraphicsJobMode: 0 415 | m_BuildTargetGraphicsAPIs: 416 | - m_BuildTarget: AndroidPlayer 417 | m_APIs: 150000000b000000 418 | m_Automatic: 0 419 | - m_BuildTarget: iOSSupport 420 | m_APIs: 10000000 421 | m_Automatic: 1 422 | - m_BuildTarget: AppleTVSupport 423 | m_APIs: 10000000 424 | m_Automatic: 0 425 | - m_BuildTarget: WebGLSupport 426 | m_APIs: 0b000000 427 | m_Automatic: 1 428 | m_BuildTargetVRSettings: 429 | - m_BuildTarget: Standalone 430 | m_Enabled: 0 431 | m_Devices: 432 | - Oculus 433 | - OpenVR 434 | openGLRequireES31: 0 435 | openGLRequireES31AEP: 0 436 | openGLRequireES32: 0 437 | m_TemplateCustomTags: {} 438 | mobileMTRendering: 439 | Android: 1 440 | iPhone: 1 441 | tvOS: 1 442 | m_BuildTargetGroupLightmapEncodingQuality: [] 443 | m_BuildTargetGroupLightmapSettings: [] 444 | playModeTestRunnerEnabled: 0 445 | runPlayModeTestAsEditModeTest: 0 446 | actionOnDotNetUnhandledException: 1 447 | enableInternalProfiler: 0 448 | logObjCUncaughtExceptions: 1 449 | enableCrashReportAPI: 0 450 | cameraUsageDescription: 451 | locationUsageDescription: 452 | microphoneUsageDescription: 453 | switchNetLibKey: 454 | switchSocketMemoryPoolSize: 6144 455 | switchSocketAllocatorPoolSize: 128 456 | switchSocketConcurrencyLimit: 14 457 | switchScreenResolutionBehavior: 2 458 | switchUseCPUProfiler: 0 459 | switchApplicationID: 0x01004b9000490000 460 | switchNSODependencies: 461 | switchTitleNames_0: 462 | switchTitleNames_1: 463 | switchTitleNames_2: 464 | switchTitleNames_3: 465 | switchTitleNames_4: 466 | switchTitleNames_5: 467 | switchTitleNames_6: 468 | switchTitleNames_7: 469 | switchTitleNames_8: 470 | switchTitleNames_9: 471 | switchTitleNames_10: 472 | switchTitleNames_11: 473 | switchTitleNames_12: 474 | switchTitleNames_13: 475 | switchTitleNames_14: 476 | switchPublisherNames_0: 477 | switchPublisherNames_1: 478 | switchPublisherNames_2: 479 | switchPublisherNames_3: 480 | switchPublisherNames_4: 481 | switchPublisherNames_5: 482 | switchPublisherNames_6: 483 | switchPublisherNames_7: 484 | switchPublisherNames_8: 485 | switchPublisherNames_9: 486 | switchPublisherNames_10: 487 | switchPublisherNames_11: 488 | switchPublisherNames_12: 489 | switchPublisherNames_13: 490 | switchPublisherNames_14: 491 | switchIcons_0: {fileID: 0} 492 | switchIcons_1: {fileID: 0} 493 | switchIcons_2: {fileID: 0} 494 | switchIcons_3: {fileID: 0} 495 | switchIcons_4: {fileID: 0} 496 | switchIcons_5: {fileID: 0} 497 | switchIcons_6: {fileID: 0} 498 | switchIcons_7: {fileID: 0} 499 | switchIcons_8: {fileID: 0} 500 | switchIcons_9: {fileID: 0} 501 | switchIcons_10: {fileID: 0} 502 | switchIcons_11: {fileID: 0} 503 | switchIcons_12: {fileID: 0} 504 | switchIcons_13: {fileID: 0} 505 | switchIcons_14: {fileID: 0} 506 | switchSmallIcons_0: {fileID: 0} 507 | switchSmallIcons_1: {fileID: 0} 508 | switchSmallIcons_2: {fileID: 0} 509 | switchSmallIcons_3: {fileID: 0} 510 | switchSmallIcons_4: {fileID: 0} 511 | switchSmallIcons_5: {fileID: 0} 512 | switchSmallIcons_6: {fileID: 0} 513 | switchSmallIcons_7: {fileID: 0} 514 | switchSmallIcons_8: {fileID: 0} 515 | switchSmallIcons_9: {fileID: 0} 516 | switchSmallIcons_10: {fileID: 0} 517 | switchSmallIcons_11: {fileID: 0} 518 | switchSmallIcons_12: {fileID: 0} 519 | switchSmallIcons_13: {fileID: 0} 520 | switchSmallIcons_14: {fileID: 0} 521 | switchManualHTML: 522 | switchAccessibleURLs: 523 | switchLegalInformation: 524 | switchMainThreadStackSize: 1048576 525 | switchPresenceGroupId: 526 | switchLogoHandling: 0 527 | switchReleaseVersion: 0 528 | switchDisplayVersion: 1.0.0 529 | switchStartupUserAccount: 0 530 | switchTouchScreenUsage: 0 531 | switchSupportedLanguagesMask: 0 532 | switchLogoType: 0 533 | switchApplicationErrorCodeCategory: 534 | switchUserAccountSaveDataSize: 0 535 | switchUserAccountSaveDataJournalSize: 0 536 | switchApplicationAttribute: 0 537 | switchCardSpecSize: -1 538 | switchCardSpecClock: -1 539 | switchRatingsMask: 0 540 | switchRatingsInt_0: 0 541 | switchRatingsInt_1: 0 542 | switchRatingsInt_2: 0 543 | switchRatingsInt_3: 0 544 | switchRatingsInt_4: 0 545 | switchRatingsInt_5: 0 546 | switchRatingsInt_6: 0 547 | switchRatingsInt_7: 0 548 | switchRatingsInt_8: 0 549 | switchRatingsInt_9: 0 550 | switchRatingsInt_10: 0 551 | switchRatingsInt_11: 0 552 | switchRatingsInt_12: 0 553 | switchLocalCommunicationIds_0: 554 | switchLocalCommunicationIds_1: 555 | switchLocalCommunicationIds_2: 556 | switchLocalCommunicationIds_3: 557 | switchLocalCommunicationIds_4: 558 | switchLocalCommunicationIds_5: 559 | switchLocalCommunicationIds_6: 560 | switchLocalCommunicationIds_7: 561 | switchParentalControl: 0 562 | switchAllowsScreenshot: 1 563 | switchAllowsVideoCapturing: 1 564 | switchAllowsRuntimeAddOnContentInstall: 0 565 | switchDataLossConfirmation: 0 566 | switchUserAccountLockEnabled: 0 567 | switchSystemResourceMemory: 16777216 568 | switchSupportedNpadStyles: 22 569 | switchNativeFsCacheSize: 32 570 | switchIsHoldTypeHorizontal: 0 571 | switchSupportedNpadCount: 8 572 | switchSocketConfigEnabled: 0 573 | switchTcpInitialSendBufferSize: 32 574 | switchTcpInitialReceiveBufferSize: 64 575 | switchTcpAutoSendBufferSizeMax: 256 576 | switchTcpAutoReceiveBufferSizeMax: 256 577 | switchUdpSendBufferSize: 9 578 | switchUdpReceiveBufferSize: 42 579 | switchSocketBufferEfficiency: 4 580 | switchSocketInitializeEnabled: 1 581 | switchNetworkInterfaceManagerInitializeEnabled: 1 582 | switchPlayerConnectionEnabled: 1 583 | ps4NPAgeRating: 12 584 | ps4NPTitleSecret: 585 | ps4NPTrophyPackPath: 586 | ps4ParentalLevel: 11 587 | ps4ContentID: ED1633-NPXX51362_00-0000000000000000 588 | ps4Category: 0 589 | ps4MasterVersion: 01.00 590 | ps4AppVersion: 01.00 591 | ps4AppType: 0 592 | ps4ParamSfxPath: 593 | ps4VideoOutPixelFormat: 0 594 | ps4VideoOutInitialWidth: 1920 595 | ps4VideoOutBaseModeInitialWidth: 1920 596 | ps4VideoOutReprojectionRate: 60 597 | ps4PronunciationXMLPath: 598 | ps4PronunciationSIGPath: 599 | ps4BackgroundImagePath: 600 | ps4StartupImagePath: 601 | ps4StartupImagesFolder: 602 | ps4IconImagesFolder: 603 | ps4SaveDataImagePath: 604 | ps4SdkOverride: 605 | ps4BGMPath: 606 | ps4ShareFilePath: 607 | ps4ShareOverlayImagePath: 608 | ps4PrivacyGuardImagePath: 609 | ps4ExtraSceSysFile: 610 | ps4NPtitleDatPath: 611 | ps4RemotePlayKeyAssignment: -1 612 | ps4RemotePlayKeyMappingDir: 613 | ps4PlayTogetherPlayerCount: 0 614 | ps4EnterButtonAssignment: 1 615 | ps4ApplicationParam1: 0 616 | ps4ApplicationParam2: 0 617 | ps4ApplicationParam3: 0 618 | ps4ApplicationParam4: 0 619 | ps4DownloadDataSize: 0 620 | ps4GarlicHeapSize: 2048 621 | ps4ProGarlicHeapSize: 2560 622 | playerPrefsMaxSize: 32768 623 | ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ 624 | ps4pnSessions: 1 625 | ps4pnPresence: 1 626 | ps4pnFriends: 1 627 | ps4pnGameCustomData: 1 628 | playerPrefsSupport: 0 629 | enableApplicationExit: 0 630 | resetTempFolder: 1 631 | restrictedAudioUsageRights: 0 632 | ps4UseResolutionFallback: 0 633 | ps4ReprojectionSupport: 0 634 | ps4UseAudio3dBackend: 0 635 | ps4UseLowGarlicFragmentationMode: 1 636 | ps4SocialScreenEnabled: 0 637 | ps4ScriptOptimizationLevel: 0 638 | ps4Audio3dVirtualSpeakerCount: 14 639 | ps4attribCpuUsage: 0 640 | ps4PatchPkgPath: 641 | ps4PatchLatestPkgPath: 642 | ps4PatchChangeinfoPath: 643 | ps4PatchDayOne: 0 644 | ps4attribUserManagement: 0 645 | ps4attribMoveSupport: 0 646 | ps4attrib3DSupport: 0 647 | ps4attribShareSupport: 0 648 | ps4attribExclusiveVR: 0 649 | ps4disableAutoHideSplash: 0 650 | ps4videoRecordingFeaturesUsed: 0 651 | ps4contentSearchFeaturesUsed: 0 652 | ps4CompatibilityPS5: 0 653 | ps4GPU800MHz: 1 654 | ps4attribEyeToEyeDistanceSettingVR: 0 655 | ps4IncludedModules: [] 656 | ps4attribVROutputEnabled: 0 657 | monoEnv: 658 | splashScreenBackgroundSourceLandscape: {fileID: 0} 659 | splashScreenBackgroundSourcePortrait: {fileID: 0} 660 | blurSplashScreenBackground: 1 661 | spritePackerPolicy: 662 | webGLMemorySize: 16 663 | webGLExceptionSupport: 1 664 | webGLNameFilesAsHashes: 0 665 | webGLDataCaching: 1 666 | webGLDebugSymbols: 0 667 | webGLEmscriptenArgs: 668 | webGLModulesDirectory: 669 | webGLTemplate: APPLICATION:Default 670 | webGLAnalyzeBuildSize: 0 671 | webGLUseEmbeddedResources: 0 672 | webGLCompressionFormat: 1 673 | webGLLinkerTarget: 1 674 | webGLThreadsSupport: 0 675 | webGLWasmStreaming: 0 676 | scriptingDefineSymbols: {} 677 | platformArchitecture: {} 678 | scriptingBackend: {} 679 | il2cppCompilerConfiguration: {} 680 | managedStrippingLevel: {} 681 | incrementalIl2cppBuild: {} 682 | allowUnsafeCode: 0 683 | additionalIl2CppArgs: 684 | scriptingRuntimeVersion: 1 685 | gcIncremental: 0 686 | gcWBarrierValidation: 0 687 | apiCompatibilityLevelPerPlatform: {} 688 | m_RenderingPath: 1 689 | m_MobileRenderingPath: 1 690 | metroPackageName: Template_3D 691 | metroPackageVersion: 692 | metroCertificatePath: 693 | metroCertificatePassword: 694 | metroCertificateSubject: 695 | metroCertificateIssuer: 696 | metroCertificateNotAfter: 0000000000000000 697 | metroApplicationDescription: Template_3D 698 | wsaImages: {} 699 | metroTileShortName: 700 | metroTileShowName: 0 701 | metroMediumTileShowName: 0 702 | metroLargeTileShowName: 0 703 | metroWideTileShowName: 0 704 | metroSupportStreamingInstall: 0 705 | metroLastRequiredScene: 0 706 | metroDefaultTileSize: 1 707 | metroTileForegroundText: 2 708 | metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} 709 | metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, 710 | a: 1} 711 | metroSplashScreenUseBackgroundColor: 0 712 | platformCapabilities: {} 713 | metroTargetDeviceFamilies: {} 714 | metroFTAName: 715 | metroFTAFileTypes: [] 716 | metroProtocolName: 717 | XboxOneProductId: 718 | XboxOneUpdateKey: 719 | XboxOneSandboxId: 720 | XboxOneContentId: 721 | XboxOneTitleId: 722 | XboxOneSCId: 723 | XboxOneGameOsOverridePath: 724 | XboxOnePackagingOverridePath: 725 | XboxOneAppManifestOverridePath: 726 | XboxOneVersion: 1.0.0.0 727 | XboxOnePackageEncryption: 0 728 | XboxOnePackageUpdateGranularity: 2 729 | XboxOneDescription: 730 | XboxOneLanguage: 731 | - enus 732 | XboxOneCapability: [] 733 | XboxOneGameRating: {} 734 | XboxOneIsContentPackage: 0 735 | XboxOneEnableGPUVariability: 1 736 | XboxOneSockets: {} 737 | XboxOneSplashScreen: {fileID: 0} 738 | XboxOneAllowedProductIds: [] 739 | XboxOnePersistentLocalStorageSize: 0 740 | XboxOneXTitleMemory: 8 741 | XboxOneOverrideIdentityName: 742 | XboxOneOverrideIdentityPublisher: 743 | vrEditorSettings: 744 | daydream: 745 | daydreamIconForeground: {fileID: 0} 746 | daydreamIconBackground: {fileID: 0} 747 | cloudServicesEnabled: 748 | UNet: 1 749 | luminIcon: 750 | m_Name: 751 | m_ModelFolderPath: 752 | m_PortalFolderPath: 753 | luminCert: 754 | m_CertPath: 755 | m_SignPackage: 1 756 | luminIsChannelApp: 0 757 | luminVersion: 758 | m_VersionCode: 1 759 | m_VersionName: 760 | apiCompatibilityLevel: 6 761 | cloudProjectId: 762 | framebufferDepthMemorylessMode: 0 763 | projectName: 764 | organizationId: 765 | cloudEnabled: 0 766 | enableNativePlatformBackendsForNewInputSystem: 0 767 | disableOldInputManagerSupport: 0 768 | legacyClampBlendShapeWeights: 0 769 | --------------------------------------------------------------------------------