├── .gitignore
├── Assets
├── Scenes.meta
├── Scenes
│ ├── SampleScene.unity
│ └── SampleScene.unity.meta
├── Scripts.meta
└── Scripts
│ ├── DownloadFile.cs
│ ├── DownloadFile.cs.meta
│ ├── Main.cs
│ └── Main.cs.meta
├── ProjectSettings
├── AudioManager.asset
├── ClusterInputManager.asset
├── DynamicsManager.asset
├── EditorBuildSettings.asset
├── EditorSettings.asset
├── GraphicsSettings.asset
├── InputManager.asset
├── NavMeshAreas.asset
├── NetworkManager.asset
├── Physics2DSettings.asset
├── PresetManager.asset
├── ProjectSettings.asset
├── ProjectVersion.txt
├── QualitySettings.asset
├── TagManager.asset
├── TimeManager.asset
├── UnityConnectSettings.asset
└── VFXManager.asset
└── README.md
/.gitignore:
--------------------------------------------------------------------------------
1 | Packages/
2 | Library/
3 | *.log
4 | Temp/
5 | .vscode/settings.json
6 | obj/
7 | *.csproj
8 | *.sln
9 |
--------------------------------------------------------------------------------
/Assets/Scenes.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 9a46231ce1dc0914487523ea70cb05ee
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/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.37311953, g: 0.38074014, b: 0.3587274, a: 1}
42 | m_UseRadianceAmbientProbe: 0
43 | --- !u!157 &3
44 | LightmapSettings:
45 | m_ObjectHideFlags: 0
46 | serializedVersion: 11
47 | m_GIWorkflowMode: 0
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: 10
58 | m_Resolution: 2
59 | m_BakeResolution: 10
60 | m_AtlasSize: 512
61 | m_AO: 0
62 | m_AOMaxDistance: 1
63 | m_CompAOExponent: 1
64 | m_CompAOExponentDirect: 0
65 | m_Padding: 2
66 | m_LightmapParameters: {fileID: 0}
67 | m_LightmapsBakeMode: 1
68 | m_TextureCompression: 1
69 | m_FinalGather: 0
70 | m_FinalGatherFiltering: 1
71 | m_FinalGatherRayCount: 256
72 | m_ReflectionCompression: 2
73 | m_MixedBakeMode: 2
74 | m_BakeBackend: 1
75 | m_PVRSampling: 1
76 | m_PVRDirectSampleCount: 32
77 | m_PVRSampleCount: 256
78 | m_PVRBounces: 2
79 | m_PVRFilterTypeDirect: 0
80 | m_PVRFilterTypeIndirect: 0
81 | m_PVRFilterTypeAO: 0
82 | m_PVRFilteringMode: 1
83 | m_PVRCulling: 1
84 | m_PVRFilteringGaussRadiusDirect: 1
85 | m_PVRFilteringGaussRadiusIndirect: 5
86 | m_PVRFilteringGaussRadiusAO: 2
87 | m_PVRFilteringAtrousPositionSigmaDirect: 0.5
88 | m_PVRFilteringAtrousPositionSigmaIndirect: 2
89 | m_PVRFilteringAtrousPositionSigmaAO: 1
90 | m_ShowResolutionOverlay: 1
91 | m_LightingDataAsset: {fileID: 0}
92 | m_UseShadowmask: 1
93 | --- !u!196 &4
94 | NavMeshSettings:
95 | serializedVersion: 2
96 | m_ObjectHideFlags: 0
97 | m_BuildSettings:
98 | serializedVersion: 2
99 | agentTypeID: 0
100 | agentRadius: 0.5
101 | agentHeight: 2
102 | agentSlope: 45
103 | agentClimb: 0.4
104 | ledgeDropHeight: 0
105 | maxJumpAcrossDistance: 0
106 | minRegionArea: 2
107 | manualCellSize: 0
108 | cellSize: 0.16666667
109 | manualTileSize: 0
110 | tileSize: 256
111 | accuratePlacement: 0
112 | debug:
113 | m_Flags: 0
114 | m_NavMeshData: {fileID: 0}
115 | --- !u!1 &534669902
116 | GameObject:
117 | m_ObjectHideFlags: 0
118 | m_CorrespondingSourceObject: {fileID: 0}
119 | m_PrefabInstance: {fileID: 0}
120 | m_PrefabAsset: {fileID: 0}
121 | serializedVersion: 6
122 | m_Component:
123 | - component: {fileID: 534669905}
124 | - component: {fileID: 534669904}
125 | - component: {fileID: 534669903}
126 | - component: {fileID: 534669906}
127 | m_Layer: 0
128 | m_Name: Main Camera
129 | m_TagString: MainCamera
130 | m_Icon: {fileID: 0}
131 | m_NavMeshLayer: 0
132 | m_StaticEditorFlags: 0
133 | m_IsActive: 1
134 | --- !u!81 &534669903
135 | AudioListener:
136 | m_ObjectHideFlags: 0
137 | m_CorrespondingSourceObject: {fileID: 0}
138 | m_PrefabInstance: {fileID: 0}
139 | m_PrefabAsset: {fileID: 0}
140 | m_GameObject: {fileID: 534669902}
141 | m_Enabled: 1
142 | --- !u!20 &534669904
143 | Camera:
144 | m_ObjectHideFlags: 0
145 | m_CorrespondingSourceObject: {fileID: 0}
146 | m_PrefabInstance: {fileID: 0}
147 | m_PrefabAsset: {fileID: 0}
148 | m_GameObject: {fileID: 534669902}
149 | m_Enabled: 1
150 | serializedVersion: 2
151 | m_ClearFlags: 1
152 | m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
153 | m_projectionMatrixMode: 1
154 | m_SensorSize: {x: 36, y: 24}
155 | m_LensShift: {x: 0, y: 0}
156 | m_GateFitMode: 2
157 | m_FocalLength: 50
158 | m_NormalizedViewPortRect:
159 | serializedVersion: 2
160 | x: 0
161 | y: 0
162 | width: 1
163 | height: 1
164 | near clip plane: 0.3
165 | far clip plane: 1000
166 | field of view: 60
167 | orthographic: 0
168 | orthographic size: 5
169 | m_Depth: -1
170 | m_CullingMask:
171 | serializedVersion: 2
172 | m_Bits: 4294967295
173 | m_RenderingPath: -1
174 | m_TargetTexture: {fileID: 0}
175 | m_TargetDisplay: 0
176 | m_TargetEye: 3
177 | m_HDR: 1
178 | m_AllowMSAA: 1
179 | m_AllowDynamicResolution: 0
180 | m_ForceIntoRT: 0
181 | m_OcclusionCulling: 1
182 | m_StereoConvergence: 10
183 | m_StereoSeparation: 0.022
184 | --- !u!4 &534669905
185 | Transform:
186 | m_ObjectHideFlags: 0
187 | m_CorrespondingSourceObject: {fileID: 0}
188 | m_PrefabInstance: {fileID: 0}
189 | m_PrefabAsset: {fileID: 0}
190 | m_GameObject: {fileID: 534669902}
191 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
192 | m_LocalPosition: {x: 0, y: 1, z: -10}
193 | m_LocalScale: {x: 1, y: 1, z: 1}
194 | m_Children: []
195 | m_Father: {fileID: 0}
196 | m_RootOrder: 0
197 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
198 | --- !u!114 &534669906
199 | MonoBehaviour:
200 | m_ObjectHideFlags: 0
201 | m_CorrespondingSourceObject: {fileID: 0}
202 | m_PrefabInstance: {fileID: 0}
203 | m_PrefabAsset: {fileID: 0}
204 | m_GameObject: {fileID: 534669902}
205 | m_Enabled: 1
206 | m_EditorHideFlags: 0
207 | m_Script: {fileID: 11500000, guid: dd4d49e9f58696841b6a20e2a11531ab, type: 3}
208 | m_Name:
209 | m_EditorClassIdentifier:
210 |
--------------------------------------------------------------------------------
/Assets/Scenes/SampleScene.unity.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: b14ec4fc1d398904c8f2b37164045ce6
3 | DefaultImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Assets/Scripts.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 5b35cb55e92fc134d816841df1d87855
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Assets/Scripts/DownloadFile.cs:
--------------------------------------------------------------------------------
1 |
2 | using System;
3 | using System.Net;
4 | using System.Threading;
5 | using System.IO;
6 |
7 | public class DownloadFile
8 | {
9 | ///
10 | /// 主线程
11 | ///
12 | private SynchronizationContext _mainThreadSynContext;
13 |
14 | ///
15 | /// 下载网址
16 | ///
17 | public string Url;
18 |
19 | public event Action OnError;
20 |
21 | private static object errorlock = new object();
22 |
23 | ///
24 | /// 主要用于关闭线程
25 | ///
26 | private bool _isDownload = false;
27 | public DownloadFile(string url)
28 | {
29 | // 主线程赋值
30 | _mainThreadSynContext = SynchronizationContext.Current;
31 | // 突破Http协议的并发连接数限制
32 | System.Net.ServicePointManager.DefaultConnectionLimit = 512;
33 |
34 | Url = url;
35 | }
36 | ///
37 | /// 查询文件大小
38 | ///
39 | ///
40 | public long GetFileSize()
41 | {
42 | HttpWebRequest request;
43 | HttpWebResponse response;
44 | try
45 | {
46 | request = (HttpWebRequest)HttpWebRequest.CreateHttp(new Uri(Url));
47 | request.Method = "HEAD";
48 | response = (HttpWebResponse)request.GetResponse();
49 | // 获得文件长度
50 | long contentLength = response.ContentLength;
51 |
52 | response.Close();
53 | request.Abort();
54 |
55 | return contentLength;
56 | }
57 | catch (Exception ex)
58 | {
59 | onError(ex);
60 | // throw;
61 | return -1;
62 | }
63 | }
64 | ///
65 | /// 异步查询文件大小
66 | ///
67 | ///
68 | public void GetFileSizeAsyn(Action onTrigger = null)
69 | {
70 | ThreadStart threadStart = new ThreadStart(() =>
71 | {
72 | PostMainThreadAction(onTrigger, GetFileSize());
73 | });
74 | Thread thread = new Thread(threadStart);
75 | thread.Start();
76 | }
77 | ///
78 | /// 多线程下载文件至本地
79 | ///
80 | /// 线程总数
81 | /// 保存文件路径
82 | /// 下载过程回调(已下载文件大小、总文件大小)
83 | /// 下载完毕回调(下载文件数据)
84 | public void DownloadToFile(int threadCount, string filePath, Action onDownloading = null, Action onTrigger = null)
85 | {
86 | _isDownload = true;
87 |
88 | long csize = 0; //已下载大小
89 | int ocnt = 0; //完成线程数
90 |
91 |
92 | // 下载逻辑
93 | GetFileSizeAsyn((size) =>
94 | {
95 | if (size == -1) return;
96 | // 准备工作
97 | var tempFilePaths = new string[threadCount];
98 | var tempFileFileStreams = new FileStream[threadCount];
99 | var dirPath = Path.GetDirectoryName(filePath);
100 | var fileName = Path.GetFileName(filePath);
101 | // 下载根目录不存在则创建
102 | if (!Directory.Exists(dirPath))
103 | {
104 | Directory.CreateDirectory(dirPath);
105 | }
106 | // 查看下载临时文件是否可以继续断点续传
107 | var fileInfos = new DirectoryInfo(dirPath).GetFiles(fileName + "*.temp");
108 | if (fileInfos.Length != threadCount)
109 | {
110 | // 下载临时文件数量不相同,则清理
111 | foreach (var info in fileInfos)
112 | {
113 | info.Delete();
114 | }
115 | }
116 | // 创建下载临时文件,并创建文件流
117 | for (int i = 0; i < threadCount; i++)
118 | {
119 | tempFilePaths[i] = filePath + i + ".temp";
120 | if (!File.Exists(tempFilePaths[i]))
121 | {
122 | File.Create(tempFilePaths[i]).Dispose();
123 | }
124 | tempFileFileStreams[i] = File.OpenWrite(tempFilePaths[i]);
125 | tempFileFileStreams[i].Seek(tempFileFileStreams[i].Length, System.IO.SeekOrigin.Current);
126 |
127 | csize += tempFileFileStreams[i].Length;
128 | }
129 | // 单线程下载过程回调函数
130 | Action t_onDownloading = (index, rsize, rbytes, data) =>
131 | {
132 | csize += rsize;
133 | tempFileFileStreams[index].Write(rbytes, 0, (int)rsize);
134 | PostMainThreadAction(onDownloading, csize, size);
135 | };
136 | // 单线程下载完毕回调函数
137 | Action t_onTrigger = (index, data) =>
138 | {
139 | // 关闭文件流
140 | tempFileFileStreams[index].Close();
141 | ocnt++;
142 | if (ocnt >= threadCount)
143 | {
144 | // 将临时文件转为下载文件
145 | if (!File.Exists(filePath))
146 | {
147 | File.Create(filePath).Dispose();
148 | }
149 | else
150 | {
151 | File.WriteAllBytes(filePath, new byte[] { });
152 | }
153 | FileStream fs = File.OpenWrite(filePath);
154 | fs.Seek(fs.Length, System.IO.SeekOrigin.Current);
155 | foreach (var tempPath in tempFilePaths)
156 | {
157 | var tempData = File.ReadAllBytes(tempPath);
158 | fs.Write(tempData, 0, tempData.Length);
159 | File.Delete(tempPath);
160 | }
161 | fs.Close();
162 | PostMainThreadAction(onTrigger, File.ReadAllBytes(filePath));
163 | }
164 | };
165 | // 分割文件尺寸,多线程下载
166 | long[] sizes = SplitFileSize(size, threadCount);
167 | for (int i = 0; i < sizes.Length; i = i + 2)
168 | {
169 | long from = sizes[i];
170 | long to = sizes[i + 1];
171 |
172 | // 断点续传
173 | from += tempFileFileStreams[i / 2].Length;
174 | if (from >= to)
175 | {
176 | t_onTrigger(i / 2, null);
177 | continue;
178 | }
179 |
180 | _threadDownload(i / 2, from, to, t_onDownloading, t_onTrigger);
181 | }
182 | });
183 | }
184 | ///
185 | /// 多线程下载文件至内存
186 | ///
187 | /// 线程总数
188 | /// 下载过程回调(已下载文件大小、总文件大小)
189 | /// 下载完毕回调(下载文件数据)
190 | public void DownloadToMemory(int threadCount, Action onDownloading = null, Action onTrigger = null)
191 | {
192 | _isDownload = true;
193 |
194 | long csize = 0; // 已下载大小
195 | int ocnt = 0; // 完成线程数
196 | byte[] cdata; // 已下载数据
197 | // 下载逻辑
198 | GetFileSizeAsyn((size) =>
199 | {
200 | cdata = new byte[size];
201 | // 单线程下载过程回调函数
202 | Action t_onDownloading = (index, rsize, rbytes, data) =>
203 | {
204 | csize += rsize;
205 | PostMainThreadAction(onDownloading, csize, size);
206 | };
207 | // 单线程下载完毕回调函数
208 | Action t_onTrigger = (index, data) =>
209 | {
210 | long dIndex = (long)Math.Ceiling((double)(size * index / threadCount));
211 | Array.Copy(data, 0, cdata, dIndex, data.Length);
212 |
213 | ocnt++;
214 | if (ocnt >= threadCount)
215 | {
216 | PostMainThreadAction(onTrigger, cdata);
217 | }
218 | };
219 | // 分割文件尺寸,多线程下载
220 | long[] sizes = SplitFileSize(size, threadCount);
221 | for (int i = 0; i < sizes.Length; i = i + 2)
222 | {
223 | long from = sizes[i];
224 | long to = sizes[i + 1];
225 | _threadDownload(i / 2, from, to, t_onDownloading, t_onTrigger);
226 | }
227 | });
228 | }
229 | ///
230 | /// 单线程下载
231 | ///
232 | /// 线程ID
233 | /// 下载起始位置
234 | /// 下载结束位置
235 | /// 下载过程回调(线程ID、单次下载数据大小、单次下载数据缓存区、已下载文件数据)
236 | /// 下载完毕回调(线程ID、下载文件数据)
237 | private void _threadDownload(int index, long from, long to, Action onDownloading = null, Action onTrigger = null)
238 | {
239 | Thread thread = new Thread(new ThreadStart(() =>
240 | {
241 | try
242 | {
243 | var request = (HttpWebRequest)HttpWebRequest.Create(new Uri(Url));
244 | request.AddRange(from, to);
245 |
246 | HttpWebResponse response = (HttpWebResponse)request.GetResponse();
247 | Stream ns = response.GetResponseStream();
248 |
249 | byte[] rbytes = new byte[8 * 1024];
250 | int rSize = 0;
251 | MemoryStream ms = new MemoryStream();
252 | while (true)
253 | {
254 | if (!_isDownload) return;
255 | rSize = ns.Read(rbytes, 0, rbytes.Length);
256 | if (rSize <= 0) break;
257 | ms.Write(rbytes, 0, rSize);
258 | if (onDownloading != null) onDownloading(index, rSize, rbytes, ms.ToArray());
259 | }
260 |
261 | ns.Close();
262 | response.Close();
263 | request.Abort();
264 |
265 | if (ms.Length == (to - from) + 1)
266 | {
267 | if (onTrigger != null) onTrigger(index, ms.ToArray());
268 | }
269 | else
270 | {
271 | lock (errorlock)
272 | {
273 | if (_isDownload)
274 | {
275 | onError(new Exception("文件大小校验不通过"));
276 | }
277 | }
278 | }
279 |
280 | }
281 | catch (Exception ex)
282 | {
283 | onError(ex);
284 | }
285 |
286 |
287 | }));
288 | thread.Start();
289 | }
290 |
291 | public void Close()
292 | {
293 | _isDownload = false;
294 | }
295 |
296 | ///
297 | /// 分割文件大小
298 | ///
299 | ///
300 | private long[] SplitFileSize(long size, int count)
301 | {
302 | long[] result = new long[count * 2];
303 | for (int i = 0; i < count; i++)
304 | {
305 | long from = (long)Math.Ceiling((double)(size * i / count));
306 | long to = (long)Math.Ceiling((double)(size * (i + 1) / count)) - 1;
307 | result[i * 2] = from;
308 | result[i * 2 + 1] = to;
309 | }
310 |
311 | return result;
312 | }
313 |
314 | private void onError(Exception ex)
315 | {
316 | Close();
317 | PostMainThreadAction(OnError, ex);
318 | }
319 |
320 | ///
321 | /// 通知主线程回调
322 | ///
323 | private void PostMainThreadAction(Action action)
324 | {
325 | _mainThreadSynContext.Post(new SendOrPostCallback((o) =>
326 | {
327 | Action e = (Action)o.GetType().GetProperty("action").GetValue(o);
328 | if (e != null) e();
329 | }), new { action = action });
330 | }
331 | private void PostMainThreadAction(Action action, T arg1)
332 | {
333 | _mainThreadSynContext.Post(new SendOrPostCallback((o) =>
334 | {
335 | Action e = (Action)o.GetType().GetProperty("action").GetValue(o);
336 | T t1 = (T)o.GetType().GetProperty("arg1").GetValue(o);
337 | if (e != null) e(t1);
338 | }), new { action = action, arg1 = arg1 });
339 | }
340 | public void PostMainThreadAction(Action action, T1 arg1, T2 arg2)
341 | {
342 | _mainThreadSynContext.Post(new SendOrPostCallback((o) =>
343 | {
344 | Action e = (Action)o.GetType().GetProperty("action").GetValue(o);
345 | T1 t1 = (T1)o.GetType().GetProperty("arg1").GetValue(o);
346 | T2 t2 = (T2)o.GetType().GetProperty("arg2").GetValue(o);
347 | if (e != null) e(t1, t2);
348 | }), new { action = action, arg1 = arg1, arg2 = arg2 });
349 | }
350 | public void PostMainThreadAction(Action action, T1 arg1, T2 arg2, T3 arg3)
351 | {
352 | _mainThreadSynContext.Post(new SendOrPostCallback((o) =>
353 | {
354 | Action e = (Action)o.GetType().GetProperty("action").GetValue(o);
355 | T1 t1 = (T1)o.GetType().GetProperty("arg1").GetValue(o);
356 | T2 t2 = (T2)o.GetType().GetProperty("arg2").GetValue(o);
357 | T3 t3 = (T3)o.GetType().GetProperty("arg3").GetValue(o);
358 | if (e != null) e(t1, t2, t3);
359 | }), new { action = action, arg1 = arg1, arg2 = arg2, arg3 = arg3 });
360 | }
361 | public void PostMainThreadAction(Action action, T1 arg1, T2 arg2, T3 arg3, T4 arg4)
362 | {
363 | _mainThreadSynContext.Post(new SendOrPostCallback((o) =>
364 | {
365 | Action e = (Action)o.GetType().GetProperty("action").GetValue(o);
366 | T1 t1 = (T1)o.GetType().GetProperty("arg1").GetValue(o);
367 | T2 t2 = (T2)o.GetType().GetProperty("arg2").GetValue(o);
368 | T3 t3 = (T3)o.GetType().GetProperty("arg3").GetValue(o);
369 | T4 t4 = (T4)o.GetType().GetProperty("arg4").GetValue(o);
370 | if (e != null) e(t1, t2, t3, t4);
371 | }), new { action = action, arg1 = arg1, arg2 = arg2, arg3 = arg3, arg4 = arg4 });
372 | }
373 | }
374 |
--------------------------------------------------------------------------------
/Assets/Scripts/DownloadFile.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 441555b29375575459337f1ecbacf2d0
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Assets/Scripts/Main.cs:
--------------------------------------------------------------------------------
1 | using System.Collections;
2 | using System.Collections.Generic;
3 | using UnityEngine;
4 |
5 | public class Main : MonoBehaviour
6 | {
7 | private DownloadFile _downloadFile;
8 | // Start is called before the first frame update
9 |
10 | void Start()
11 | {
12 | var savePath = System.IO.Path.Combine(Application.dataPath, "../SaveFiles");
13 | string filePath;
14 | // var url = "https://dlc2.pconline.com.cn/filedown_1117483_12749837/gFETfFfp/pconline1552198052014.zip";
15 | // var url = "https://down.sandai.net/thunder11/XunLeiWebSetup11.2.4.1750dl.exe";
16 | var url = "http://127.0.0.1/Download/111.exe";
17 |
18 | _downloadFile = new DownloadFile(url);
19 |
20 | _downloadFile.OnError += (ex) =>
21 | {
22 | UnityEngine.Debug.Log("捕获异常 >>> " + ex);
23 | };
24 |
25 |
26 | // 多线程下载文件至内存 无法断点续传
27 | // filePath = System.IO.Path.Combine(savePath, "./多线程下载至内存.exe");
28 | // _downloadFile.DownloadToMemory(
29 | // 4,
30 | // (size, count) =>
31 | // {
32 | // UnityEngine.Debug.LogFormat("[{0}]下载进度 >>> {1}/{2}", "多线程下载至内存", size, count);
33 | // },
34 | // (data) =>
35 | // {
36 | // UnityEngine.Debug.LogFormat("[{0}]下载完毕>>>{1}", "多线程下载至内存", data.Length);
37 |
38 | // // 下载至内存后保存到文件
39 | // if (!System.IO.File.Exists(filePath))
40 | // {
41 | // System.IO.File.Create(filePath).Dispose();
42 | // }
43 | // System.IO.File.WriteAllBytes(filePath, data);
44 |
45 | // }
46 | // );
47 |
48 | // 多线程下载文件至本地 支持断点续传
49 | filePath = System.IO.Path.Combine(savePath, "./多线程下载至本地.exe");
50 | _downloadFile.DownloadToFile(
51 | 4,
52 | filePath,
53 | (size, count) =>
54 | {
55 | UnityEngine.Debug.LogFormat("[{0}]下载进度 >>> {1}/{2}", "多线程下载至本地", size, count);
56 | },
57 | (data) =>
58 | {
59 | UnityEngine.Debug.LogFormat("[{0}]下载完毕>>>{1}", "多线程下载至本地", data.Length);
60 | }
61 | );
62 |
63 | }
64 |
65 | private void OnDestroy()
66 | {
67 | _downloadFile.Close();
68 | }
69 |
70 | }
71 |
72 |
73 |
--------------------------------------------------------------------------------
/Assets/Scripts/Main.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: dd4d49e9f58696841b6a20e2a11531ab
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/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 | m_Volume: 1
7 | Rolloff Scale: 1
8 | Doppler Factor: 1
9 | Default Speaker Mode: 2
10 | m_SampleRate: 0
11 | m_DSPBufferSize: 1024
12 | m_VirtualVoiceCount: 512
13 | m_RealVoiceCount: 32
14 | m_SpatializerPlugin:
15 | m_AmbisonicDecoderPlugin:
16 | m_DisableAudio: 0
17 | m_VirtualizeEffects: 1
18 |
--------------------------------------------------------------------------------
/ProjectSettings/ClusterInputManager.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!236 &1
4 | ClusterInputManager:
5 | m_ObjectHideFlags: 0
6 | m_Inputs: []
7 |
--------------------------------------------------------------------------------
/ProjectSettings/DynamicsManager.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!55 &1
4 | PhysicsManager:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 8
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 |
--------------------------------------------------------------------------------
/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 | m_configObjects: {}
9 |
--------------------------------------------------------------------------------
/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: 7
7 | m_ExternalVersionControlSupport: Visible Meta Files
8 | m_SerializationMode: 2
9 | m_LineEndingsForNewScripts: 2
10 | m_DefaultBehaviorMode: 0
11 | m_SpritePackerMode: 0
12 | m_SpritePackerPaddingPower: 1
13 | m_EtcTextureCompressorBehavior: 1
14 | m_EtcTextureFastCompressor: 1
15 | m_EtcTextureNormalCompressor: 2
16 | m_EtcTextureBestCompressor: 4
17 | m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd
18 | m_ProjectGenerationRootNamespace:
19 | m_UserGeneratedProjectSuffix:
20 | m_CollabEditorSettings:
21 | inProgressEnabled: 1
22 |
--------------------------------------------------------------------------------
/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: 12
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: 10783, guid: 0000000000000000f000000000000000, type: 0}
39 | m_PreloadedShaders: []
40 | m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000,
41 | type: 0}
42 | m_CustomRenderPipeline: {fileID: 0}
43 | m_TransparencySortMode: 0
44 | m_TransparencySortAxis: {x: 0, y: 0, z: 1}
45 | m_DefaultRenderingPath: 1
46 | m_DefaultMobileRenderingPath: 1
47 | m_TierSettings: []
48 | m_LightmapStripping: 0
49 | m_FogStripping: 0
50 | m_InstancingStripping: 0
51 | m_LightmapKeepPlain: 1
52 | m_LightmapKeepDirCombined: 1
53 | m_LightmapKeepDynamicPlain: 1
54 | m_LightmapKeepDynamicDirCombined: 1
55 | m_LightmapKeepShadowMask: 1
56 | m_LightmapKeepSubtractive: 1
57 | m_FogKeepLinear: 1
58 | m_FogKeepExp: 1
59 | m_FogKeepExp2: 1
60 | m_AlbedoSwatchInfos: []
61 | m_LightsUseLinearIntensity: 0
62 | m_LightsUseColorTemperature: 0
63 |
--------------------------------------------------------------------------------
/ProjectSettings/InputManager.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!13 &1
4 | InputManager:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 2
7 | m_Axes:
8 | - serializedVersion: 3
9 | m_Name: Horizontal
10 | descriptiveName:
11 | descriptiveNegativeName:
12 | negativeButton: left
13 | positiveButton: right
14 | altNegativeButton: a
15 | altPositiveButton: d
16 | gravity: 3
17 | dead: 0.001
18 | sensitivity: 3
19 | snap: 1
20 | invert: 0
21 | type: 0
22 | axis: 0
23 | joyNum: 0
24 | - serializedVersion: 3
25 | m_Name: Vertical
26 | descriptiveName:
27 | descriptiveNegativeName:
28 | negativeButton: down
29 | positiveButton: up
30 | altNegativeButton: s
31 | altPositiveButton: w
32 | gravity: 3
33 | dead: 0.001
34 | sensitivity: 3
35 | snap: 1
36 | invert: 0
37 | type: 0
38 | axis: 0
39 | joyNum: 0
40 | - serializedVersion: 3
41 | m_Name: Fire1
42 | descriptiveName:
43 | descriptiveNegativeName:
44 | negativeButton:
45 | positiveButton: left ctrl
46 | altNegativeButton:
47 | altPositiveButton: mouse 0
48 | gravity: 1000
49 | dead: 0.001
50 | sensitivity: 1000
51 | snap: 0
52 | invert: 0
53 | type: 0
54 | axis: 0
55 | joyNum: 0
56 | - serializedVersion: 3
57 | m_Name: Fire2
58 | descriptiveName:
59 | descriptiveNegativeName:
60 | negativeButton:
61 | positiveButton: left alt
62 | altNegativeButton:
63 | altPositiveButton: mouse 1
64 | gravity: 1000
65 | dead: 0.001
66 | sensitivity: 1000
67 | snap: 0
68 | invert: 0
69 | type: 0
70 | axis: 0
71 | joyNum: 0
72 | - serializedVersion: 3
73 | m_Name: Fire3
74 | descriptiveName:
75 | descriptiveNegativeName:
76 | negativeButton:
77 | positiveButton: left shift
78 | altNegativeButton:
79 | altPositiveButton: mouse 2
80 | gravity: 1000
81 | dead: 0.001
82 | sensitivity: 1000
83 | snap: 0
84 | invert: 0
85 | type: 0
86 | axis: 0
87 | joyNum: 0
88 | - serializedVersion: 3
89 | m_Name: Jump
90 | descriptiveName:
91 | descriptiveNegativeName:
92 | negativeButton:
93 | positiveButton: space
94 | altNegativeButton:
95 | altPositiveButton:
96 | gravity: 1000
97 | dead: 0.001
98 | sensitivity: 1000
99 | snap: 0
100 | invert: 0
101 | type: 0
102 | axis: 0
103 | joyNum: 0
104 | - serializedVersion: 3
105 | m_Name: Mouse X
106 | descriptiveName:
107 | descriptiveNegativeName:
108 | negativeButton:
109 | positiveButton:
110 | altNegativeButton:
111 | altPositiveButton:
112 | gravity: 0
113 | dead: 0
114 | sensitivity: 0.1
115 | snap: 0
116 | invert: 0
117 | type: 1
118 | axis: 0
119 | joyNum: 0
120 | - serializedVersion: 3
121 | m_Name: Mouse Y
122 | descriptiveName:
123 | descriptiveNegativeName:
124 | negativeButton:
125 | positiveButton:
126 | altNegativeButton:
127 | altPositiveButton:
128 | gravity: 0
129 | dead: 0
130 | sensitivity: 0.1
131 | snap: 0
132 | invert: 0
133 | type: 1
134 | axis: 1
135 | joyNum: 0
136 | - serializedVersion: 3
137 | m_Name: Mouse ScrollWheel
138 | descriptiveName:
139 | descriptiveNegativeName:
140 | negativeButton:
141 | positiveButton:
142 | altNegativeButton:
143 | altPositiveButton:
144 | gravity: 0
145 | dead: 0
146 | sensitivity: 0.1
147 | snap: 0
148 | invert: 0
149 | type: 1
150 | axis: 2
151 | joyNum: 0
152 | - serializedVersion: 3
153 | m_Name: Horizontal
154 | descriptiveName:
155 | descriptiveNegativeName:
156 | negativeButton:
157 | positiveButton:
158 | altNegativeButton:
159 | altPositiveButton:
160 | gravity: 0
161 | dead: 0.19
162 | sensitivity: 1
163 | snap: 0
164 | invert: 0
165 | type: 2
166 | axis: 0
167 | joyNum: 0
168 | - serializedVersion: 3
169 | m_Name: Vertical
170 | descriptiveName:
171 | descriptiveNegativeName:
172 | negativeButton:
173 | positiveButton:
174 | altNegativeButton:
175 | altPositiveButton:
176 | gravity: 0
177 | dead: 0.19
178 | sensitivity: 1
179 | snap: 0
180 | invert: 1
181 | type: 2
182 | axis: 1
183 | joyNum: 0
184 | - serializedVersion: 3
185 | m_Name: Fire1
186 | descriptiveName:
187 | descriptiveNegativeName:
188 | negativeButton:
189 | positiveButton: joystick button 0
190 | altNegativeButton:
191 | altPositiveButton:
192 | gravity: 1000
193 | dead: 0.001
194 | sensitivity: 1000
195 | snap: 0
196 | invert: 0
197 | type: 0
198 | axis: 0
199 | joyNum: 0
200 | - serializedVersion: 3
201 | m_Name: Fire2
202 | descriptiveName:
203 | descriptiveNegativeName:
204 | negativeButton:
205 | positiveButton: joystick button 1
206 | altNegativeButton:
207 | altPositiveButton:
208 | gravity: 1000
209 | dead: 0.001
210 | sensitivity: 1000
211 | snap: 0
212 | invert: 0
213 | type: 0
214 | axis: 0
215 | joyNum: 0
216 | - serializedVersion: 3
217 | m_Name: Fire3
218 | descriptiveName:
219 | descriptiveNegativeName:
220 | negativeButton:
221 | positiveButton: joystick button 2
222 | altNegativeButton:
223 | altPositiveButton:
224 | gravity: 1000
225 | dead: 0.001
226 | sensitivity: 1000
227 | snap: 0
228 | invert: 0
229 | type: 0
230 | axis: 0
231 | joyNum: 0
232 | - serializedVersion: 3
233 | m_Name: Jump
234 | descriptiveName:
235 | descriptiveNegativeName:
236 | negativeButton:
237 | positiveButton: joystick button 3
238 | altNegativeButton:
239 | altPositiveButton:
240 | gravity: 1000
241 | dead: 0.001
242 | sensitivity: 1000
243 | snap: 0
244 | invert: 0
245 | type: 0
246 | axis: 0
247 | joyNum: 0
248 | - serializedVersion: 3
249 | m_Name: Submit
250 | descriptiveName:
251 | descriptiveNegativeName:
252 | negativeButton:
253 | positiveButton: return
254 | altNegativeButton:
255 | altPositiveButton: joystick button 0
256 | gravity: 1000
257 | dead: 0.001
258 | sensitivity: 1000
259 | snap: 0
260 | invert: 0
261 | type: 0
262 | axis: 0
263 | joyNum: 0
264 | - serializedVersion: 3
265 | m_Name: Submit
266 | descriptiveName:
267 | descriptiveNegativeName:
268 | negativeButton:
269 | positiveButton: enter
270 | altNegativeButton:
271 | altPositiveButton: space
272 | gravity: 1000
273 | dead: 0.001
274 | sensitivity: 1000
275 | snap: 0
276 | invert: 0
277 | type: 0
278 | axis: 0
279 | joyNum: 0
280 | - serializedVersion: 3
281 | m_Name: Cancel
282 | descriptiveName:
283 | descriptiveNegativeName:
284 | negativeButton:
285 | positiveButton: escape
286 | altNegativeButton:
287 | altPositiveButton: joystick button 1
288 | gravity: 1000
289 | dead: 0.001
290 | sensitivity: 1000
291 | snap: 0
292 | invert: 0
293 | type: 0
294 | axis: 0
295 | joyNum: 0
296 |
--------------------------------------------------------------------------------
/ProjectSettings/NavMeshAreas.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!126 &1
4 | NavMeshProjectSettings:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 2
7 | areas:
8 | - name: Walkable
9 | cost: 1
10 | - name: Not Walkable
11 | cost: 1
12 | - name: Jump
13 | cost: 2
14 | - name:
15 | cost: 1
16 | - name:
17 | cost: 1
18 | - name:
19 | cost: 1
20 | - name:
21 | cost: 1
22 | - name:
23 | cost: 1
24 | - name:
25 | cost: 1
26 | - name:
27 | cost: 1
28 | - name:
29 | cost: 1
30 | - name:
31 | cost: 1
32 | - name:
33 | cost: 1
34 | - name:
35 | cost: 1
36 | - name:
37 | cost: 1
38 | - name:
39 | cost: 1
40 | - name:
41 | cost: 1
42 | - name:
43 | cost: 1
44 | - name:
45 | cost: 1
46 | - name:
47 | cost: 1
48 | - name:
49 | cost: 1
50 | - name:
51 | cost: 1
52 | - name:
53 | cost: 1
54 | - name:
55 | cost: 1
56 | - name:
57 | cost: 1
58 | - name:
59 | cost: 1
60 | - name:
61 | cost: 1
62 | - name:
63 | cost: 1
64 | - name:
65 | cost: 1
66 | - name:
67 | cost: 1
68 | - name:
69 | cost: 1
70 | - name:
71 | cost: 1
72 | m_LastAgentTypeID: -887442657
73 | m_Settings:
74 | - serializedVersion: 2
75 | agentTypeID: 0
76 | agentRadius: 0.5
77 | agentHeight: 2
78 | agentSlope: 45
79 | agentClimb: 0.75
80 | ledgeDropHeight: 0
81 | maxJumpAcrossDistance: 0
82 | minRegionArea: 2
83 | manualCellSize: 0
84 | cellSize: 0.16666667
85 | manualTileSize: 0
86 | tileSize: 256
87 | accuratePlacement: 0
88 | debug:
89 | m_Flags: 0
90 | m_SettingNames:
91 | - Humanoid
92 |
--------------------------------------------------------------------------------
/ProjectSettings/NetworkManager.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!149 &1
4 | NetworkManager:
5 | m_ObjectHideFlags: 0
6 | m_DebugLevel: 0
7 | m_Sendrate: 15
8 | m_AssetToPrefab: {}
9 |
--------------------------------------------------------------------------------
/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_AutoSimulation: 1
23 | m_QueriesHitTriggers: 1
24 | m_QueriesStartInColliders: 1
25 | m_ChangeStopsCallbacks: 0
26 | m_CallbacksOnDisable: 1
27 | m_ReuseCollisionCallbacks: 1
28 | m_AutoSyncTransforms: 0
29 | m_AlwaysShowColliders: 0
30 | m_ShowColliderSleep: 1
31 | m_ShowColliderContacts: 0
32 | m_ShowColliderAABB: 0
33 | m_ContactArrowScale: 0.2
34 | m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412}
35 | m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432}
36 | m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745}
37 | m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804}
38 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
39 |
--------------------------------------------------------------------------------
/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 | m_DefaultList:
7 | - type:
8 | m_NativeTypeID: 108
9 | m_ManagedTypePPtr: {fileID: 0}
10 | m_ManagedTypeFallback:
11 | defaultPresets:
12 | - m_Preset: {fileID: 2655988077585873504, guid: c1cf8506f04ef2c4a88b64b6c4202eea,
13 | type: 2}
14 | - type:
15 | m_NativeTypeID: 1020
16 | m_ManagedTypePPtr: {fileID: 0}
17 | m_ManagedTypeFallback:
18 | defaultPresets:
19 | - m_Preset: {fileID: 2655988077585873504, guid: 0cd792cc87e492d43b4e95b205fc5cc6,
20 | type: 2}
21 | - type:
22 | m_NativeTypeID: 1006
23 | m_ManagedTypePPtr: {fileID: 0}
24 | m_ManagedTypeFallback:
25 | defaultPresets:
26 | - m_Preset: {fileID: 2655988077585873504, guid: 7a99f8aa944efe94cb9bd74562b7d5f9,
27 | type: 2}
28 |
--------------------------------------------------------------------------------
/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: 15
7 | productGUID: 0feecc25e68f4c243a019a68d900a690
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: DownloadFile
17 | defaultCursor: {fileID: 0}
18 | cursorHotspot: {x: 0, y: 0}
19 | m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1}
20 | m_ShowUnitySplashScreen: 1
21 | m_ShowUnitySplashLogo: 1
22 | m_SplashScreenOverlayOpacity: 1
23 | m_SplashScreenAnimation: 1
24 | m_SplashScreenLogoStyle: 1
25 | m_SplashScreenDrawMode: 0
26 | m_SplashScreenBackgroundAnimationZoom: 1
27 | m_SplashScreenLogoAnimationZoom: 1
28 | m_SplashScreenBackgroundLandscapeAspect: 1
29 | m_SplashScreenBackgroundPortraitAspect: 1
30 | m_SplashScreenBackgroundLandscapeUvs:
31 | serializedVersion: 2
32 | x: 0
33 | y: 0
34 | width: 1
35 | height: 1
36 | m_SplashScreenBackgroundPortraitUvs:
37 | serializedVersion: 2
38 | x: 0
39 | y: 0
40 | width: 1
41 | height: 1
42 | m_SplashScreenLogos: []
43 | m_VirtualRealitySplashScreen: {fileID: 0}
44 | m_HolographicTrackingLossScreen: {fileID: 0}
45 | defaultScreenWidth: 1024
46 | defaultScreenHeight: 768
47 | defaultScreenWidthWeb: 960
48 | defaultScreenHeightWeb: 600
49 | m_StereoRenderingPath: 0
50 | m_ActiveColorSpace: 0
51 | m_MTRendering: 1
52 | m_StackTraceTypes: 010000000100000001000000010000000100000001000000
53 | iosShowActivityIndicatorOnLoading: -1
54 | androidShowActivityIndicatorOnLoading: -1
55 | iosAppInBackgroundBehavior: 0
56 | displayResolutionDialog: 1
57 | iosAllowHTTPDownload: 1
58 | allowedAutorotateToPortrait: 1
59 | allowedAutorotateToPortraitUpsideDown: 1
60 | allowedAutorotateToLandscapeRight: 1
61 | allowedAutorotateToLandscapeLeft: 1
62 | useOSAutorotation: 1
63 | use32BitDisplayBuffer: 1
64 | preserveFramebufferAlpha: 0
65 | disableDepthAndStencilBuffers: 0
66 | androidStartInFullscreen: 1
67 | androidRenderOutsideSafeArea: 0
68 | androidBlitType: 0
69 | defaultIsNativeResolution: 1
70 | macRetinaSupport: 1
71 | runInBackground: 1
72 | captureSingleScreen: 0
73 | muteOtherAudioSources: 0
74 | Prepare IOS For Recording: 0
75 | Force IOS Speakers When Recording: 0
76 | deferSystemGesturesMode: 0
77 | hideHomeButton: 0
78 | submitAnalytics: 1
79 | usePlayerLog: 1
80 | bakeCollisionMeshes: 0
81 | forceSingleInstance: 0
82 | resizableWindow: 0
83 | useMacAppStoreValidation: 0
84 | macAppStoreCategory: public.app-category.games
85 | gpuSkinning: 1
86 | graphicsJobs: 0
87 | xboxPIXTextureCapture: 0
88 | xboxEnableAvatar: 0
89 | xboxEnableKinect: 0
90 | xboxEnableKinectAutoTracking: 0
91 | xboxEnableFitness: 0
92 | visibleInBackground: 1
93 | allowFullscreenSwitch: 1
94 | graphicsJobMode: 0
95 | fullscreenMode: 1
96 | xboxSpeechDB: 0
97 | xboxEnableHeadOrientation: 0
98 | xboxEnableGuest: 0
99 | xboxEnablePIXSampling: 0
100 | metalFramebufferOnly: 0
101 | xboxOneResolution: 0
102 | xboxOneSResolution: 0
103 | xboxOneXResolution: 3
104 | xboxOneMonoLoggingLevel: 0
105 | xboxOneLoggingLevel: 1
106 | xboxOneDisableEsram: 0
107 | xboxOnePresentImmediateThreshold: 0
108 | switchQueueCommandMemory: 0
109 | switchQueueControlMemory: 16384
110 | switchQueueComputeMemory: 262144
111 | switchNVNShaderPoolsGranularity: 33554432
112 | switchNVNDefaultPoolsGranularity: 16777216
113 | switchNVNOtherPoolsGranularity: 16777216
114 | vulkanEnableSetSRGBWrite: 0
115 | m_SupportedAspectRatios:
116 | 4:3: 1
117 | 5:4: 1
118 | 16:10: 1
119 | 16:9: 1
120 | Others: 1
121 | bundleVersion: 0.1
122 | preloadedAssets: []
123 | metroInputSource: 0
124 | wsaTransparentSwapchain: 0
125 | m_HolographicPauseOnTrackingLoss: 1
126 | xboxOneDisableKinectGpuReservation: 1
127 | xboxOneEnable7thCore: 1
128 | isWsaHolographicRemotingEnabled: 0
129 | vrSettings:
130 | cardboard:
131 | depthFormat: 0
132 | enableTransitionView: 0
133 | daydream:
134 | depthFormat: 0
135 | useSustainedPerformanceMode: 0
136 | enableVideoLayer: 0
137 | useProtectedVideoMemory: 0
138 | minimumSupportedHeadTracking: 0
139 | maximumSupportedHeadTracking: 1
140 | hololens:
141 | depthFormat: 1
142 | depthBufferSharingEnabled: 1
143 | oculus:
144 | sharedDepthBuffer: 1
145 | dashSupport: 1
146 | enable360StereoCapture: 0
147 | protectGraphicsMemory: 0
148 | enableFrameTimingStats: 0
149 | useHDRDisplay: 0
150 | m_ColorGamuts: 00000000
151 | targetPixelDensity: 30
152 | resolutionScalingMode: 0
153 | androidSupportedAspectRatio: 1
154 | androidMaxAspectRatio: 2.1
155 | applicationIdentifier: {}
156 | buildNumber: {}
157 | AndroidBundleVersionCode: 1
158 | AndroidMinSdkVersion: 16
159 | AndroidTargetSdkVersion: 0
160 | AndroidPreferredInstallLocation: 1
161 | aotOptions:
162 | stripEngineCode: 1
163 | iPhoneStrippingLevel: 0
164 | iPhoneScriptCallOptimization: 0
165 | ForceInternetPermission: 0
166 | ForceSDCardPermission: 0
167 | CreateWallpaper: 0
168 | APKExpansionFiles: 0
169 | keepLoadedShadersAlive: 0
170 | StripUnusedMeshComponents: 1
171 | VertexChannelCompressionMask: 4054
172 | iPhoneSdkVersion: 988
173 | iOSTargetOSVersionString: 9.0
174 | tvOSSdkVersion: 0
175 | tvOSRequireExtendedGameController: 0
176 | tvOSTargetOSVersionString: 9.0
177 | uIPrerenderedIcon: 0
178 | uIRequiresPersistentWiFi: 0
179 | uIRequiresFullScreen: 1
180 | uIStatusBarHidden: 1
181 | uIExitOnSuspend: 0
182 | uIStatusBarStyle: 0
183 | iPhoneSplashScreen: {fileID: 0}
184 | iPhoneHighResSplashScreen: {fileID: 0}
185 | iPhoneTallHighResSplashScreen: {fileID: 0}
186 | iPhone47inSplashScreen: {fileID: 0}
187 | iPhone55inPortraitSplashScreen: {fileID: 0}
188 | iPhone55inLandscapeSplashScreen: {fileID: 0}
189 | iPhone58inPortraitSplashScreen: {fileID: 0}
190 | iPhone58inLandscapeSplashScreen: {fileID: 0}
191 | iPadPortraitSplashScreen: {fileID: 0}
192 | iPadHighResPortraitSplashScreen: {fileID: 0}
193 | iPadLandscapeSplashScreen: {fileID: 0}
194 | iPadHighResLandscapeSplashScreen: {fileID: 0}
195 | appleTVSplashScreen: {fileID: 0}
196 | appleTVSplashScreen2x: {fileID: 0}
197 | tvOSSmallIconLayers: []
198 | tvOSSmallIconLayers2x: []
199 | tvOSLargeIconLayers: []
200 | tvOSLargeIconLayers2x: []
201 | tvOSTopShelfImageLayers: []
202 | tvOSTopShelfImageLayers2x: []
203 | tvOSTopShelfImageWideLayers: []
204 | tvOSTopShelfImageWideLayers2x: []
205 | iOSLaunchScreenType: 0
206 | iOSLaunchScreenPortrait: {fileID: 0}
207 | iOSLaunchScreenLandscape: {fileID: 0}
208 | iOSLaunchScreenBackgroundColor:
209 | serializedVersion: 2
210 | rgba: 0
211 | iOSLaunchScreenFillPct: 100
212 | iOSLaunchScreenSize: 100
213 | iOSLaunchScreenCustomXibPath:
214 | iOSLaunchScreeniPadType: 0
215 | iOSLaunchScreeniPadImage: {fileID: 0}
216 | iOSLaunchScreeniPadBackgroundColor:
217 | serializedVersion: 2
218 | rgba: 0
219 | iOSLaunchScreeniPadFillPct: 100
220 | iOSLaunchScreeniPadSize: 100
221 | iOSLaunchScreeniPadCustomXibPath:
222 | iOSUseLaunchScreenStoryboard: 0
223 | iOSLaunchScreenCustomStoryboardPath:
224 | iOSDeviceRequirements: []
225 | iOSURLSchemes: []
226 | iOSBackgroundModes: 0
227 | iOSMetalForceHardShadows: 0
228 | metalEditorSupport: 1
229 | metalAPIValidation: 1
230 | iOSRenderExtraFrameOnPause: 0
231 | appleDeveloperTeamID:
232 | iOSManualSigningProvisioningProfileID:
233 | tvOSManualSigningProvisioningProfileID:
234 | iOSManualSigningProvisioningProfileType: 0
235 | tvOSManualSigningProvisioningProfileType: 0
236 | appleEnableAutomaticSigning: 0
237 | iOSRequireARKit: 0
238 | iOSAutomaticallyDetectAndAddCapabilities: 1
239 | appleEnableProMotion: 0
240 | clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea
241 | templatePackageId: com.unity.template.3d@1.3.0
242 | templateDefaultScene: Assets/Scenes/SampleScene.unity
243 | AndroidTargetArchitectures: 5
244 | AndroidSplashScreenScale: 0
245 | androidSplashScreen: {fileID: 0}
246 | AndroidKeystoreName:
247 | AndroidKeyaliasName:
248 | AndroidBuildApkPerCpuArchitecture: 0
249 | AndroidTVCompatibility: 1
250 | AndroidIsGame: 1
251 | AndroidEnableTango: 0
252 | androidEnableBanner: 1
253 | androidUseLowAccuracyLocation: 0
254 | m_AndroidBanners:
255 | - width: 320
256 | height: 180
257 | banner: {fileID: 0}
258 | androidGamepadSupportLevel: 0
259 | resolutionDialogBanner: {fileID: 0}
260 | m_BuildTargetIcons: []
261 | m_BuildTargetPlatformIcons: []
262 | m_BuildTargetBatching:
263 | - m_BuildTarget: Standalone
264 | m_StaticBatching: 1
265 | m_DynamicBatching: 0
266 | - m_BuildTarget: tvOS
267 | m_StaticBatching: 1
268 | m_DynamicBatching: 0
269 | - m_BuildTarget: Android
270 | m_StaticBatching: 1
271 | m_DynamicBatching: 0
272 | - m_BuildTarget: iPhone
273 | m_StaticBatching: 1
274 | m_DynamicBatching: 0
275 | - m_BuildTarget: WebGL
276 | m_StaticBatching: 0
277 | m_DynamicBatching: 0
278 | m_BuildTargetGraphicsAPIs:
279 | - m_BuildTarget: AndroidPlayer
280 | m_APIs: 0b00000008000000
281 | m_Automatic: 1
282 | - m_BuildTarget: iOSSupport
283 | m_APIs: 10000000
284 | m_Automatic: 1
285 | - m_BuildTarget: AppleTVSupport
286 | m_APIs: 10000000
287 | m_Automatic: 0
288 | - m_BuildTarget: WebGLSupport
289 | m_APIs: 0b000000
290 | m_Automatic: 1
291 | m_BuildTargetVRSettings:
292 | - m_BuildTarget: Standalone
293 | m_Enabled: 0
294 | m_Devices:
295 | - Oculus
296 | - OpenVR
297 | m_BuildTargetEnableVuforiaSettings: []
298 | openGLRequireES31: 0
299 | openGLRequireES31AEP: 0
300 | m_TemplateCustomTags: {}
301 | mobileMTRendering:
302 | Android: 1
303 | iPhone: 1
304 | tvOS: 1
305 | m_BuildTargetGroupLightmapEncodingQuality: []
306 | m_BuildTargetGroupLightmapSettings: []
307 | playModeTestRunnerEnabled: 0
308 | runPlayModeTestAsEditModeTest: 0
309 | actionOnDotNetUnhandledException: 1
310 | enableInternalProfiler: 0
311 | logObjCUncaughtExceptions: 1
312 | enableCrashReportAPI: 0
313 | cameraUsageDescription:
314 | locationUsageDescription:
315 | microphoneUsageDescription:
316 | switchNetLibKey:
317 | switchSocketMemoryPoolSize: 6144
318 | switchSocketAllocatorPoolSize: 128
319 | switchSocketConcurrencyLimit: 14
320 | switchScreenResolutionBehavior: 2
321 | switchUseCPUProfiler: 0
322 | switchApplicationID: 0x01004b9000490000
323 | switchNSODependencies:
324 | switchTitleNames_0:
325 | switchTitleNames_1:
326 | switchTitleNames_2:
327 | switchTitleNames_3:
328 | switchTitleNames_4:
329 | switchTitleNames_5:
330 | switchTitleNames_6:
331 | switchTitleNames_7:
332 | switchTitleNames_8:
333 | switchTitleNames_9:
334 | switchTitleNames_10:
335 | switchTitleNames_11:
336 | switchTitleNames_12:
337 | switchTitleNames_13:
338 | switchTitleNames_14:
339 | switchPublisherNames_0:
340 | switchPublisherNames_1:
341 | switchPublisherNames_2:
342 | switchPublisherNames_3:
343 | switchPublisherNames_4:
344 | switchPublisherNames_5:
345 | switchPublisherNames_6:
346 | switchPublisherNames_7:
347 | switchPublisherNames_8:
348 | switchPublisherNames_9:
349 | switchPublisherNames_10:
350 | switchPublisherNames_11:
351 | switchPublisherNames_12:
352 | switchPublisherNames_13:
353 | switchPublisherNames_14:
354 | switchIcons_0: {fileID: 0}
355 | switchIcons_1: {fileID: 0}
356 | switchIcons_2: {fileID: 0}
357 | switchIcons_3: {fileID: 0}
358 | switchIcons_4: {fileID: 0}
359 | switchIcons_5: {fileID: 0}
360 | switchIcons_6: {fileID: 0}
361 | switchIcons_7: {fileID: 0}
362 | switchIcons_8: {fileID: 0}
363 | switchIcons_9: {fileID: 0}
364 | switchIcons_10: {fileID: 0}
365 | switchIcons_11: {fileID: 0}
366 | switchIcons_12: {fileID: 0}
367 | switchIcons_13: {fileID: 0}
368 | switchIcons_14: {fileID: 0}
369 | switchSmallIcons_0: {fileID: 0}
370 | switchSmallIcons_1: {fileID: 0}
371 | switchSmallIcons_2: {fileID: 0}
372 | switchSmallIcons_3: {fileID: 0}
373 | switchSmallIcons_4: {fileID: 0}
374 | switchSmallIcons_5: {fileID: 0}
375 | switchSmallIcons_6: {fileID: 0}
376 | switchSmallIcons_7: {fileID: 0}
377 | switchSmallIcons_8: {fileID: 0}
378 | switchSmallIcons_9: {fileID: 0}
379 | switchSmallIcons_10: {fileID: 0}
380 | switchSmallIcons_11: {fileID: 0}
381 | switchSmallIcons_12: {fileID: 0}
382 | switchSmallIcons_13: {fileID: 0}
383 | switchSmallIcons_14: {fileID: 0}
384 | switchManualHTML:
385 | switchAccessibleURLs:
386 | switchLegalInformation:
387 | switchMainThreadStackSize: 1048576
388 | switchPresenceGroupId:
389 | switchLogoHandling: 0
390 | switchReleaseVersion: 0
391 | switchDisplayVersion: 1.0.0
392 | switchStartupUserAccount: 0
393 | switchTouchScreenUsage: 0
394 | switchSupportedLanguagesMask: 0
395 | switchLogoType: 0
396 | switchApplicationErrorCodeCategory:
397 | switchUserAccountSaveDataSize: 0
398 | switchUserAccountSaveDataJournalSize: 0
399 | switchApplicationAttribute: 0
400 | switchCardSpecSize: -1
401 | switchCardSpecClock: -1
402 | switchRatingsMask: 0
403 | switchRatingsInt_0: 0
404 | switchRatingsInt_1: 0
405 | switchRatingsInt_2: 0
406 | switchRatingsInt_3: 0
407 | switchRatingsInt_4: 0
408 | switchRatingsInt_5: 0
409 | switchRatingsInt_6: 0
410 | switchRatingsInt_7: 0
411 | switchRatingsInt_8: 0
412 | switchRatingsInt_9: 0
413 | switchRatingsInt_10: 0
414 | switchRatingsInt_11: 0
415 | switchLocalCommunicationIds_0:
416 | switchLocalCommunicationIds_1:
417 | switchLocalCommunicationIds_2:
418 | switchLocalCommunicationIds_3:
419 | switchLocalCommunicationIds_4:
420 | switchLocalCommunicationIds_5:
421 | switchLocalCommunicationIds_6:
422 | switchLocalCommunicationIds_7:
423 | switchParentalControl: 0
424 | switchAllowsScreenshot: 1
425 | switchAllowsVideoCapturing: 1
426 | switchAllowsRuntimeAddOnContentInstall: 0
427 | switchDataLossConfirmation: 0
428 | switchUserAccountLockEnabled: 0
429 | switchSystemResourceMemory: 16777216
430 | switchSupportedNpadStyles: 3
431 | switchNativeFsCacheSize: 32
432 | switchIsHoldTypeHorizontal: 0
433 | switchSupportedNpadCount: 8
434 | switchSocketConfigEnabled: 0
435 | switchTcpInitialSendBufferSize: 32
436 | switchTcpInitialReceiveBufferSize: 64
437 | switchTcpAutoSendBufferSizeMax: 256
438 | switchTcpAutoReceiveBufferSizeMax: 256
439 | switchUdpSendBufferSize: 9
440 | switchUdpReceiveBufferSize: 42
441 | switchSocketBufferEfficiency: 4
442 | switchSocketInitializeEnabled: 1
443 | switchNetworkInterfaceManagerInitializeEnabled: 1
444 | switchPlayerConnectionEnabled: 1
445 | ps4NPAgeRating: 12
446 | ps4NPTitleSecret:
447 | ps4NPTrophyPackPath:
448 | ps4ParentalLevel: 11
449 | ps4ContentID: ED1633-NPXX51362_00-0000000000000000
450 | ps4Category: 0
451 | ps4MasterVersion: 01.00
452 | ps4AppVersion: 01.00
453 | ps4AppType: 0
454 | ps4ParamSfxPath:
455 | ps4VideoOutPixelFormat: 0
456 | ps4VideoOutInitialWidth: 1920
457 | ps4VideoOutBaseModeInitialWidth: 1920
458 | ps4VideoOutReprojectionRate: 60
459 | ps4PronunciationXMLPath:
460 | ps4PronunciationSIGPath:
461 | ps4BackgroundImagePath:
462 | ps4StartupImagePath:
463 | ps4StartupImagesFolder:
464 | ps4IconImagesFolder:
465 | ps4SaveDataImagePath:
466 | ps4SdkOverride:
467 | ps4BGMPath:
468 | ps4ShareFilePath:
469 | ps4ShareOverlayImagePath:
470 | ps4PrivacyGuardImagePath:
471 | ps4NPtitleDatPath:
472 | ps4RemotePlayKeyAssignment: -1
473 | ps4RemotePlayKeyMappingDir:
474 | ps4PlayTogetherPlayerCount: 0
475 | ps4EnterButtonAssignment: 1
476 | ps4ApplicationParam1: 0
477 | ps4ApplicationParam2: 0
478 | ps4ApplicationParam3: 0
479 | ps4ApplicationParam4: 0
480 | ps4DownloadDataSize: 0
481 | ps4GarlicHeapSize: 2048
482 | ps4ProGarlicHeapSize: 2560
483 | ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ
484 | ps4pnSessions: 1
485 | ps4pnPresence: 1
486 | ps4pnFriends: 1
487 | ps4pnGameCustomData: 1
488 | playerPrefsSupport: 0
489 | enableApplicationExit: 0
490 | resetTempFolder: 1
491 | restrictedAudioUsageRights: 0
492 | ps4UseResolutionFallback: 0
493 | ps4ReprojectionSupport: 0
494 | ps4UseAudio3dBackend: 0
495 | ps4SocialScreenEnabled: 0
496 | ps4ScriptOptimizationLevel: 0
497 | ps4Audio3dVirtualSpeakerCount: 14
498 | ps4attribCpuUsage: 0
499 | ps4PatchPkgPath:
500 | ps4PatchLatestPkgPath:
501 | ps4PatchChangeinfoPath:
502 | ps4PatchDayOne: 0
503 | ps4attribUserManagement: 0
504 | ps4attribMoveSupport: 0
505 | ps4attrib3DSupport: 0
506 | ps4attribShareSupport: 0
507 | ps4attribExclusiveVR: 0
508 | ps4disableAutoHideSplash: 0
509 | ps4videoRecordingFeaturesUsed: 0
510 | ps4contentSearchFeaturesUsed: 0
511 | ps4attribEyeToEyeDistanceSettingVR: 0
512 | ps4IncludedModules: []
513 | monoEnv:
514 | splashScreenBackgroundSourceLandscape: {fileID: 0}
515 | splashScreenBackgroundSourcePortrait: {fileID: 0}
516 | spritePackerPolicy:
517 | webGLMemorySize: 256
518 | webGLExceptionSupport: 1
519 | webGLNameFilesAsHashes: 0
520 | webGLDataCaching: 1
521 | webGLDebugSymbols: 0
522 | webGLEmscriptenArgs:
523 | webGLModulesDirectory:
524 | webGLTemplate: APPLICATION:Default
525 | webGLAnalyzeBuildSize: 0
526 | webGLUseEmbeddedResources: 0
527 | webGLCompressionFormat: 1
528 | webGLLinkerTarget: 1
529 | webGLThreadsSupport: 0
530 | scriptingDefineSymbols: {}
531 | platformArchitecture: {}
532 | scriptingBackend: {}
533 | il2cppCompilerConfiguration: {}
534 | managedStrippingLevel: {}
535 | incrementalIl2cppBuild: {}
536 | allowUnsafeCode: 0
537 | additionalIl2CppArgs:
538 | scriptingRuntimeVersion: 1
539 | apiCompatibilityLevelPerPlatform: {}
540 | m_RenderingPath: 1
541 | m_MobileRenderingPath: 1
542 | metroPackageName: Template_3D
543 | metroPackageVersion:
544 | metroCertificatePath:
545 | metroCertificatePassword:
546 | metroCertificateSubject:
547 | metroCertificateIssuer:
548 | metroCertificateNotAfter: 0000000000000000
549 | metroApplicationDescription: Template_3D
550 | wsaImages: {}
551 | metroTileShortName:
552 | metroTileShowName: 0
553 | metroMediumTileShowName: 0
554 | metroLargeTileShowName: 0
555 | metroWideTileShowName: 0
556 | metroSupportStreamingInstall: 0
557 | metroLastRequiredScene: 0
558 | metroDefaultTileSize: 1
559 | metroTileForegroundText: 2
560 | metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0}
561 | metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628,
562 | a: 1}
563 | metroSplashScreenUseBackgroundColor: 0
564 | platformCapabilities: {}
565 | metroTargetDeviceFamilies: {}
566 | metroFTAName:
567 | metroFTAFileTypes: []
568 | metroProtocolName:
569 | metroCompilationOverrides: 1
570 | XboxOneProductId:
571 | XboxOneUpdateKey:
572 | XboxOneSandboxId:
573 | XboxOneContentId:
574 | XboxOneTitleId:
575 | XboxOneSCId:
576 | XboxOneGameOsOverridePath:
577 | XboxOnePackagingOverridePath:
578 | XboxOneAppManifestOverridePath:
579 | XboxOneVersion: 1.0.0.0
580 | XboxOnePackageEncryption: 0
581 | XboxOnePackageUpdateGranularity: 2
582 | XboxOneDescription:
583 | XboxOneLanguage:
584 | - enus
585 | XboxOneCapability: []
586 | XboxOneGameRating: {}
587 | XboxOneIsContentPackage: 0
588 | XboxOneEnableGPUVariability: 1
589 | XboxOneSockets: {}
590 | XboxOneSplashScreen: {fileID: 0}
591 | XboxOneAllowedProductIds: []
592 | XboxOnePersistentLocalStorageSize: 0
593 | XboxOneXTitleMemory: 8
594 | xboxOneScriptCompiler: 1
595 | XboxOneOverrideIdentityName:
596 | vrEditorSettings:
597 | daydream:
598 | daydreamIconForeground: {fileID: 0}
599 | daydreamIconBackground: {fileID: 0}
600 | cloudServicesEnabled:
601 | UNet: 1
602 | luminIcon:
603 | m_Name:
604 | m_ModelFolderPath:
605 | m_PortalFolderPath:
606 | luminCert:
607 | m_CertPath:
608 | m_PrivateKeyPath:
609 | luminIsChannelApp: 0
610 | luminVersion:
611 | m_VersionCode: 1
612 | m_VersionName:
613 | facebookSdkVersion: 7.9.4
614 | facebookAppId:
615 | facebookCookies: 1
616 | facebookLogging: 1
617 | facebookStatus: 1
618 | facebookXfbml: 0
619 | facebookFrictionlessRequests: 1
620 | apiCompatibilityLevel: 6
621 | cloudProjectId:
622 | framebufferDepthMemorylessMode: 0
623 | projectName:
624 | organizationId:
625 | cloudEnabled: 0
626 | enableNativePlatformBackendsForNewInputSystem: 0
627 | disableOldInputManagerSupport: 0
628 | legacyClampBlendShapeWeights: 0
629 |
--------------------------------------------------------------------------------
/ProjectSettings/ProjectVersion.txt:
--------------------------------------------------------------------------------
1 | m_EditorVersion: 2018.3.10f1
2 |
--------------------------------------------------------------------------------
/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: 4
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 | particleRaycastBudget: 4
33 | asyncUploadTimeSlice: 2
34 | asyncUploadBufferSize: 16
35 | resolutionScalingFixedDPIFactor: 1
36 | excludedTargetPlatforms: []
37 | - serializedVersion: 2
38 | name: Low
39 | pixelLightCount: 0
40 | shadows: 0
41 | shadowResolution: 0
42 | shadowProjection: 1
43 | shadowCascades: 1
44 | shadowDistance: 20
45 | shadowNearPlaneOffset: 3
46 | shadowCascade2Split: 0.33333334
47 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
48 | shadowmaskMode: 0
49 | blendWeights: 2
50 | textureQuality: 0
51 | anisotropicTextures: 0
52 | antiAliasing: 0
53 | softParticles: 0
54 | softVegetation: 0
55 | realtimeReflectionProbes: 0
56 | billboardsFaceCameraPosition: 0
57 | vSyncCount: 0
58 | lodBias: 0.4
59 | maximumLODLevel: 0
60 | particleRaycastBudget: 16
61 | asyncUploadTimeSlice: 2
62 | asyncUploadBufferSize: 16
63 | resolutionScalingFixedDPIFactor: 1
64 | excludedTargetPlatforms: []
65 | - serializedVersion: 2
66 | name: Medium
67 | pixelLightCount: 1
68 | shadows: 1
69 | shadowResolution: 0
70 | shadowProjection: 1
71 | shadowCascades: 1
72 | shadowDistance: 20
73 | shadowNearPlaneOffset: 3
74 | shadowCascade2Split: 0.33333334
75 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
76 | shadowmaskMode: 0
77 | blendWeights: 2
78 | textureQuality: 0
79 | anisotropicTextures: 1
80 | antiAliasing: 0
81 | softParticles: 0
82 | softVegetation: 0
83 | realtimeReflectionProbes: 0
84 | billboardsFaceCameraPosition: 0
85 | vSyncCount: 1
86 | lodBias: 0.7
87 | maximumLODLevel: 0
88 | particleRaycastBudget: 64
89 | asyncUploadTimeSlice: 2
90 | asyncUploadBufferSize: 16
91 | resolutionScalingFixedDPIFactor: 1
92 | excludedTargetPlatforms: []
93 | - serializedVersion: 2
94 | name: High
95 | pixelLightCount: 2
96 | shadows: 2
97 | shadowResolution: 1
98 | shadowProjection: 1
99 | shadowCascades: 2
100 | shadowDistance: 40
101 | shadowNearPlaneOffset: 3
102 | shadowCascade2Split: 0.33333334
103 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
104 | shadowmaskMode: 1
105 | blendWeights: 2
106 | textureQuality: 0
107 | anisotropicTextures: 1
108 | antiAliasing: 2
109 | softParticles: 0
110 | softVegetation: 1
111 | realtimeReflectionProbes: 1
112 | billboardsFaceCameraPosition: 1
113 | vSyncCount: 1
114 | lodBias: 1
115 | maximumLODLevel: 0
116 | particleRaycastBudget: 256
117 | asyncUploadTimeSlice: 2
118 | asyncUploadBufferSize: 16
119 | resolutionScalingFixedDPIFactor: 1
120 | excludedTargetPlatforms: []
121 | - serializedVersion: 2
122 | name: Very High
123 | pixelLightCount: 3
124 | shadows: 2
125 | shadowResolution: 2
126 | shadowProjection: 1
127 | shadowCascades: 2
128 | shadowDistance: 40
129 | shadowNearPlaneOffset: 3
130 | shadowCascade2Split: 0.33333334
131 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
132 | shadowmaskMode: 1
133 | blendWeights: 4
134 | textureQuality: 0
135 | anisotropicTextures: 1
136 | antiAliasing: 4
137 | softParticles: 1
138 | softVegetation: 1
139 | realtimeReflectionProbes: 1
140 | billboardsFaceCameraPosition: 1
141 | vSyncCount: 1
142 | lodBias: 1.5
143 | maximumLODLevel: 0
144 | particleRaycastBudget: 1024
145 | asyncUploadTimeSlice: 2
146 | asyncUploadBufferSize: 16
147 | resolutionScalingFixedDPIFactor: 1
148 | excludedTargetPlatforms: []
149 | - serializedVersion: 2
150 | name: Ultra
151 | pixelLightCount: 4
152 | shadows: 2
153 | shadowResolution: 2
154 | shadowProjection: 1
155 | shadowCascades: 4
156 | shadowDistance: 150
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: 1
164 | antiAliasing: 4
165 | softParticles: 1
166 | softVegetation: 1
167 | realtimeReflectionProbes: 1
168 | billboardsFaceCameraPosition: 1
169 | vSyncCount: 1
170 | lodBias: 2
171 | maximumLODLevel: 0
172 | particleRaycastBudget: 4096
173 | asyncUploadTimeSlice: 2
174 | asyncUploadBufferSize: 16
175 | resolutionScalingFixedDPIFactor: 1
176 | excludedTargetPlatforms: []
177 | m_PerPlatformDefaultQuality:
178 | Android: 2
179 | Nintendo 3DS: 5
180 | Nintendo Switch: 5
181 | PS4: 5
182 | PSP2: 2
183 | Standalone: 5
184 | Tizen: 2
185 | WebGL: 3
186 | WiiU: 5
187 | Windows Store Apps: 5
188 | XboxOne: 5
189 | iPhone: 2
190 | tvOS: 2
191 |
--------------------------------------------------------------------------------
/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 | - PostProcessing
17 | -
18 | -
19 | -
20 | -
21 | -
22 | -
23 | -
24 | -
25 | -
26 | -
27 | -
28 | -
29 | -
30 | -
31 | -
32 | -
33 | -
34 | -
35 | -
36 | -
37 | -
38 | -
39 | -
40 | m_SortingLayers:
41 | - name: Default
42 | uniqueID: 0
43 | locked: 0
44 |
--------------------------------------------------------------------------------
/ProjectSettings/TimeManager.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!5 &1
4 | TimeManager:
5 | m_ObjectHideFlags: 0
6 | Fixed Timestep: 0.02
7 | Maximum Allowed Timestep: 0.1
8 | m_TimeScale: 1
9 | Maximum Particle Timestep: 0.03
10 |
--------------------------------------------------------------------------------
/ProjectSettings/UnityConnectSettings.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!310 &1
4 | UnityConnectSettings:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 1
7 | m_Enabled: 0
8 | m_TestMode: 0
9 | m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events
10 | m_EventUrl: https://cdp.cloud.unity3d.com/v1/events
11 | m_ConfigUrl: https://config.uca.cloud.unity3d.com
12 | m_TestInitMode: 0
13 | CrashReportingSettings:
14 | m_EventUrl: https://perf-events.cloud.unity3d.com
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 |
--------------------------------------------------------------------------------
/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_RenderPipeSettingsPath:
10 | m_FixedTimeStep: 0.016666668
11 | m_MaxDeltaTime: 0.05
12 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # DownloadFile
2 | 该项目是基于Unity平台 纯C#编写的多线程下载模块
3 |
4 | (针对Unity对线程的不友好,做了部分处理,本质是还是纯粹的C#代码编写,可以随意移植)
5 |
6 | ## 环境依赖
7 |
8 | - 项目运行平台: Unity2018.3.10f1
9 |
10 | 该项目仅包含几个C#脚本,可以随意选择Unity版本测试。
11 |
12 | ## 特点
13 | 1. 支持多线程下载
14 | 2. 包含下载到文件与下载到缓存两种方式
15 | 3. 支持断点续传
16 |
17 | ## 工作流
18 | 详见个人博客文章[C#多线程下载、断点续传的实现](http://ggblog.site/2021/07/14/ckra9wmag000958upg2ua3yhj/)
--------------------------------------------------------------------------------