├── .gitignore ├── API.md ├── Assets ├── SimpleHTTP.meta └── SimpleHTTP │ ├── Client.cs │ ├── Client.cs.meta │ ├── Examples.meta │ ├── Examples │ ├── BlogPost.cs │ ├── BlogPost.cs.meta │ ├── Main.cs │ ├── Main.cs.meta │ ├── TestScene.unity │ ├── TestScene.unity.meta │ ├── UserProfile.cs │ └── UserProfile.cs.meta │ ├── FormData.cs │ ├── FormData.cs.meta │ ├── LICENSE │ ├── LICENSE.meta │ ├── README.html │ ├── README.html.meta │ ├── README.pdf │ ├── README.pdf.meta │ ├── Request.cs │ ├── Request.cs.meta │ ├── RequestBody.cs │ ├── RequestBody.cs.meta │ ├── Response.cs │ ├── Response.cs.meta │ ├── Tests.meta │ └── Tests │ ├── Editor.meta │ ├── Editor │ ├── ClientTest.cs │ ├── ClientTest.cs.meta │ ├── FormDataTests.cs │ ├── FormDataTests.cs.meta │ ├── NSubstitute.dll │ ├── NSubstitute.dll.meta │ ├── ReflectionHelper.cs │ ├── ReflectionHelper.cs.meta │ ├── ResponseTest.cs │ └── ResponseTest.cs.meta │ ├── server.py │ └── server.py.meta ├── LICENSE ├── Packages ├── manifest.json └── packages-lock.json ├── ProjectSettings ├── AudioManager.asset ├── ClusterInputManager.asset ├── DynamicsManager.asset ├── EditorBuildSettings.asset ├── EditorSettings.asset ├── GraphicsSettings.asset ├── InputManager.asset ├── MemorySettings.asset ├── NavMeshAreas.asset ├── NetworkManager.asset ├── PackageManagerSettings.asset ├── Physics2DSettings.asset ├── PresetManager.asset ├── ProjectSettings.asset ├── ProjectVersion.txt ├── QualitySettings.asset ├── SceneTemplateSettings.json ├── TagManager.asset ├── TimeManager.asset ├── UnityConnectSettings.asset ├── VFXManager.asset └── VersionControlSettings.asset ├── README.md ├── SVG ├── icon-128x128.png ├── icon-200x124.png ├── icon-516x389.png ├── icons.svg └── satanas.io-key-image.png ├── generate_doc.sh ├── simplehttp-1.0.0.unitypackage └── simplehttp-1.0.2.unitypackage /.gitignore: -------------------------------------------------------------------------------- 1 | # =============== # 2 | # Unity generated # 3 | # =============== # 4 | Temp/ 5 | Library/ 6 | Dist/ 7 | Assets/AssetStoreTools* 8 | Logs/ 9 | obj/ 10 | UserSettings/* 11 | Packages/com.unity.asset-store-tools/ 12 | 13 | # ===================== # 14 | # MonoDevelop generated # 15 | # ===================== # 16 | *.csproj 17 | *.unityproj 18 | *.sln 19 | *.pidb 20 | *.userprefs 21 | *.idea 22 | 23 | # ============ # 24 | # OS generated # 25 | # ============ # 26 | *.DS_Store 27 | -------------------------------------------------------------------------------- /API.md: -------------------------------------------------------------------------------- 1 | # SimpleHTTP Full API Reference 2 | 3 | ## Request 4 | 5 | Class to build an HTTP request. 6 | 7 | ### Public Methods 8 | 9 | #### Request(string url) 10 | 11 | Creates a new `Request` object. Receives a URL as param. 12 | 13 | #### Request Url(string url) 14 | 15 | Sets the URL of the `Request` object. Returns the updated `Request`, so this method is chainable. 16 | 17 | #### Request Method(string url) 18 | 19 | Sets the URL of the `Request` object. Returns the updated `Request`, so this method is chainable. 20 | 21 | #### Request AddHeader(string name, string value) 22 | 23 | #### Request RemoveHeader(string name) 24 | 25 | #### Request Timeout(int timeout) 26 | 27 | #### Request Get() 28 | 29 | #### Request Post(RequestBody body) 30 | 31 | #### 32 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 80e182ea0bb5c45d8bf51011e4d305d3 3 | folderAsset: yes 4 | timeCreated: 1518296731 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/Client.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | 4 | namespace SimpleHTTP { 5 | public class Client { 6 | private Response response; 7 | private string error; 8 | private Request request; 9 | 10 | public Client() { 11 | error = null; 12 | response = null; 13 | } 14 | 15 | public IEnumerator Send(Request www) { 16 | this.request = www; 17 | 18 | yield return request.Send(); 19 | 20 | response = request.Response(); 21 | error = response.Error(); // Backward compatibility 22 | } 23 | 24 | public void Abort() { 25 | if (request != null) { 26 | request.Abort(); 27 | } 28 | } 29 | 30 | [Obsolete("IsSuccessful() is deprecated. Please, use Response() to get the response and check response.IsOK()")] 31 | public bool IsSuccessful() { 32 | return (response != null && response.IsOK()); 33 | } 34 | 35 | [Obsolete("Error() is deprecated. Please, use Response() to get the response and check response.Error()")] 36 | public string Error() { 37 | return error; 38 | } 39 | 40 | public Response Response() { 41 | return response; 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/Client.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2b463d8ba288740648652584ed788af2 3 | timeCreated: 1518246839 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/Examples.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2a383bf0c821543859f0647dcd646cda 3 | folderAsset: yes 4 | timeCreated: 1518302431 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/Examples/BlogPost.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | [Serializable] 4 | public class BlogPost { 5 | public string title; 6 | public string body; 7 | public int userId; 8 | 9 | public BlogPost(string title, string body, int userId) { 10 | this.title = title; 11 | this.body = body; 12 | this.userId = userId; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/Examples/BlogPost.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8f195eb09d5334cdf894a171d2a87e51 3 | timeCreated: 1518303292 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/Examples/Main.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using SimpleHTTP; 3 | using UnityEngine; 4 | using UnityEngine.UI; 5 | 6 | public class Main : MonoBehaviour { 7 | 8 | public Text errorText; 9 | public Text successText; 10 | 11 | private const string ValidURL = "https://jsonplaceholder.typicode.com/posts/"; 12 | private const string InvalidURL = "https://jsonplaceholder.net/articles/"; 13 | 14 | void Start () { 15 | errorText.text = ""; 16 | successText.text = ""; 17 | } 18 | 19 | IEnumerator Get(string baseUrl, int postId) { 20 | Request request = new Request (baseUrl + postId); 21 | 22 | Client http = new Client (); 23 | yield return http.Send (request); 24 | ProcessResult (http); 25 | } 26 | 27 | IEnumerator Post() { 28 | UserProfile user = new UserProfile (1, "admin", "value01", "value02"); 29 | 30 | Request request = new Request (ValidURL) 31 | .AddHeader ("Authorization", "myID") 32 | .AddHeader ("Content-Type", "application/json") 33 | .AddHeader ("X-Api-Version", "1.0.0") 34 | .Post (RequestBody.From (user)); 35 | 36 | Client http = new Client (); 37 | yield return http.Send (request); 38 | ProcessResult (http); 39 | } 40 | 41 | IEnumerator PostWithFormData() { 42 | FormData formData = new FormData () 43 | .AddField ("userId", "1") 44 | .AddField ("body", "Hey, another test") 45 | .AddField ("title", "Did I say test?"); 46 | 47 | Request request = new Request (ValidURL) 48 | .Post (RequestBody.From(formData)); 49 | 50 | Client http = new Client (); 51 | yield return http.Send (request); 52 | ProcessResult (http); 53 | } 54 | 55 | IEnumerator Put() { 56 | BlogPost post = new BlogPost ("Another Test", "This is another test", 1); 57 | 58 | Request request = new Request (ValidURL + "1") 59 | .Put (RequestBody.From (post)); 60 | 61 | Client http = new Client (); 62 | yield return http.Send (request); 63 | ProcessResult (http); 64 | } 65 | 66 | IEnumerator Delete() { 67 | Request request = new Request (ValidURL + "1") 68 | .Delete (); 69 | 70 | Client http = new Client (); 71 | yield return http.Send (request); 72 | ProcessResult (http); 73 | } 74 | 75 | IEnumerator ClearOutput() { 76 | yield return new WaitForSeconds (2f); 77 | errorText.text = ""; 78 | successText.text = ""; 79 | } 80 | 81 | void ProcessResult(Client http) { 82 | Response resp = http.Response (); 83 | if (resp.IsOK()) { 84 | successText.text = "status: " + resp.Status() + "\nbody: " + resp.Body(); 85 | } else { 86 | errorText.text = "error: " + resp.Error(); 87 | } 88 | StopCoroutine (ClearOutput ()); 89 | StartCoroutine (ClearOutput ()); 90 | } 91 | 92 | public void GetPost() { 93 | StartCoroutine (Get (ValidURL, 1)); 94 | } 95 | 96 | public void CreatePost() { 97 | StartCoroutine (Post ()); 98 | } 99 | 100 | public void UpdatePost() { 101 | StartCoroutine (Put ()); 102 | } 103 | 104 | public void DeletePost() { 105 | StartCoroutine (Delete ()); 106 | } 107 | 108 | public void GetNonExistentPost() { 109 | StartCoroutine (Get (ValidURL, 999)); 110 | } 111 | 112 | public void GetInvalidUrl() { 113 | StartCoroutine (Get (InvalidURL, 1)); 114 | } 115 | 116 | public void CreatePostWithFormData() { 117 | StartCoroutine (PostWithFormData ()); 118 | } 119 | } 120 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/Examples/Main.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 26c32c7830fab4f3592c48b2d48b6180 3 | timeCreated: 1518296766 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/Examples/TestScene.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6c45478fda15d4fb5aea5013a4801c46 3 | timeCreated: 1518297457 4 | licenseType: Free 5 | DefaultImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/Examples/UserProfile.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | 5 | [System.Serializable] 6 | public class UserProfile { 7 | public int id; 8 | public string type; 9 | public Groups groups; 10 | 11 | public UserProfile(int id, string type, string group1, string group2) { 12 | this.id = id; 13 | this.type = type; 14 | this.groups = new Groups(group1, group2); 15 | } 16 | } 17 | 18 | [System.Serializable] 19 | public class Groups { 20 | public string identifier1; 21 | public string identifier2; 22 | 23 | public Groups(string identifier1, string identifier2) { 24 | this.identifier1 = identifier1; 25 | this.identifier2 = identifier2; 26 | } 27 | } -------------------------------------------------------------------------------- /Assets/SimpleHTTP/Examples/UserProfile.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 259fd5ee8cf1a47c58fc8a400b636fe9 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/FormData.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using UnityEngine.Networking; 3 | 4 | namespace SimpleHTTP { 5 | public class FormData { 6 | private readonly List formData; 7 | 8 | public FormData() { 9 | formData = new List(); 10 | } 11 | 12 | public FormData AddField(string name, string value) { 13 | formData.Add(new MultipartFormDataSection(name, value)); 14 | return this; 15 | } 16 | 17 | public FormData AddFile(string name, byte[] data) { 18 | formData.Add(new MultipartFormFileSection(name, data)); 19 | return this; 20 | } 21 | 22 | public FormData AddFile(string name, byte[] data, string fileName, string contentType) { 23 | formData.Add(new MultipartFormFileSection(name, data, fileName, contentType)); 24 | return this; 25 | } 26 | 27 | public List MultipartForm() { 28 | return formData; 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/FormData.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9f53b1c0e68c04adfa07c50e1e3e1cc6 3 | timeCreated: 1518295570 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | 3 | Copyright 2018 Wil Alvarez 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/LICENSE.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 13f0ee2a6f45f4d4a845a6d3fc621eaf 3 | timeCreated: 1518323484 4 | licenseType: Free 5 | DefaultImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/README.html: -------------------------------------------------------------------------------- 1 |

SimpleHTTP

2 |

SimpleHTTP is a dead simple HTTP client for Unity, because HTTP shouldn’t be that hard.

3 |

Installation

4 |

Download the .unitypackage file and inside Unity go to the menu Assets -> Import New Assets... and select the package for SimpleHTTP.

5 |

Features

6 |

Currently, SimpleHTTP supports: * HTTP and HTTPS * GET, POST, PUT and DELETE * Headers * Timeouts

7 |

All of these features with a simple and consistent API. In the future it will also support: * More validations * URL parsing * Delegates to indicate progress

8 |

Usage

9 |

SimpleHTTP is very, very, very, simple to use (really!) and it is asynchronous. You can send any type of request basically with three objects: Request, Client and Response. Consider that the general flow would be something like this: * Create a request * Use the client to send the request * Get the response * Profit!

10 |

To make your life even easier, SimpleHTTP support JSON serialization and deserialization, so you don’t need to worry about that. To use it in your Unity scripts, you just need to add the following instruction at the top of your .cs scripts:

11 |
using SimpleHTTP;
12 |

Below are some examples that can help you understand how it works. Also you can refer to the Examples folder for a full working example of the library with a demo scene.

13 |

GET

14 | 31 |

POST with JSON payload (raw)

32 |

As I mentioned before, SimpleHTTP supports JSON serialization and deserialization, so you just need to have serializable POJOs in your code. Let’s say you want to fetch a post from a certain URL and your POJO looks like this:

33 | 45 |

Then you can send a POST to the server to create a new post.

46 | 67 |

SimpleHTTP will set the content type of this request automagically as “application/json”, so another thing to don’t worry about :).

68 |

POST with FormData

69 |

If the server only supports x-www-form-urlencoded you still can use SimpleHTTP to send your request. In this case, you just need to use the FormData helper to create the body of your request. Then you can send the POST as you would normally do (and SimpleHTTP will also take care of the content type for this request).

70 | 93 |

Adding headers to your request

94 |

So, you also need to add certain headers to your request? Do not fear! SimpleHTTP also let you do that easily. Just use the AddHeader method in your request and you’re all set.

95 | 114 |

PUT and DELETE

115 |

PUT requests will work exactly the same than POSTs, you just need to use Put() instead. And DELETEs will work similarly to GETs, just use Delete() for that and you’re done.

116 |

License

117 |

SimpleHTTP is licensed under the Apache License, Version 2.0.

118 |

Donation

119 |

SimpleHTTP is free and open source because I think that HTTP is something fundamental and basic for games nowadays, and there are no simple and free solutions to perform basic tasks like GET or POST. However, I’m open to donations, and if you really love SimpleHTTP I’d really appreciate if you buy me a coffee to continue improving this small and simple client for the use of all of us.

120 |

https://paypal.me/satanas82

121 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/README.html.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 26b5517fef74d4e7c8bf8d24015ab99e 3 | timeCreated: 1520107945 4 | licenseType: Free 5 | TextScriptImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/README.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/satanas/unity-simple-http/52fa9f07740772559c114d24d18aea6548793a4c/Assets/SimpleHTTP/README.pdf -------------------------------------------------------------------------------- /Assets/SimpleHTTP/README.pdf.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6cefc14347130480b802db32d26bc389 3 | timeCreated: 1520109858 4 | licenseType: Free 5 | DefaultImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/Request.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using UnityEngine.Networking; 5 | 6 | namespace SimpleHTTP { 7 | public class Request { 8 | private string url; 9 | private string method; 10 | private Dictionary headers; 11 | private RequestBody body; 12 | private Response response; 13 | private int timeout; 14 | private UnityWebRequest www; 15 | 16 | public Request(string url) { 17 | this.method = "GET"; 18 | this.url = url; 19 | this.body = null; 20 | this.response = null; 21 | this.timeout = 0; 22 | this.headers = new Dictionary(); 23 | } 24 | 25 | public Request Url(string url) { 26 | this.url = url; 27 | return this; 28 | } 29 | 30 | public Request Method(string method, RequestBody body) { 31 | if (method == null) throw new NullReferenceException("method cannot be null"); 32 | if (method.Length == 0) throw new InvalidOperationException("method cannot be empty"); 33 | 34 | this.method = method; 35 | this.body = body; 36 | return this; 37 | } 38 | 39 | public Request AddHeader(string name, string value) { 40 | this.headers.Add(name, value); 41 | return this; 42 | } 43 | 44 | public Request RemoveHeader(string name) { 45 | this.headers.Remove(name); 46 | return this; 47 | } 48 | 49 | public Request Timeout(int timeout) { 50 | this.timeout = timeout; 51 | return this; 52 | } 53 | 54 | public int Timeout() { 55 | return timeout; 56 | } 57 | 58 | public Request Get() { 59 | Method(UnityWebRequest.kHttpVerbGET, null); 60 | return this; 61 | } 62 | 63 | public Request Post(RequestBody body) { 64 | Method(UnityWebRequest.kHttpVerbPOST, body); 65 | return this; 66 | } 67 | 68 | public Request Put(RequestBody body) { 69 | Method(UnityWebRequest.kHttpVerbPUT, body); 70 | return this; 71 | } 72 | 73 | public Request Delete() { 74 | Method(UnityWebRequest.kHttpVerbDELETE, null); 75 | return this; 76 | } 77 | 78 | public string Url() { 79 | return url; 80 | } 81 | 82 | public string Method() { 83 | return method; 84 | } 85 | 86 | public RequestBody Body() { 87 | return body; 88 | } 89 | 90 | public Dictionary Headers() { 91 | return headers; 92 | } 93 | 94 | public Response Response() { 95 | return response; 96 | } 97 | 98 | public void Abort() { 99 | if (www != null) { 100 | www.Abort(); 101 | } 102 | } 103 | 104 | public IEnumerator Send() { 105 | // Employing `using` will ensure that the UnityWebRequest is properly cleaned in case of uncaught exceptions 106 | using (www = new UnityWebRequest(Url(), Method())) { 107 | www.timeout = timeout; 108 | 109 | if (body != null) { 110 | UploadHandler uploader = new UploadHandlerRaw(body.Body()); 111 | uploader.contentType = body.ContentType(); 112 | www.uploadHandler = uploader; 113 | } 114 | 115 | if (headers != null) { 116 | foreach (KeyValuePair header in headers) { 117 | www.SetRequestHeader(header.Key, header.Value); 118 | } 119 | } 120 | 121 | www.downloadHandler = new DownloadHandlerBuffer(); 122 | 123 | yield return www.SendWebRequest(); 124 | 125 | if (www.result == UnityWebRequest.Result.ConnectionError) { 126 | response = new Response(www.error); 127 | } else { 128 | response = new Response(www.responseCode, www.downloadHandler.text, www.downloadHandler.data); 129 | } 130 | } 131 | } 132 | } 133 | } 134 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/Request.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 98fa197880b0d41e0aa4579d2dadda94 3 | timeCreated: 1518247569 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/RequestBody.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using UnityEngine; 5 | using UnityEngine.Networking; 6 | 7 | namespace SimpleHTTP { 8 | public class RequestBody { 9 | private string contentType; 10 | private byte[] body; 11 | 12 | RequestBody(string contentType, byte[] body) { 13 | this.contentType = contentType; 14 | this.body = body; 15 | } 16 | 17 | public static RequestBody From(string value) { 18 | byte[] bodyRaw = Encoding.UTF8.GetBytes(value.ToCharArray()); 19 | return new RequestBody("application/x-www-form-urlencoded", bodyRaw); 20 | } 21 | 22 | public static RequestBody From(T value) { 23 | byte[] bodyRaw = Encoding.UTF8.GetBytes(JsonUtility.ToJson(value).ToCharArray()); 24 | return new RequestBody("application/json", bodyRaw); 25 | } 26 | 27 | public static RequestBody From(FormData form) { 28 | // https://answers.unity.com/questions/1354080/unitywebrequestpost-and-multipartform-data-not-for.html 29 | 30 | List formData = form.MultipartForm(); 31 | 32 | // generate a boundary then convert the form to byte[] 33 | byte[] boundary = UnityWebRequest.GenerateBoundary(); 34 | byte[] formSections = UnityWebRequest.SerializeFormSections(formData, boundary); 35 | // my termination string consisting of CRLF--{boundary}-- 36 | byte[] terminate = Encoding.UTF8.GetBytes(String.Concat("\r\n--", Encoding.UTF8.GetString(boundary), "--")); 37 | // Make complete body from the two byte arrays 38 | byte[] bodyRaw = new byte[formSections.Length + terminate.Length]; 39 | Buffer.BlockCopy(formSections, 0, bodyRaw, 0, formSections.Length); 40 | Buffer.BlockCopy(terminate, 0, bodyRaw, formSections.Length, terminate.Length); 41 | // Set the content type 42 | string contentType = String.Concat("multipart/form-data; boundary=", Encoding.UTF8.GetString(boundary)); 43 | return new RequestBody(contentType, bodyRaw); 44 | } 45 | 46 | [Obsolete("WWWForm is obsolete. Use List instead")] 47 | public static RequestBody From(WWWForm formData) { 48 | return new RequestBody("application/x-www-form-urlencoded", formData.data); 49 | } 50 | 51 | public string ContentType() { 52 | return contentType; 53 | } 54 | 55 | public byte[] Body() { 56 | return body; 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/RequestBody.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9245a40dfa2d54ac0bb5546df086230d 3 | timeCreated: 1518248778 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/Response.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | namespace SimpleHTTP { 4 | public class Response { 5 | private long status; 6 | private string body; 7 | private byte[] rawBody; 8 | private string error; 9 | 10 | public Response(long status, string body, byte[] rawBody) { 11 | this.status = status; 12 | this.body = body; 13 | this.rawBody = rawBody; 14 | this.error = null; 15 | } 16 | 17 | public Response(string error) { 18 | this.error = error; 19 | } 20 | 21 | public T To() { 22 | return JsonUtility.FromJson(body); 23 | } 24 | 25 | public long Status() { 26 | return status; 27 | } 28 | 29 | public string Body() { 30 | return body; 31 | } 32 | 33 | public byte[] RawBody() { 34 | return rawBody; 35 | } 36 | 37 | public bool IsOK() { 38 | return status >= 200 && status < 300 && error == null; 39 | } 40 | 41 | public string Error() { 42 | return error; 43 | } 44 | 45 | public override string ToString() { 46 | return "status: " + status.ToString() + " - response: " + body.ToString(); 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/Response.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ebf9b2f88e0974200b268829d6c5b176 3 | timeCreated: 1518286090 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/Tests.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d213ff7697d4a4a11aaaec40fb2f7bf2 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/Tests/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6298b48231fa143d38e3d1bd76254cd2 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/Tests/Editor/ClientTest.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using NSubstitute; 3 | using NUnit.Framework; 4 | 5 | namespace SimpleHTTP.Tests.Editor { 6 | public class ClientTest { 7 | private Request request; 8 | 9 | // Subject under test 10 | private Client client; 11 | 12 | [SetUp] 13 | public void SetUp() { 14 | client = new Client(); 15 | 16 | request = Substitute.For("http://127.0.0.1"); 17 | } 18 | 19 | [Test] 20 | public void TestSend() { 21 | // Execution 22 | IEnumerator e = client.Send(request); 23 | e.MoveNext(); 24 | 25 | // Expected 26 | request.Received(1).Send(); 27 | request.Received(1).Response(); 28 | } 29 | 30 | [Test] 31 | public void TestAbortNotInitialized() { 32 | // Execution 33 | client.Abort(); 34 | 35 | // Expected 36 | request.Received(0).Abort(); 37 | } 38 | 39 | [Test] 40 | public void TestAbort() { 41 | // Conditions 42 | IEnumerator e = client.Send(request); 43 | 44 | // Execution 45 | client.Abort(); 46 | 47 | // Expected 48 | request.Received(1).Abort(); 49 | } 50 | 51 | [Test] 52 | public void TestIsSuccessfulNotInitialized() { 53 | // Execution 54 | bool result = client.IsSuccessful(); 55 | 56 | // Expected 57 | Assert.IsFalse(result); 58 | } 59 | 60 | [Test] 61 | public void TestIsSuccessful() { 62 | // Conditions 63 | Response successfulResponse = new Response(200, "hello", null); 64 | Response badResponse = new Response(400, "hello", null); 65 | 66 | // Execution 67 | ReflectionHelper.SetPrivateField(typeof(Client), client, "response", successfulResponse); 68 | bool successfulResult = client.IsSuccessful(); 69 | 70 | ReflectionHelper.SetPrivateField(typeof(Client), client, "response", badResponse); 71 | bool badResult = client.IsSuccessful(); 72 | 73 | // Expected 74 | Assert.IsTrue(successfulResult); 75 | Assert.IsFalse(badResult); 76 | } 77 | 78 | [Test] 79 | public void TestError() { 80 | // Conditions 81 | ReflectionHelper.SetPrivateField(typeof(Client), client, "error", "Oh, The humanity!"); 82 | string error = client.Error(); 83 | 84 | Assert.That(error, Is.EqualTo("Oh, The humanity!")); 85 | } 86 | 87 | [Test] 88 | public void TestResponse() { 89 | Response response = new Response(200, "hello", null); 90 | 91 | // Execution 92 | ReflectionHelper.SetPrivateField(typeof(Client), client, "response", response); 93 | 94 | Assert.That(client.Response(), Is.EqualTo(response)); 95 | } 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/Tests/Editor/ClientTest.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b4731da0211714d21adb077992139450 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/Tests/Editor/FormDataTests.cs: -------------------------------------------------------------------------------- 1 | using System.Text; 2 | using NUnit.Framework; 3 | 4 | namespace SimpleHTTP.Tests.Editor { 5 | public class FormDataTests { 6 | // Subject under test 7 | private FormData formData; 8 | 9 | [Test] 10 | public void TestAddField() { 11 | // Execution 12 | formData = new FormData(); 13 | formData.AddField("my_section", "my_value"); 14 | 15 | // Expected 16 | Assert.AreEqual(1, formData.MultipartForm().Count); 17 | Assert.AreEqual("my_section", formData.MultipartForm()[0].sectionName); 18 | Assert.AreEqual("my_value", Encoding.UTF8.GetString(formData.MultipartForm()[0].sectionData)); 19 | } 20 | 21 | [Test] 22 | public void TestAddFileWithDefaultValues() { 23 | // Setup 24 | byte[] data = Encoding.UTF8.GetBytes("my_data"); 25 | 26 | // Execution 27 | formData = new FormData(); 28 | formData.AddFile("file_name", data); 29 | 30 | // Expected 31 | Assert.AreEqual(1, formData.MultipartForm().Count); 32 | Assert.AreEqual("file_name", formData.MultipartForm()[0].fileName); 33 | Assert.AreEqual(data, formData.MultipartForm()[0].sectionData); 34 | Assert.AreEqual("application/octet-stream", formData.MultipartForm()[0].contentType); 35 | } 36 | 37 | [Test] 38 | public void TestAddFileWithContentType() { 39 | // Setup 40 | byte[] data = Encoding.UTF8.GetBytes("my_data"); 41 | 42 | // Execution 43 | formData = new FormData(); 44 | formData.AddFile("my_section", data, "file_name", "multipart/form-data"); 45 | 46 | // Expected 47 | Assert.AreEqual(1, formData.MultipartForm().Count); 48 | Assert.AreEqual("my_section", formData.MultipartForm()[0].sectionName); 49 | Assert.AreEqual("file_name", formData.MultipartForm()[0].fileName); 50 | Assert.AreEqual(data, formData.MultipartForm()[0].sectionData); 51 | Assert.AreEqual("multipart/form-data", formData.MultipartForm()[0].contentType); 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/Tests/Editor/FormDataTests.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b68a0ea92e734dfb8c8f5db2f1ca545a 3 | timeCreated: 1743291578 -------------------------------------------------------------------------------- /Assets/SimpleHTTP/Tests/Editor/NSubstitute.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/satanas/unity-simple-http/52fa9f07740772559c114d24d18aea6548793a4c/Assets/SimpleHTTP/Tests/Editor/NSubstitute.dll -------------------------------------------------------------------------------- /Assets/SimpleHTTP/Tests/Editor/NSubstitute.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 868a7a620ef4e44b7a681c9952fd4e4d 3 | PluginImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | iconMap: {} 7 | executionOrder: {} 8 | isPreloaded: 0 9 | isOverridable: 0 10 | platformData: 11 | - first: 12 | Any: 13 | second: 14 | enabled: 0 15 | settings: {} 16 | - first: 17 | Editor: Editor 18 | second: 19 | enabled: 1 20 | settings: 21 | DefaultValueInitialized: true 22 | - first: 23 | Windows Store Apps: WindowsStoreApps 24 | second: 25 | enabled: 0 26 | settings: 27 | CPU: AnyCPU 28 | userData: 29 | assetBundleName: 30 | assetBundleVariant: 31 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/Tests/Editor/ReflectionHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Reflection; 3 | 4 | namespace SimpleHTTP.Tests.Editor { 5 | public static class ReflectionHelper { 6 | public static void SetPrivateField(Type type, object instance, string fieldName, object value) { 7 | BindingFlags bindFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic 8 | | BindingFlags.Static; 9 | FieldInfo field = type.GetField(fieldName, bindFlags); 10 | 11 | // Execution 12 | field.SetValue(instance, value); 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/Tests/Editor/ReflectionHelper.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 091cff7915f7f4d71bb7a4e6903aeb20 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/Tests/Editor/ResponseTest.cs: -------------------------------------------------------------------------------- 1 | using System.Linq; 2 | using System.Text; 3 | using NUnit.Framework; 4 | 5 | namespace SimpleHTTP.Tests.Editor { 6 | public class ResponseTest { 7 | private readonly byte[] rawBody = Encoding.UTF8.GetBytes("Foo Bar"); 8 | private const string Body = "Hello World"; 9 | 10 | // Subject under test 11 | private Response response; 12 | 13 | [Test] 14 | public void TestConstructorAndGetters() { 15 | // Execution 16 | response = new Response(200, Body, rawBody); 17 | 18 | // Expected 19 | Assert.That(response.Status() == 200); 20 | Assert.That(response.Body() == Body); 21 | Assert.That(response.RawBody().SequenceEqual(rawBody)); 22 | Assert.That(response.Error() == null); 23 | } 24 | 25 | [Test] 26 | public void TestIsOkSuccessfulRequest() { 27 | // Conditions 28 | int statusCode = 200; 29 | 30 | // Execution 31 | response = new Response(statusCode, Body, rawBody); 32 | 33 | // Expected 34 | Assert.IsTrue(response.IsOK()); 35 | } 36 | 37 | [Test] 38 | public void TestIsOkClientError() { 39 | // Conditions 40 | int statusCode = 400; 41 | 42 | // Execution 43 | response = new Response(statusCode, Body, rawBody); 44 | 45 | // Expected 46 | Assert.IsFalse(response.IsOK()); 47 | } 48 | 49 | [Test] 50 | public void TestIsOkServerError() { 51 | // Conditions 52 | int statusCode = 500; 53 | 54 | // Execution 55 | response = new Response(statusCode, Body, rawBody); 56 | 57 | // Expected 58 | Assert.IsFalse(response.IsOK()); 59 | } 60 | 61 | [Test] 62 | public void TestIsOkInformationalResponse() { 63 | // Conditions 64 | int statusCode = 100; 65 | 66 | // Execution 67 | response = new Response(statusCode, Body, rawBody); 68 | 69 | // Expected 70 | Assert.IsFalse(response.IsOK()); 71 | } 72 | 73 | [Test] 74 | public void TestSerialization() { 75 | // Conditions 76 | string title = "My Awesome Post"; 77 | string body = "Lorem Ipsum"; 78 | int userId = 12345; 79 | 80 | string json = "{\"title\": \"" + title + "\", \"body\": \"" + body + "\", \"userId\": " + userId + "}"; 81 | 82 | // Execution 83 | response = new Response(200, json, null); 84 | BlogPost post = response.To(); 85 | 86 | // Expected 87 | Assert.That(post.title == title); 88 | Assert.That(post.body == body); 89 | Assert.That(post.userId == userId); 90 | } 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/Tests/Editor/ResponseTest.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5a47ad0d97cce48309ceae2648c3cd62 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/Tests/server.py: -------------------------------------------------------------------------------- 1 | from http.server import HTTPServer, BaseHTTPRequestHandler 2 | from io import BytesIO 3 | 4 | class SimpleHTTPServer(BaseHTTPRequestHandler): 5 | 6 | def do_POST(self): 7 | print('HTTP POST:') 8 | print('Authorization: ' + self.headers['Authorization']) 9 | print('Content-Type: ' + self.headers['Content-Type']) 10 | print('X-Api-Version: ' + self.headers['X-Api-Version']) 11 | 12 | content_length = int(self.headers['Content-Length']) 13 | body = self.rfile.read(content_length) 14 | print('Body: ' + body.decode('utf-8')) 15 | 16 | self.send_response(200) 17 | self.end_headers() 18 | response = BytesIO() 19 | response.write(str.encode('Ok')) 20 | self.wfile.write(response.getvalue()) 21 | 22 | print('Serving in port 8000...') 23 | httpd = HTTPServer(('localhost', 8000), SimpleHTTPServer) 24 | httpd.serve_forever() 25 | 26 | -------------------------------------------------------------------------------- /Assets/SimpleHTTP/Tests/server.py.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cde810ffc8abb43a0a001a8eb75f38ed 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | 3 | Copyright 2018 Wil Alvarez 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | -------------------------------------------------------------------------------- /Packages/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "com.unity.ide.rider": "3.0.35", 4 | "com.unity.test-framework": "1.1.33", 5 | "com.unity.toolchain.macos-arm64-linux-x86_64": "2.0.4", 6 | "com.unity.ugui": "1.0.0", 7 | "com.unity.modules.ai": "1.0.0", 8 | "com.unity.modules.androidjni": "1.0.0", 9 | "com.unity.modules.animation": "1.0.0", 10 | "com.unity.modules.assetbundle": "1.0.0", 11 | "com.unity.modules.audio": "1.0.0", 12 | "com.unity.modules.cloth": "1.0.0", 13 | "com.unity.modules.director": "1.0.0", 14 | "com.unity.modules.imageconversion": "1.0.0", 15 | "com.unity.modules.imgui": "1.0.0", 16 | "com.unity.modules.jsonserialize": "1.0.0", 17 | "com.unity.modules.particlesystem": "1.0.0", 18 | "com.unity.modules.physics": "1.0.0", 19 | "com.unity.modules.physics2d": "1.0.0", 20 | "com.unity.modules.screencapture": "1.0.0", 21 | "com.unity.modules.terrain": "1.0.0", 22 | "com.unity.modules.terrainphysics": "1.0.0", 23 | "com.unity.modules.tilemap": "1.0.0", 24 | "com.unity.modules.ui": "1.0.0", 25 | "com.unity.modules.uielements": "1.0.0", 26 | "com.unity.modules.umbra": "1.0.0", 27 | "com.unity.modules.unityanalytics": "1.0.0", 28 | "com.unity.modules.unitywebrequest": "1.0.0", 29 | "com.unity.modules.unitywebrequestassetbundle": "1.0.0", 30 | "com.unity.modules.unitywebrequestaudio": "1.0.0", 31 | "com.unity.modules.unitywebrequesttexture": "1.0.0", 32 | "com.unity.modules.unitywebrequestwww": "1.0.0", 33 | "com.unity.modules.vehicles": "1.0.0", 34 | "com.unity.modules.video": "1.0.0", 35 | "com.unity.modules.vr": "1.0.0", 36 | "com.unity.modules.wind": "1.0.0", 37 | "com.unity.modules.xr": "1.0.0" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Packages/packages-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "com.unity.asset-store-tools": { 4 | "version": "file:com.unity.asset-store-tools", 5 | "depth": 0, 6 | "source": "embedded", 7 | "dependencies": { 8 | "com.unity.nuget.newtonsoft-json": "3.2.1" 9 | } 10 | }, 11 | "com.unity.ext.nunit": { 12 | "version": "1.0.6", 13 | "depth": 1, 14 | "source": "registry", 15 | "dependencies": {}, 16 | "url": "https://packages.unity.com" 17 | }, 18 | "com.unity.ide.rider": { 19 | "version": "3.0.35", 20 | "depth": 0, 21 | "source": "registry", 22 | "dependencies": { 23 | "com.unity.ext.nunit": "1.0.6" 24 | }, 25 | "url": "https://packages.unity.com" 26 | }, 27 | "com.unity.nuget.newtonsoft-json": { 28 | "version": "3.2.1", 29 | "depth": 1, 30 | "source": "registry", 31 | "dependencies": {}, 32 | "url": "https://packages.unity.com" 33 | }, 34 | "com.unity.sysroot": { 35 | "version": "2.0.10", 36 | "depth": 1, 37 | "source": "registry", 38 | "dependencies": {}, 39 | "url": "https://packages.unity.com" 40 | }, 41 | "com.unity.sysroot.linux-x86_64": { 42 | "version": "2.0.9", 43 | "depth": 1, 44 | "source": "registry", 45 | "dependencies": { 46 | "com.unity.sysroot": "2.0.10" 47 | }, 48 | "url": "https://packages.unity.com" 49 | }, 50 | "com.unity.test-framework": { 51 | "version": "1.1.33", 52 | "depth": 0, 53 | "source": "registry", 54 | "dependencies": { 55 | "com.unity.ext.nunit": "1.0.6", 56 | "com.unity.modules.imgui": "1.0.0", 57 | "com.unity.modules.jsonserialize": "1.0.0" 58 | }, 59 | "url": "https://packages.unity.com" 60 | }, 61 | "com.unity.toolchain.macos-arm64-linux-x86_64": { 62 | "version": "2.0.4", 63 | "depth": 0, 64 | "source": "registry", 65 | "dependencies": { 66 | "com.unity.sysroot": "2.0.10", 67 | "com.unity.sysroot.linux-x86_64": "2.0.9" 68 | }, 69 | "url": "https://packages.unity.com" 70 | }, 71 | "com.unity.ugui": { 72 | "version": "1.0.0", 73 | "depth": 0, 74 | "source": "builtin", 75 | "dependencies": { 76 | "com.unity.modules.ui": "1.0.0", 77 | "com.unity.modules.imgui": "1.0.0" 78 | } 79 | }, 80 | "com.unity.modules.ai": { 81 | "version": "1.0.0", 82 | "depth": 0, 83 | "source": "builtin", 84 | "dependencies": {} 85 | }, 86 | "com.unity.modules.androidjni": { 87 | "version": "1.0.0", 88 | "depth": 0, 89 | "source": "builtin", 90 | "dependencies": {} 91 | }, 92 | "com.unity.modules.animation": { 93 | "version": "1.0.0", 94 | "depth": 0, 95 | "source": "builtin", 96 | "dependencies": {} 97 | }, 98 | "com.unity.modules.assetbundle": { 99 | "version": "1.0.0", 100 | "depth": 0, 101 | "source": "builtin", 102 | "dependencies": {} 103 | }, 104 | "com.unity.modules.audio": { 105 | "version": "1.0.0", 106 | "depth": 0, 107 | "source": "builtin", 108 | "dependencies": {} 109 | }, 110 | "com.unity.modules.cloth": { 111 | "version": "1.0.0", 112 | "depth": 0, 113 | "source": "builtin", 114 | "dependencies": { 115 | "com.unity.modules.physics": "1.0.0" 116 | } 117 | }, 118 | "com.unity.modules.director": { 119 | "version": "1.0.0", 120 | "depth": 0, 121 | "source": "builtin", 122 | "dependencies": { 123 | "com.unity.modules.audio": "1.0.0", 124 | "com.unity.modules.animation": "1.0.0" 125 | } 126 | }, 127 | "com.unity.modules.imageconversion": { 128 | "version": "1.0.0", 129 | "depth": 0, 130 | "source": "builtin", 131 | "dependencies": {} 132 | }, 133 | "com.unity.modules.imgui": { 134 | "version": "1.0.0", 135 | "depth": 0, 136 | "source": "builtin", 137 | "dependencies": {} 138 | }, 139 | "com.unity.modules.jsonserialize": { 140 | "version": "1.0.0", 141 | "depth": 0, 142 | "source": "builtin", 143 | "dependencies": {} 144 | }, 145 | "com.unity.modules.particlesystem": { 146 | "version": "1.0.0", 147 | "depth": 0, 148 | "source": "builtin", 149 | "dependencies": {} 150 | }, 151 | "com.unity.modules.physics": { 152 | "version": "1.0.0", 153 | "depth": 0, 154 | "source": "builtin", 155 | "dependencies": {} 156 | }, 157 | "com.unity.modules.physics2d": { 158 | "version": "1.0.0", 159 | "depth": 0, 160 | "source": "builtin", 161 | "dependencies": {} 162 | }, 163 | "com.unity.modules.screencapture": { 164 | "version": "1.0.0", 165 | "depth": 0, 166 | "source": "builtin", 167 | "dependencies": { 168 | "com.unity.modules.imageconversion": "1.0.0" 169 | } 170 | }, 171 | "com.unity.modules.subsystems": { 172 | "version": "1.0.0", 173 | "depth": 1, 174 | "source": "builtin", 175 | "dependencies": { 176 | "com.unity.modules.jsonserialize": "1.0.0" 177 | } 178 | }, 179 | "com.unity.modules.terrain": { 180 | "version": "1.0.0", 181 | "depth": 0, 182 | "source": "builtin", 183 | "dependencies": {} 184 | }, 185 | "com.unity.modules.terrainphysics": { 186 | "version": "1.0.0", 187 | "depth": 0, 188 | "source": "builtin", 189 | "dependencies": { 190 | "com.unity.modules.physics": "1.0.0", 191 | "com.unity.modules.terrain": "1.0.0" 192 | } 193 | }, 194 | "com.unity.modules.tilemap": { 195 | "version": "1.0.0", 196 | "depth": 0, 197 | "source": "builtin", 198 | "dependencies": { 199 | "com.unity.modules.physics2d": "1.0.0" 200 | } 201 | }, 202 | "com.unity.modules.ui": { 203 | "version": "1.0.0", 204 | "depth": 0, 205 | "source": "builtin", 206 | "dependencies": {} 207 | }, 208 | "com.unity.modules.uielements": { 209 | "version": "1.0.0", 210 | "depth": 0, 211 | "source": "builtin", 212 | "dependencies": { 213 | "com.unity.modules.ui": "1.0.0", 214 | "com.unity.modules.imgui": "1.0.0", 215 | "com.unity.modules.jsonserialize": "1.0.0" 216 | } 217 | }, 218 | "com.unity.modules.umbra": { 219 | "version": "1.0.0", 220 | "depth": 0, 221 | "source": "builtin", 222 | "dependencies": {} 223 | }, 224 | "com.unity.modules.unityanalytics": { 225 | "version": "1.0.0", 226 | "depth": 0, 227 | "source": "builtin", 228 | "dependencies": { 229 | "com.unity.modules.unitywebrequest": "1.0.0", 230 | "com.unity.modules.jsonserialize": "1.0.0" 231 | } 232 | }, 233 | "com.unity.modules.unitywebrequest": { 234 | "version": "1.0.0", 235 | "depth": 0, 236 | "source": "builtin", 237 | "dependencies": {} 238 | }, 239 | "com.unity.modules.unitywebrequestassetbundle": { 240 | "version": "1.0.0", 241 | "depth": 0, 242 | "source": "builtin", 243 | "dependencies": { 244 | "com.unity.modules.assetbundle": "1.0.0", 245 | "com.unity.modules.unitywebrequest": "1.0.0" 246 | } 247 | }, 248 | "com.unity.modules.unitywebrequestaudio": { 249 | "version": "1.0.0", 250 | "depth": 0, 251 | "source": "builtin", 252 | "dependencies": { 253 | "com.unity.modules.unitywebrequest": "1.0.0", 254 | "com.unity.modules.audio": "1.0.0" 255 | } 256 | }, 257 | "com.unity.modules.unitywebrequesttexture": { 258 | "version": "1.0.0", 259 | "depth": 0, 260 | "source": "builtin", 261 | "dependencies": { 262 | "com.unity.modules.unitywebrequest": "1.0.0", 263 | "com.unity.modules.imageconversion": "1.0.0" 264 | } 265 | }, 266 | "com.unity.modules.unitywebrequestwww": { 267 | "version": "1.0.0", 268 | "depth": 0, 269 | "source": "builtin", 270 | "dependencies": { 271 | "com.unity.modules.unitywebrequest": "1.0.0", 272 | "com.unity.modules.unitywebrequestassetbundle": "1.0.0", 273 | "com.unity.modules.unitywebrequestaudio": "1.0.0", 274 | "com.unity.modules.audio": "1.0.0", 275 | "com.unity.modules.assetbundle": "1.0.0", 276 | "com.unity.modules.imageconversion": "1.0.0" 277 | } 278 | }, 279 | "com.unity.modules.vehicles": { 280 | "version": "1.0.0", 281 | "depth": 0, 282 | "source": "builtin", 283 | "dependencies": { 284 | "com.unity.modules.physics": "1.0.0" 285 | } 286 | }, 287 | "com.unity.modules.video": { 288 | "version": "1.0.0", 289 | "depth": 0, 290 | "source": "builtin", 291 | "dependencies": { 292 | "com.unity.modules.audio": "1.0.0", 293 | "com.unity.modules.ui": "1.0.0", 294 | "com.unity.modules.unitywebrequest": "1.0.0" 295 | } 296 | }, 297 | "com.unity.modules.vr": { 298 | "version": "1.0.0", 299 | "depth": 0, 300 | "source": "builtin", 301 | "dependencies": { 302 | "com.unity.modules.jsonserialize": "1.0.0", 303 | "com.unity.modules.physics": "1.0.0", 304 | "com.unity.modules.xr": "1.0.0" 305 | } 306 | }, 307 | "com.unity.modules.wind": { 308 | "version": "1.0.0", 309 | "depth": 0, 310 | "source": "builtin", 311 | "dependencies": {} 312 | }, 313 | "com.unity.modules.xr": { 314 | "version": "1.0.0", 315 | "depth": 0, 316 | "source": "builtin", 317 | "dependencies": { 318 | "com.unity.modules.physics": "1.0.0", 319 | "com.unity.modules.jsonserialize": "1.0.0", 320 | "com.unity.modules.subsystems": "1.0.0" 321 | } 322 | } 323 | } 324 | } 325 | -------------------------------------------------------------------------------- /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: 0 12 | m_VirtualVoiceCount: 512 13 | m_RealVoiceCount: 32 14 | m_SpatializerPlugin: 15 | m_DisableAudio: 0 16 | m_VirtualizeEffects: 1 17 | -------------------------------------------------------------------------------- /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: 3 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_EnablePCM: 1 18 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 19 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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: 3 7 | m_ExternalVersionControlSupport: Visible Meta Files 8 | m_SerializationMode: 2 9 | m_DefaultBehaviorMode: 1 10 | m_SpritePackerMode: 2 11 | m_SpritePackerPaddingPower: 1 12 | m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd 13 | m_ProjectGenerationRootNamespace: 14 | m_UserGeneratedProjectSuffix: 15 | -------------------------------------------------------------------------------- /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 | m_PreloadedShaders: [] 39 | m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, 40 | type: 0} 41 | m_CustomRenderPipeline: {fileID: 0} 42 | m_TransparencySortMode: 0 43 | m_TransparencySortAxis: {x: 0, y: 0, z: 1} 44 | m_DefaultRenderingPath: 1 45 | m_DefaultMobileRenderingPath: 1 46 | m_TierSettings: [] 47 | m_LightmapStripping: 0 48 | m_FogStripping: 0 49 | m_InstancingStripping: 0 50 | m_LightmapKeepPlain: 1 51 | m_LightmapKeepDirCombined: 1 52 | m_LightmapKeepDynamicPlain: 1 53 | m_LightmapKeepDynamicDirCombined: 1 54 | m_LightmapKeepShadowMask: 1 55 | m_LightmapKeepSubtractive: 1 56 | m_FogKeepLinear: 1 57 | m_FogKeepExp: 1 58 | m_FogKeepExp2: 1 59 | m_AlbedoSwatchInfos: [] 60 | m_LightsUseLinearIntensity: 0 61 | m_LightsUseColorTemperature: 0 62 | -------------------------------------------------------------------------------- /ProjectSettings/InputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!13 &1 4 | InputManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Axes: 8 | - serializedVersion: 3 9 | m_Name: Horizontal 10 | descriptiveName: 11 | descriptiveNegativeName: 12 | negativeButton: left 13 | positiveButton: right 14 | altNegativeButton: a 15 | altPositiveButton: d 16 | gravity: 3 17 | dead: 0.001 18 | sensitivity: 3 19 | snap: 1 20 | invert: 0 21 | type: 0 22 | axis: 0 23 | joyNum: 0 24 | - serializedVersion: 3 25 | m_Name: Vertical 26 | descriptiveName: 27 | descriptiveNegativeName: 28 | negativeButton: down 29 | positiveButton: up 30 | altNegativeButton: s 31 | altPositiveButton: w 32 | gravity: 3 33 | dead: 0.001 34 | sensitivity: 3 35 | snap: 1 36 | invert: 0 37 | type: 0 38 | axis: 0 39 | joyNum: 0 40 | - serializedVersion: 3 41 | m_Name: Fire1 42 | descriptiveName: 43 | descriptiveNegativeName: 44 | negativeButton: 45 | positiveButton: left ctrl 46 | altNegativeButton: 47 | altPositiveButton: mouse 0 48 | gravity: 1000 49 | dead: 0.001 50 | sensitivity: 1000 51 | snap: 0 52 | invert: 0 53 | type: 0 54 | axis: 0 55 | joyNum: 0 56 | - serializedVersion: 3 57 | m_Name: Fire2 58 | descriptiveName: 59 | descriptiveNegativeName: 60 | negativeButton: 61 | positiveButton: left alt 62 | altNegativeButton: 63 | altPositiveButton: mouse 1 64 | gravity: 1000 65 | dead: 0.001 66 | sensitivity: 1000 67 | snap: 0 68 | invert: 0 69 | type: 0 70 | axis: 0 71 | joyNum: 0 72 | - serializedVersion: 3 73 | m_Name: Fire3 74 | descriptiveName: 75 | descriptiveNegativeName: 76 | negativeButton: 77 | positiveButton: left shift 78 | altNegativeButton: 79 | altPositiveButton: mouse 2 80 | gravity: 1000 81 | dead: 0.001 82 | sensitivity: 1000 83 | snap: 0 84 | invert: 0 85 | type: 0 86 | axis: 0 87 | joyNum: 0 88 | - serializedVersion: 3 89 | m_Name: Jump 90 | descriptiveName: 91 | descriptiveNegativeName: 92 | negativeButton: 93 | positiveButton: space 94 | altNegativeButton: 95 | altPositiveButton: 96 | gravity: 1000 97 | dead: 0.001 98 | sensitivity: 1000 99 | snap: 0 100 | invert: 0 101 | type: 0 102 | axis: 0 103 | joyNum: 0 104 | - serializedVersion: 3 105 | m_Name: Mouse X 106 | descriptiveName: 107 | descriptiveNegativeName: 108 | negativeButton: 109 | positiveButton: 110 | altNegativeButton: 111 | altPositiveButton: 112 | gravity: 0 113 | dead: 0 114 | sensitivity: 0.1 115 | snap: 0 116 | invert: 0 117 | type: 1 118 | axis: 0 119 | joyNum: 0 120 | - serializedVersion: 3 121 | m_Name: Mouse Y 122 | descriptiveName: 123 | descriptiveNegativeName: 124 | negativeButton: 125 | positiveButton: 126 | altNegativeButton: 127 | altPositiveButton: 128 | gravity: 0 129 | dead: 0 130 | sensitivity: 0.1 131 | snap: 0 132 | invert: 0 133 | type: 1 134 | axis: 1 135 | joyNum: 0 136 | - serializedVersion: 3 137 | m_Name: Mouse ScrollWheel 138 | descriptiveName: 139 | descriptiveNegativeName: 140 | negativeButton: 141 | positiveButton: 142 | altNegativeButton: 143 | altPositiveButton: 144 | gravity: 0 145 | dead: 0 146 | sensitivity: 0.1 147 | snap: 0 148 | invert: 0 149 | type: 1 150 | axis: 2 151 | joyNum: 0 152 | - serializedVersion: 3 153 | m_Name: Horizontal 154 | descriptiveName: 155 | descriptiveNegativeName: 156 | negativeButton: 157 | positiveButton: 158 | altNegativeButton: 159 | altPositiveButton: 160 | gravity: 0 161 | dead: 0.19 162 | sensitivity: 1 163 | snap: 0 164 | invert: 0 165 | type: 2 166 | axis: 0 167 | joyNum: 0 168 | - serializedVersion: 3 169 | m_Name: Vertical 170 | descriptiveName: 171 | descriptiveNegativeName: 172 | negativeButton: 173 | positiveButton: 174 | altNegativeButton: 175 | altPositiveButton: 176 | gravity: 0 177 | dead: 0.19 178 | sensitivity: 1 179 | snap: 0 180 | invert: 1 181 | type: 2 182 | axis: 1 183 | joyNum: 0 184 | - serializedVersion: 3 185 | m_Name: Fire1 186 | descriptiveName: 187 | descriptiveNegativeName: 188 | negativeButton: 189 | positiveButton: joystick button 0 190 | altNegativeButton: 191 | altPositiveButton: 192 | gravity: 1000 193 | dead: 0.001 194 | sensitivity: 1000 195 | snap: 0 196 | invert: 0 197 | type: 0 198 | axis: 0 199 | joyNum: 0 200 | - serializedVersion: 3 201 | m_Name: Fire2 202 | descriptiveName: 203 | descriptiveNegativeName: 204 | negativeButton: 205 | positiveButton: joystick button 1 206 | altNegativeButton: 207 | altPositiveButton: 208 | gravity: 1000 209 | dead: 0.001 210 | sensitivity: 1000 211 | snap: 0 212 | invert: 0 213 | type: 0 214 | axis: 0 215 | joyNum: 0 216 | - serializedVersion: 3 217 | m_Name: Fire3 218 | descriptiveName: 219 | descriptiveNegativeName: 220 | negativeButton: 221 | positiveButton: joystick button 2 222 | altNegativeButton: 223 | altPositiveButton: 224 | gravity: 1000 225 | dead: 0.001 226 | sensitivity: 1000 227 | snap: 0 228 | invert: 0 229 | type: 0 230 | axis: 0 231 | joyNum: 0 232 | - serializedVersion: 3 233 | m_Name: Jump 234 | descriptiveName: 235 | descriptiveNegativeName: 236 | negativeButton: 237 | positiveButton: joystick button 3 238 | altNegativeButton: 239 | altPositiveButton: 240 | gravity: 1000 241 | dead: 0.001 242 | sensitivity: 1000 243 | snap: 0 244 | invert: 0 245 | type: 0 246 | axis: 0 247 | joyNum: 0 248 | - serializedVersion: 3 249 | m_Name: Submit 250 | descriptiveName: 251 | descriptiveNegativeName: 252 | negativeButton: 253 | positiveButton: return 254 | altNegativeButton: 255 | altPositiveButton: joystick button 0 256 | gravity: 1000 257 | dead: 0.001 258 | sensitivity: 1000 259 | snap: 0 260 | invert: 0 261 | type: 0 262 | axis: 0 263 | joyNum: 0 264 | - serializedVersion: 3 265 | m_Name: Submit 266 | descriptiveName: 267 | descriptiveNegativeName: 268 | negativeButton: 269 | positiveButton: enter 270 | altNegativeButton: 271 | altPositiveButton: space 272 | gravity: 1000 273 | dead: 0.001 274 | sensitivity: 1000 275 | snap: 0 276 | invert: 0 277 | type: 0 278 | axis: 0 279 | joyNum: 0 280 | - serializedVersion: 3 281 | m_Name: Cancel 282 | descriptiveName: 283 | descriptiveNegativeName: 284 | negativeButton: 285 | positiveButton: escape 286 | altNegativeButton: 287 | altPositiveButton: joystick button 1 288 | gravity: 1000 289 | dead: 0.001 290 | sensitivity: 1000 291 | snap: 0 292 | invert: 0 293 | type: 0 294 | axis: 0 295 | joyNum: 0 296 | -------------------------------------------------------------------------------- /ProjectSettings/MemorySettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!387306366 &1 4 | MemorySettings: 5 | m_ObjectHideFlags: 0 6 | m_EditorMemorySettings: 7 | m_MainAllocatorBlockSize: -1 8 | m_ThreadAllocatorBlockSize: -1 9 | m_MainGfxBlockSize: -1 10 | m_ThreadGfxBlockSize: -1 11 | m_CacheBlockSize: -1 12 | m_TypetreeBlockSize: -1 13 | m_ProfilerBlockSize: -1 14 | m_ProfilerEditorBlockSize: -1 15 | m_BucketAllocatorGranularity: -1 16 | m_BucketAllocatorBucketsCount: -1 17 | m_BucketAllocatorBlockSize: -1 18 | m_BucketAllocatorBlockCount: -1 19 | m_ProfilerBucketAllocatorGranularity: -1 20 | m_ProfilerBucketAllocatorBucketsCount: -1 21 | m_ProfilerBucketAllocatorBlockSize: -1 22 | m_ProfilerBucketAllocatorBlockCount: -1 23 | m_TempAllocatorSizeMain: -1 24 | m_JobTempAllocatorBlockSize: -1 25 | m_BackgroundJobTempAllocatorBlockSize: -1 26 | m_JobTempAllocatorReducedBlockSize: -1 27 | m_TempAllocatorSizeGIBakingWorker: -1 28 | m_TempAllocatorSizeNavMeshWorker: -1 29 | m_TempAllocatorSizeAudioWorker: -1 30 | m_TempAllocatorSizeCloudWorker: -1 31 | m_TempAllocatorSizeGfx: -1 32 | m_TempAllocatorSizeJobWorker: -1 33 | m_TempAllocatorSizeBackgroundWorker: -1 34 | m_TempAllocatorSizePreloadManager: -1 35 | m_PlatformMemorySettings: {} 36 | -------------------------------------------------------------------------------- /ProjectSettings/NavMeshAreas.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!126 &1 4 | NavMeshProjectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | areas: 8 | - name: Walkable 9 | cost: 1 10 | - name: Not Walkable 11 | cost: 1 12 | - name: Jump 13 | cost: 2 14 | - name: 15 | cost: 1 16 | - name: 17 | cost: 1 18 | - name: 19 | cost: 1 20 | - name: 21 | cost: 1 22 | - name: 23 | cost: 1 24 | - name: 25 | cost: 1 26 | - name: 27 | cost: 1 28 | - name: 29 | cost: 1 30 | - name: 31 | cost: 1 32 | - name: 33 | cost: 1 34 | - name: 35 | cost: 1 36 | - name: 37 | cost: 1 38 | - name: 39 | cost: 1 40 | - name: 41 | cost: 1 42 | - name: 43 | cost: 1 44 | - name: 45 | cost: 1 46 | - name: 47 | cost: 1 48 | - name: 49 | cost: 1 50 | - name: 51 | cost: 1 52 | - name: 53 | cost: 1 54 | - name: 55 | cost: 1 56 | - name: 57 | cost: 1 58 | - name: 59 | cost: 1 60 | - name: 61 | cost: 1 62 | - name: 63 | cost: 1 64 | - name: 65 | cost: 1 66 | - name: 67 | cost: 1 68 | - name: 69 | cost: 1 70 | - name: 71 | cost: 1 72 | m_LastAgentTypeID: -887442657 73 | m_Settings: 74 | - serializedVersion: 2 75 | agentTypeID: 0 76 | agentRadius: 0.5 77 | agentHeight: 2 78 | agentSlope: 45 79 | agentClimb: 0.75 80 | ledgeDropHeight: 0 81 | maxJumpAcrossDistance: 0 82 | minRegionArea: 2 83 | manualCellSize: 0 84 | cellSize: 0.16666667 85 | manualTileSize: 0 86 | tileSize: 256 87 | accuratePlacement: 0 88 | m_SettingNames: 89 | - Humanoid 90 | -------------------------------------------------------------------------------- /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/PackageManagerSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &1 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 53 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0} 13 | m_Name: 14 | m_EditorClassIdentifier: 15 | m_EnablePreReleasePackages: 0 16 | m_AdvancedSettingsExpanded: 1 17 | m_ScopedRegistriesSettingsExpanded: 1 18 | m_SeeAllPackageVersions: 0 19 | m_DismissPreviewPackagesInUse: 0 20 | oneTimeWarningShown: 0 21 | m_Registries: 22 | - m_Id: main 23 | m_Name: 24 | m_Url: https://packages.unity.com 25 | m_Scopes: [] 26 | m_IsDefault: 1 27 | m_Capabilities: 7 28 | m_ConfigSource: 0 29 | m_UserSelectedRegistryName: 30 | m_UserAddingNewScopedRegistry: 0 31 | m_RegistryInfoDraft: 32 | m_Modified: 0 33 | m_ErrorMessage: 34 | m_UserModificationsInstanceId: -864 35 | m_OriginalInstanceId: -866 36 | m_LoadAssets: 0 37 | -------------------------------------------------------------------------------- /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: 3 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_QueriesHitTriggers: 1 23 | m_QueriesStartInColliders: 1 24 | m_ChangeStopsCallbacks: 0 25 | m_CallbacksOnDisable: 1 26 | m_AlwaysShowColliders: 0 27 | m_ShowColliderSleep: 1 28 | m_ShowColliderContacts: 0 29 | m_ShowColliderAABB: 0 30 | m_ContactArrowScale: 0.2 31 | m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} 32 | m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} 33 | m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} 34 | m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} 35 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 36 | -------------------------------------------------------------------------------- /ProjectSettings/PresetManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1386491679 &1 4 | PresetManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_DefaultPresets: {} 8 | -------------------------------------------------------------------------------- /ProjectSettings/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: 26 7 | productGUID: deede38c3b0bc45ca9b01a7266c062e6 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: test 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 | unsupportedMSAAFallback: 0 52 | m_SpriteBatchVertexThreshold: 300 53 | m_MTRendering: 1 54 | mipStripping: 0 55 | numberOfMipsStripped: 0 56 | numberOfMipsStrippedPerMipmapLimitGroup: {} 57 | m_StackTraceTypes: 010000000100000001000000010000000100000001000000 58 | iosShowActivityIndicatorOnLoading: -1 59 | androidShowActivityIndicatorOnLoading: -1 60 | iosUseCustomAppBackgroundBehavior: 0 61 | allowedAutorotateToPortrait: 1 62 | allowedAutorotateToPortraitUpsideDown: 1 63 | allowedAutorotateToLandscapeRight: 1 64 | allowedAutorotateToLandscapeLeft: 1 65 | useOSAutorotation: 1 66 | use32BitDisplayBuffer: 1 67 | preserveFramebufferAlpha: 0 68 | disableDepthAndStencilBuffers: 0 69 | androidStartInFullscreen: 1 70 | androidRenderOutsideSafeArea: 1 71 | androidUseSwappy: 0 72 | androidBlitType: 0 73 | androidResizableWindow: 0 74 | androidDefaultWindowWidth: 1920 75 | androidDefaultWindowHeight: 1080 76 | androidMinimumWindowWidth: 400 77 | androidMinimumWindowHeight: 300 78 | androidFullscreenMode: 1 79 | androidAutoRotationBehavior: 1 80 | defaultIsNativeResolution: 1 81 | macRetinaSupport: 1 82 | runInBackground: 1 83 | captureSingleScreen: 0 84 | muteOtherAudioSources: 0 85 | Prepare IOS For Recording: 0 86 | Force IOS Speakers When Recording: 0 87 | deferSystemGesturesMode: 0 88 | hideHomeButton: 0 89 | submitAnalytics: 1 90 | usePlayerLog: 1 91 | dedicatedServerOptimizations: 0 92 | bakeCollisionMeshes: 0 93 | forceSingleInstance: 0 94 | useFlipModelSwapchain: 1 95 | resizableWindow: 0 96 | useMacAppStoreValidation: 0 97 | macAppStoreCategory: public.app-category.games 98 | gpuSkinning: 0 99 | xboxPIXTextureCapture: 0 100 | xboxEnableAvatar: 0 101 | xboxEnableKinect: 0 102 | xboxEnableKinectAutoTracking: 0 103 | xboxEnableFitness: 0 104 | visibleInBackground: 0 105 | allowFullscreenSwitch: 1 106 | fullscreenMode: 1 107 | xboxSpeechDB: 0 108 | xboxEnableHeadOrientation: 0 109 | xboxEnableGuest: 0 110 | xboxEnablePIXSampling: 0 111 | metalFramebufferOnly: 0 112 | xboxOneResolution: 0 113 | xboxOneSResolution: 0 114 | xboxOneXResolution: 3 115 | xboxOneMonoLoggingLevel: 0 116 | xboxOneLoggingLevel: 1 117 | xboxOneDisableEsram: 0 118 | xboxOneEnableTypeOptimization: 0 119 | xboxOnePresentImmediateThreshold: 0 120 | switchQueueCommandMemory: 1048576 121 | switchQueueControlMemory: 16384 122 | switchQueueComputeMemory: 262144 123 | switchNVNShaderPoolsGranularity: 33554432 124 | switchNVNDefaultPoolsGranularity: 16777216 125 | switchNVNOtherPoolsGranularity: 16777216 126 | switchGpuScratchPoolGranularity: 2097152 127 | switchAllowGpuScratchShrinking: 0 128 | switchNVNMaxPublicTextureIDCount: 0 129 | switchNVNMaxPublicSamplerIDCount: 0 130 | switchNVNGraphicsFirmwareMemory: 32 131 | switchMaxWorkerMultiple: 8 132 | stadiaPresentMode: 0 133 | stadiaTargetFramerate: 0 134 | vulkanNumSwapchainBuffers: 3 135 | vulkanEnableSetSRGBWrite: 0 136 | vulkanEnablePreTransform: 0 137 | vulkanEnableLateAcquireNextImage: 0 138 | vulkanEnableCommandBufferRecycling: 1 139 | loadStoreDebugModeEnabled: 0 140 | visionOSBundleVersion: 1.0 141 | tvOSBundleVersion: 1.0 142 | bundleVersion: 1.0 143 | preloadedAssets: [] 144 | metroInputSource: 0 145 | wsaTransparentSwapchain: 0 146 | m_HolographicPauseOnTrackingLoss: 1 147 | xboxOneDisableKinectGpuReservation: 0 148 | xboxOneEnable7thCore: 0 149 | vrSettings: 150 | enable360StereoCapture: 0 151 | isWsaHolographicRemotingEnabled: 0 152 | enableFrameTimingStats: 0 153 | enableOpenGLProfilerGPURecorders: 1 154 | allowHDRDisplaySupport: 0 155 | useHDRDisplay: 0 156 | hdrBitDepth: 0 157 | m_ColorGamuts: 00000000 158 | targetPixelDensity: 30 159 | resolutionScalingMode: 0 160 | resetResolutionOnWindowResize: 0 161 | androidSupportedAspectRatio: 1 162 | androidMaxAspectRatio: 2.1 163 | applicationIdentifier: 164 | Standalone: com.DefaultCompany.test 165 | buildNumber: 166 | Standalone: 0 167 | VisionOS: 0 168 | iPhone: 0 169 | tvOS: 0 170 | overrideDefaultApplicationIdentifier: 0 171 | AndroidBundleVersionCode: 1 172 | AndroidMinSdkVersion: 22 173 | AndroidTargetSdkVersion: 0 174 | AndroidPreferredInstallLocation: 1 175 | aotOptions: 176 | stripEngineCode: 1 177 | iPhoneStrippingLevel: 0 178 | iPhoneScriptCallOptimization: 0 179 | ForceInternetPermission: 0 180 | ForceSDCardPermission: 0 181 | CreateWallpaper: 0 182 | APKExpansionFiles: 0 183 | keepLoadedShadersAlive: 0 184 | StripUnusedMeshComponents: 0 185 | strictShaderVariantMatching: 0 186 | VertexChannelCompressionMask: 214 187 | iPhoneSdkVersion: 988 188 | iOSTargetOSVersionString: 12.0 189 | tvOSSdkVersion: 0 190 | tvOSRequireExtendedGameController: 0 191 | tvOSTargetOSVersionString: 12.0 192 | VisionOSSdkVersion: 0 193 | VisionOSTargetOSVersionString: 1.0 194 | uIPrerenderedIcon: 0 195 | uIRequiresPersistentWiFi: 0 196 | uIRequiresFullScreen: 1 197 | uIStatusBarHidden: 1 198 | uIExitOnSuspend: 0 199 | uIStatusBarStyle: 0 200 | appleTVSplashScreen: {fileID: 0} 201 | appleTVSplashScreen2x: {fileID: 0} 202 | tvOSSmallIconLayers: [] 203 | tvOSSmallIconLayers2x: [] 204 | tvOSLargeIconLayers: [] 205 | tvOSLargeIconLayers2x: [] 206 | tvOSTopShelfImageLayers: [] 207 | tvOSTopShelfImageLayers2x: [] 208 | tvOSTopShelfImageWideLayers: [] 209 | tvOSTopShelfImageWideLayers2x: [] 210 | iOSLaunchScreenType: 0 211 | iOSLaunchScreenPortrait: {fileID: 0} 212 | iOSLaunchScreenLandscape: {fileID: 0} 213 | iOSLaunchScreenBackgroundColor: 214 | serializedVersion: 2 215 | rgba: 0 216 | iOSLaunchScreenFillPct: 100 217 | iOSLaunchScreenSize: 100 218 | iOSLaunchScreenCustomXibPath: 219 | iOSLaunchScreeniPadType: 0 220 | iOSLaunchScreeniPadImage: {fileID: 0} 221 | iOSLaunchScreeniPadBackgroundColor: 222 | serializedVersion: 2 223 | rgba: 0 224 | iOSLaunchScreeniPadFillPct: 100 225 | iOSLaunchScreeniPadSize: 100 226 | iOSLaunchScreeniPadCustomXibPath: 227 | iOSLaunchScreenCustomStoryboardPath: 228 | iOSLaunchScreeniPadCustomStoryboardPath: 229 | iOSDeviceRequirements: [] 230 | iOSURLSchemes: [] 231 | macOSURLSchemes: [] 232 | iOSBackgroundModes: 0 233 | iOSMetalForceHardShadows: 0 234 | metalEditorSupport: 0 235 | metalAPIValidation: 1 236 | metalCompileShaderBinary: 0 237 | iOSRenderExtraFrameOnPause: 0 238 | iosCopyPluginsCodeInsteadOfSymlink: 0 239 | appleDeveloperTeamID: 240 | iOSManualSigningProvisioningProfileID: 241 | tvOSManualSigningProvisioningProfileID: 242 | VisionOSManualSigningProvisioningProfileID: 243 | iOSManualSigningProvisioningProfileType: 0 244 | tvOSManualSigningProvisioningProfileType: 0 245 | VisionOSManualSigningProvisioningProfileType: 0 246 | appleEnableAutomaticSigning: 0 247 | iOSRequireARKit: 0 248 | iOSAutomaticallyDetectAndAddCapabilities: 1 249 | appleEnableProMotion: 0 250 | shaderPrecisionModel: 0 251 | clonedFromGUID: 00000000000000000000000000000000 252 | templatePackageId: 253 | templateDefaultScene: 254 | useCustomMainManifest: 0 255 | useCustomLauncherManifest: 0 256 | useCustomMainGradleTemplate: 0 257 | useCustomLauncherGradleManifest: 0 258 | useCustomBaseGradleTemplate: 0 259 | useCustomGradlePropertiesTemplate: 0 260 | useCustomGradleSettingsTemplate: 0 261 | useCustomProguardFile: 0 262 | AndroidTargetArchitectures: 1 263 | AndroidTargetDevices: 0 264 | AndroidSplashScreenScale: 0 265 | androidSplashScreen: {fileID: 0} 266 | AndroidKeystoreName: '{inproject}: ' 267 | AndroidKeyaliasName: 268 | AndroidEnableArmv9SecurityFeatures: 0 269 | AndroidBuildApkPerCpuArchitecture: 0 270 | AndroidTVCompatibility: 1 271 | AndroidIsGame: 1 272 | AndroidEnableTango: 0 273 | androidEnableBanner: 1 274 | androidUseLowAccuracyLocation: 0 275 | androidUseCustomKeystore: 0 276 | m_AndroidBanners: 277 | - width: 320 278 | height: 180 279 | banner: {fileID: 0} 280 | androidGamepadSupportLevel: 0 281 | chromeosInputEmulation: 1 282 | AndroidMinifyRelease: 0 283 | AndroidMinifyDebug: 0 284 | AndroidValidateAppBundleSize: 1 285 | AndroidAppBundleSizeToValidate: 200 286 | m_BuildTargetIcons: [] 287 | m_BuildTargetPlatformIcons: 288 | - m_BuildTarget: iPhone 289 | m_Icons: 290 | - m_Textures: [] 291 | m_Width: 180 292 | m_Height: 180 293 | m_Kind: 0 294 | m_SubKind: iPhone 295 | - m_Textures: [] 296 | m_Width: 120 297 | m_Height: 120 298 | m_Kind: 0 299 | m_SubKind: iPhone 300 | - m_Textures: [] 301 | m_Width: 167 302 | m_Height: 167 303 | m_Kind: 0 304 | m_SubKind: iPad 305 | - m_Textures: [] 306 | m_Width: 152 307 | m_Height: 152 308 | m_Kind: 0 309 | m_SubKind: iPad 310 | - m_Textures: [] 311 | m_Width: 76 312 | m_Height: 76 313 | m_Kind: 0 314 | m_SubKind: iPad 315 | - m_Textures: [] 316 | m_Width: 120 317 | m_Height: 120 318 | m_Kind: 3 319 | m_SubKind: iPhone 320 | - m_Textures: [] 321 | m_Width: 80 322 | m_Height: 80 323 | m_Kind: 3 324 | m_SubKind: iPhone 325 | - m_Textures: [] 326 | m_Width: 80 327 | m_Height: 80 328 | m_Kind: 3 329 | m_SubKind: iPad 330 | - m_Textures: [] 331 | m_Width: 40 332 | m_Height: 40 333 | m_Kind: 3 334 | m_SubKind: iPad 335 | - m_Textures: [] 336 | m_Width: 87 337 | m_Height: 87 338 | m_Kind: 1 339 | m_SubKind: iPhone 340 | - m_Textures: [] 341 | m_Width: 58 342 | m_Height: 58 343 | m_Kind: 1 344 | m_SubKind: iPhone 345 | - m_Textures: [] 346 | m_Width: 29 347 | m_Height: 29 348 | m_Kind: 1 349 | m_SubKind: iPhone 350 | - m_Textures: [] 351 | m_Width: 58 352 | m_Height: 58 353 | m_Kind: 1 354 | m_SubKind: iPad 355 | - m_Textures: [] 356 | m_Width: 29 357 | m_Height: 29 358 | m_Kind: 1 359 | m_SubKind: iPad 360 | - m_Textures: [] 361 | m_Width: 60 362 | m_Height: 60 363 | m_Kind: 2 364 | m_SubKind: iPhone 365 | - m_Textures: [] 366 | m_Width: 40 367 | m_Height: 40 368 | m_Kind: 2 369 | m_SubKind: iPhone 370 | - m_Textures: [] 371 | m_Width: 40 372 | m_Height: 40 373 | m_Kind: 2 374 | m_SubKind: iPad 375 | - m_Textures: [] 376 | m_Width: 20 377 | m_Height: 20 378 | m_Kind: 2 379 | m_SubKind: iPad 380 | - m_Textures: [] 381 | m_Width: 1024 382 | m_Height: 1024 383 | m_Kind: 4 384 | m_SubKind: App Store 385 | - m_BuildTarget: Android 386 | m_Icons: 387 | - m_Textures: [] 388 | m_Width: 432 389 | m_Height: 432 390 | m_Kind: 2 391 | m_SubKind: 392 | - m_Textures: [] 393 | m_Width: 324 394 | m_Height: 324 395 | m_Kind: 2 396 | m_SubKind: 397 | - m_Textures: [] 398 | m_Width: 216 399 | m_Height: 216 400 | m_Kind: 2 401 | m_SubKind: 402 | - m_Textures: [] 403 | m_Width: 162 404 | m_Height: 162 405 | m_Kind: 2 406 | m_SubKind: 407 | - m_Textures: [] 408 | m_Width: 108 409 | m_Height: 108 410 | m_Kind: 2 411 | m_SubKind: 412 | - m_Textures: [] 413 | m_Width: 81 414 | m_Height: 81 415 | m_Kind: 2 416 | m_SubKind: 417 | - m_Textures: [] 418 | m_Width: 192 419 | m_Height: 192 420 | m_Kind: 1 421 | m_SubKind: 422 | - m_Textures: [] 423 | m_Width: 144 424 | m_Height: 144 425 | m_Kind: 1 426 | m_SubKind: 427 | - m_Textures: [] 428 | m_Width: 96 429 | m_Height: 96 430 | m_Kind: 1 431 | m_SubKind: 432 | - m_Textures: [] 433 | m_Width: 72 434 | m_Height: 72 435 | m_Kind: 1 436 | m_SubKind: 437 | - m_Textures: [] 438 | m_Width: 48 439 | m_Height: 48 440 | m_Kind: 1 441 | m_SubKind: 442 | - m_Textures: [] 443 | m_Width: 36 444 | m_Height: 36 445 | m_Kind: 1 446 | m_SubKind: 447 | - m_Textures: [] 448 | m_Width: 192 449 | m_Height: 192 450 | m_Kind: 0 451 | m_SubKind: 452 | - m_Textures: [] 453 | m_Width: 144 454 | m_Height: 144 455 | m_Kind: 0 456 | m_SubKind: 457 | - m_Textures: [] 458 | m_Width: 96 459 | m_Height: 96 460 | m_Kind: 0 461 | m_SubKind: 462 | - m_Textures: [] 463 | m_Width: 72 464 | m_Height: 72 465 | m_Kind: 0 466 | m_SubKind: 467 | - m_Textures: [] 468 | m_Width: 48 469 | m_Height: 48 470 | m_Kind: 0 471 | m_SubKind: 472 | - m_Textures: [] 473 | m_Width: 36 474 | m_Height: 36 475 | m_Kind: 0 476 | m_SubKind: 477 | m_BuildTargetBatching: [] 478 | m_BuildTargetShaderSettings: [] 479 | m_BuildTargetGraphicsJobs: 480 | - m_BuildTarget: WindowsStandaloneSupport 481 | m_GraphicsJobs: 0 482 | - m_BuildTarget: MacStandaloneSupport 483 | m_GraphicsJobs: 0 484 | - m_BuildTarget: LinuxStandaloneSupport 485 | m_GraphicsJobs: 0 486 | - m_BuildTarget: AndroidPlayer 487 | m_GraphicsJobs: 0 488 | - m_BuildTarget: iOSSupport 489 | m_GraphicsJobs: 0 490 | - m_BuildTarget: PS4Player 491 | m_GraphicsJobs: 0 492 | - m_BuildTarget: PS5Player 493 | m_GraphicsJobs: 0 494 | - m_BuildTarget: XboxOnePlayer 495 | m_GraphicsJobs: 0 496 | - m_BuildTarget: GameCoreXboxOneSupport 497 | m_GraphicsJobs: 0 498 | - m_BuildTarget: GameCoreScarlettSupport 499 | m_GraphicsJobs: 0 500 | - m_BuildTarget: Switch 501 | m_GraphicsJobs: 0 502 | - m_BuildTarget: WebGLSupport 503 | m_GraphicsJobs: 0 504 | - m_BuildTarget: MetroSupport 505 | m_GraphicsJobs: 0 506 | - m_BuildTarget: AppleTVSupport 507 | m_GraphicsJobs: 0 508 | - m_BuildTarget: VisionOSPlayer 509 | m_GraphicsJobs: 0 510 | - m_BuildTarget: BJMSupport 511 | m_GraphicsJobs: 0 512 | - m_BuildTarget: CloudRendering 513 | m_GraphicsJobs: 0 514 | - m_BuildTarget: EmbeddedLinux 515 | m_GraphicsJobs: 0 516 | - m_BuildTarget: QNX 517 | m_GraphicsJobs: 0 518 | m_BuildTargetGraphicsJobMode: 519 | - m_BuildTarget: PS4Player 520 | m_GraphicsJobMode: 0 521 | - m_BuildTarget: XboxOnePlayer 522 | m_GraphicsJobMode: 0 523 | m_BuildTargetGraphicsAPIs: 524 | - m_BuildTarget: iOSSupport 525 | m_APIs: 10000000 526 | m_Automatic: 1 527 | - m_BuildTarget: AndroidPlayer 528 | m_APIs: 0b00000008000000 529 | m_Automatic: 0 530 | m_BuildTargetVRSettings: [] 531 | m_DefaultShaderChunkSizeInMB: 16 532 | m_DefaultShaderChunkCount: 0 533 | openGLRequireES31: 0 534 | openGLRequireES31AEP: 0 535 | openGLRequireES32: 0 536 | m_TemplateCustomTags: {} 537 | mobileMTRendering: 538 | iPhone: 1 539 | tvOS: 1 540 | m_BuildTargetGroupLightmapEncodingQuality: 541 | - m_BuildTarget: Standalone 542 | m_EncodingQuality: 1 543 | - m_BuildTarget: XboxOne 544 | m_EncodingQuality: 1 545 | - m_BuildTarget: PS4 546 | m_EncodingQuality: 1 547 | m_BuildTargetGroupHDRCubemapEncodingQuality: 548 | - m_BuildTarget: Standalone 549 | m_EncodingQuality: 2 550 | - m_BuildTarget: XboxOne 551 | m_EncodingQuality: 2 552 | - m_BuildTarget: PS4 553 | m_EncodingQuality: 2 554 | m_BuildTargetGroupLightmapSettings: [] 555 | m_BuildTargetGroupLoadStoreDebugModeSettings: [] 556 | m_BuildTargetNormalMapEncoding: [] 557 | m_BuildTargetDefaultTextureCompressionFormat: [] 558 | playModeTestRunnerEnabled: 0 559 | runPlayModeTestAsEditModeTest: 0 560 | actionOnDotNetUnhandledException: 1 561 | enableInternalProfiler: 0 562 | logObjCUncaughtExceptions: 1 563 | enableCrashReportAPI: 0 564 | cameraUsageDescription: 565 | locationUsageDescription: 566 | microphoneUsageDescription: 567 | bluetoothUsageDescription: 568 | macOSTargetOSVersion: 10.13.0 569 | switchNMETAOverride: 570 | switchNetLibKey: 571 | switchSocketMemoryPoolSize: 6144 572 | switchSocketAllocatorPoolSize: 128 573 | switchSocketConcurrencyLimit: 14 574 | switchScreenResolutionBehavior: 2 575 | switchUseCPUProfiler: 0 576 | switchEnableFileSystemTrace: 0 577 | switchLTOSetting: 0 578 | switchApplicationID: 0x01004b9000490000 579 | switchNSODependencies: 580 | switchCompilerFlags: 581 | switchTitleNames_0: 582 | switchTitleNames_1: 583 | switchTitleNames_2: 584 | switchTitleNames_3: 585 | switchTitleNames_4: 586 | switchTitleNames_5: 587 | switchTitleNames_6: 588 | switchTitleNames_7: 589 | switchTitleNames_8: 590 | switchTitleNames_9: 591 | switchTitleNames_10: 592 | switchTitleNames_11: 593 | switchTitleNames_12: 594 | switchTitleNames_13: 595 | switchTitleNames_14: 596 | switchTitleNames_15: 597 | switchPublisherNames_0: 598 | switchPublisherNames_1: 599 | switchPublisherNames_2: 600 | switchPublisherNames_3: 601 | switchPublisherNames_4: 602 | switchPublisherNames_5: 603 | switchPublisherNames_6: 604 | switchPublisherNames_7: 605 | switchPublisherNames_8: 606 | switchPublisherNames_9: 607 | switchPublisherNames_10: 608 | switchPublisherNames_11: 609 | switchPublisherNames_12: 610 | switchPublisherNames_13: 611 | switchPublisherNames_14: 612 | switchPublisherNames_15: 613 | switchIcons_0: {fileID: 0} 614 | switchIcons_1: {fileID: 0} 615 | switchIcons_2: {fileID: 0} 616 | switchIcons_3: {fileID: 0} 617 | switchIcons_4: {fileID: 0} 618 | switchIcons_5: {fileID: 0} 619 | switchIcons_6: {fileID: 0} 620 | switchIcons_7: {fileID: 0} 621 | switchIcons_8: {fileID: 0} 622 | switchIcons_9: {fileID: 0} 623 | switchIcons_10: {fileID: 0} 624 | switchIcons_11: {fileID: 0} 625 | switchIcons_12: {fileID: 0} 626 | switchIcons_13: {fileID: 0} 627 | switchIcons_14: {fileID: 0} 628 | switchIcons_15: {fileID: 0} 629 | switchSmallIcons_0: {fileID: 0} 630 | switchSmallIcons_1: {fileID: 0} 631 | switchSmallIcons_2: {fileID: 0} 632 | switchSmallIcons_3: {fileID: 0} 633 | switchSmallIcons_4: {fileID: 0} 634 | switchSmallIcons_5: {fileID: 0} 635 | switchSmallIcons_6: {fileID: 0} 636 | switchSmallIcons_7: {fileID: 0} 637 | switchSmallIcons_8: {fileID: 0} 638 | switchSmallIcons_9: {fileID: 0} 639 | switchSmallIcons_10: {fileID: 0} 640 | switchSmallIcons_11: {fileID: 0} 641 | switchSmallIcons_12: {fileID: 0} 642 | switchSmallIcons_13: {fileID: 0} 643 | switchSmallIcons_14: {fileID: 0} 644 | switchSmallIcons_15: {fileID: 0} 645 | switchManualHTML: 646 | switchAccessibleURLs: 647 | switchLegalInformation: 648 | switchMainThreadStackSize: 1048576 649 | switchPresenceGroupId: 650 | switchLogoHandling: 0 651 | switchReleaseVersion: 0 652 | switchDisplayVersion: 1.0.0 653 | switchStartupUserAccount: 0 654 | switchSupportedLanguagesMask: 0 655 | switchLogoType: 0 656 | switchApplicationErrorCodeCategory: 657 | switchUserAccountSaveDataSize: 0 658 | switchUserAccountSaveDataJournalSize: 0 659 | switchApplicationAttribute: 0 660 | switchCardSpecSize: -1 661 | switchCardSpecClock: -1 662 | switchRatingsMask: 0 663 | switchRatingsInt_0: 0 664 | switchRatingsInt_1: 0 665 | switchRatingsInt_2: 0 666 | switchRatingsInt_3: 0 667 | switchRatingsInt_4: 0 668 | switchRatingsInt_5: 0 669 | switchRatingsInt_6: 0 670 | switchRatingsInt_7: 0 671 | switchRatingsInt_8: 0 672 | switchRatingsInt_9: 0 673 | switchRatingsInt_10: 0 674 | switchRatingsInt_11: 0 675 | switchRatingsInt_12: 0 676 | switchLocalCommunicationIds_0: 677 | switchLocalCommunicationIds_1: 678 | switchLocalCommunicationIds_2: 679 | switchLocalCommunicationIds_3: 680 | switchLocalCommunicationIds_4: 681 | switchLocalCommunicationIds_5: 682 | switchLocalCommunicationIds_6: 683 | switchLocalCommunicationIds_7: 684 | switchParentalControl: 0 685 | switchAllowsScreenshot: 1 686 | switchAllowsVideoCapturing: 1 687 | switchAllowsRuntimeAddOnContentInstall: 0 688 | switchDataLossConfirmation: 0 689 | switchUserAccountLockEnabled: 0 690 | switchSystemResourceMemory: 16777216 691 | switchSupportedNpadStyles: 3 692 | switchNativeFsCacheSize: 32 693 | switchIsHoldTypeHorizontal: 1 694 | switchSupportedNpadCount: 8 695 | switchEnableTouchScreen: 1 696 | switchSocketConfigEnabled: 0 697 | switchTcpInitialSendBufferSize: 32 698 | switchTcpInitialReceiveBufferSize: 64 699 | switchTcpAutoSendBufferSizeMax: 256 700 | switchTcpAutoReceiveBufferSizeMax: 256 701 | switchUdpSendBufferSize: 9 702 | switchUdpReceiveBufferSize: 42 703 | switchSocketBufferEfficiency: 4 704 | switchSocketInitializeEnabled: 1 705 | switchNetworkInterfaceManagerInitializeEnabled: 1 706 | switchUseNewStyleFilepaths: 1 707 | switchUseLegacyFmodPriorities: 0 708 | switchUseMicroSleepForYield: 1 709 | switchEnableRamDiskSupport: 0 710 | switchMicroSleepForYieldTime: 25 711 | switchRamDiskSpaceSize: 12 712 | ps4NPAgeRating: 12 713 | ps4NPTitleSecret: 714 | ps4NPTrophyPackPath: 715 | ps4ParentalLevel: 11 716 | ps4ContentID: ED1633-NPXX51362_00-0000000000000000 717 | ps4Category: 0 718 | ps4MasterVersion: 01.00 719 | ps4AppVersion: 01.00 720 | ps4AppType: 0 721 | ps4ParamSfxPath: 722 | ps4VideoOutPixelFormat: 0 723 | ps4VideoOutInitialWidth: 1920 724 | ps4VideoOutBaseModeInitialWidth: 1920 725 | ps4VideoOutReprojectionRate: 120 726 | ps4PronunciationXMLPath: 727 | ps4PronunciationSIGPath: 728 | ps4BackgroundImagePath: 729 | ps4StartupImagePath: 730 | ps4StartupImagesFolder: 731 | ps4IconImagesFolder: 732 | ps4SaveDataImagePath: 733 | ps4SdkOverride: 734 | ps4BGMPath: 735 | ps4ShareFilePath: 736 | ps4ShareOverlayImagePath: 737 | ps4PrivacyGuardImagePath: 738 | ps4ExtraSceSysFile: 739 | ps4NPtitleDatPath: 740 | ps4RemotePlayKeyAssignment: -1 741 | ps4RemotePlayKeyMappingDir: 742 | ps4PlayTogetherPlayerCount: 0 743 | ps4EnterButtonAssignment: 1 744 | ps4ApplicationParam1: 0 745 | ps4ApplicationParam2: 0 746 | ps4ApplicationParam3: 0 747 | ps4ApplicationParam4: 0 748 | ps4DownloadDataSize: 0 749 | ps4GarlicHeapSize: 2048 750 | ps4ProGarlicHeapSize: 2560 751 | playerPrefsMaxSize: 32768 752 | ps4Passcode: 5PN2qmWqBlQ9wQj99nsQzldVI5ZuGXbE 753 | ps4pnSessions: 1 754 | ps4pnPresence: 1 755 | ps4pnFriends: 1 756 | ps4pnGameCustomData: 1 757 | playerPrefsSupport: 0 758 | enableApplicationExit: 0 759 | resetTempFolder: 1 760 | restrictedAudioUsageRights: 0 761 | ps4UseResolutionFallback: 0 762 | ps4ReprojectionSupport: 0 763 | ps4UseAudio3dBackend: 0 764 | ps4UseLowGarlicFragmentationMode: 1 765 | ps4SocialScreenEnabled: 0 766 | ps4ScriptOptimizationLevel: 3 767 | ps4Audio3dVirtualSpeakerCount: 14 768 | ps4attribCpuUsage: 0 769 | ps4PatchPkgPath: 770 | ps4PatchLatestPkgPath: 771 | ps4PatchChangeinfoPath: 772 | ps4PatchDayOne: 0 773 | ps4attribUserManagement: 0 774 | ps4attribMoveSupport: 0 775 | ps4attrib3DSupport: 0 776 | ps4attribShareSupport: 0 777 | ps4attribExclusiveVR: 0 778 | ps4disableAutoHideSplash: 0 779 | ps4videoRecordingFeaturesUsed: 0 780 | ps4contentSearchFeaturesUsed: 0 781 | ps4CompatibilityPS5: 0 782 | ps4AllowPS5Detection: 0 783 | ps4GPU800MHz: 1 784 | ps4attribEyeToEyeDistanceSettingVR: 0 785 | ps4IncludedModules: [] 786 | ps4attribVROutputEnabled: 0 787 | monoEnv: 788 | splashScreenBackgroundSourceLandscape: {fileID: 0} 789 | splashScreenBackgroundSourcePortrait: {fileID: 0} 790 | blurSplashScreenBackground: 1 791 | spritePackerPolicy: 792 | webGLMemorySize: 256 793 | webGLExceptionSupport: 1 794 | webGLNameFilesAsHashes: 0 795 | webGLShowDiagnostics: 0 796 | webGLDataCaching: 0 797 | webGLDebugSymbols: 0 798 | webGLEmscriptenArgs: 799 | webGLModulesDirectory: 800 | webGLTemplate: APPLICATION:Default 801 | webGLAnalyzeBuildSize: 0 802 | webGLUseEmbeddedResources: 0 803 | webGLCompressionFormat: 1 804 | webGLWasmArithmeticExceptions: 0 805 | webGLLinkerTarget: 1 806 | webGLThreadsSupport: 0 807 | webGLDecompressionFallback: 0 808 | webGLInitialMemorySize: 32 809 | webGLMaximumMemorySize: 2048 810 | webGLMemoryGrowthMode: 2 811 | webGLMemoryLinearGrowthStep: 16 812 | webGLMemoryGeometricGrowthStep: 0.2 813 | webGLMemoryGeometricGrowthCap: 96 814 | webGLPowerPreference: 2 815 | scriptingDefineSymbols: {} 816 | additionalCompilerArguments: {} 817 | platformArchitecture: {} 818 | scriptingBackend: {} 819 | il2cppCompilerConfiguration: {} 820 | il2cppCodeGeneration: {} 821 | managedStrippingLevel: 822 | EmbeddedLinux: 1 823 | GameCoreScarlett: 1 824 | GameCoreXboxOne: 1 825 | Nintendo Switch: 1 826 | PS4: 1 827 | PS5: 1 828 | QNX: 1 829 | Stadia: 1 830 | VisionOS: 1 831 | WebGL: 1 832 | Windows Store Apps: 1 833 | XboxOne: 1 834 | iPhone: 1 835 | tvOS: 1 836 | incrementalIl2cppBuild: {} 837 | suppressCommonWarnings: 1 838 | allowUnsafeCode: 0 839 | useDeterministicCompilation: 1 840 | additionalIl2CppArgs: 841 | scriptingRuntimeVersion: 1 842 | gcIncremental: 1 843 | gcWBarrierValidation: 0 844 | apiCompatibilityLevelPerPlatform: {} 845 | m_RenderingPath: 1 846 | m_MobileRenderingPath: 1 847 | metroPackageName: test 848 | metroPackageVersion: 849 | metroCertificatePath: 850 | metroCertificatePassword: 851 | metroCertificateSubject: 852 | metroCertificateIssuer: 853 | metroCertificateNotAfter: 0000000000000000 854 | metroApplicationDescription: test 855 | wsaImages: {} 856 | metroTileShortName: 857 | metroTileShowName: 0 858 | metroMediumTileShowName: 0 859 | metroLargeTileShowName: 0 860 | metroWideTileShowName: 0 861 | metroSupportStreamingInstall: 0 862 | metroLastRequiredScene: 0 863 | metroDefaultTileSize: 1 864 | metroTileForegroundText: 2 865 | metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} 866 | metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, 867 | a: 1} 868 | metroSplashScreenUseBackgroundColor: 0 869 | syncCapabilities: 0 870 | platformCapabilities: {} 871 | metroTargetDeviceFamilies: {} 872 | metroFTAName: 873 | metroFTAFileTypes: [] 874 | metroProtocolName: 875 | vcxProjDefaultLanguage: 876 | XboxOneProductId: 877 | XboxOneUpdateKey: 878 | XboxOneSandboxId: 879 | XboxOneContentId: 880 | XboxOneTitleId: 881 | XboxOneSCId: 882 | XboxOneGameOsOverridePath: 883 | XboxOnePackagingOverridePath: 884 | XboxOneAppManifestOverridePath: 885 | XboxOneVersion: 1.0.0.0 886 | XboxOnePackageEncryption: 0 887 | XboxOnePackageUpdateGranularity: 2 888 | XboxOneDescription: 889 | XboxOneLanguage: 890 | - enus 891 | XboxOneCapability: [] 892 | XboxOneGameRating: {} 893 | XboxOneIsContentPackage: 0 894 | XboxOneEnhancedXboxCompatibilityMode: 0 895 | XboxOneEnableGPUVariability: 0 896 | XboxOneSockets: {} 897 | XboxOneSplashScreen: {fileID: 0} 898 | XboxOneAllowedProductIds: [] 899 | XboxOnePersistentLocalStorageSize: 0 900 | XboxOneXTitleMemory: 8 901 | XboxOneOverrideIdentityName: 902 | XboxOneOverrideIdentityPublisher: 903 | vrEditorSettings: {} 904 | cloudServicesEnabled: 905 | UNet: 1 906 | luminIcon: 907 | m_Name: 908 | m_ModelFolderPath: 909 | m_PortalFolderPath: 910 | luminCert: 911 | m_CertPath: 912 | m_SignPackage: 1 913 | luminIsChannelApp: 0 914 | luminVersion: 915 | m_VersionCode: 1 916 | m_VersionName: 917 | hmiPlayerDataPath: 918 | hmiForceSRGBBlit: 1 919 | embeddedLinuxEnableGamepadInput: 1 920 | hmiLogStartupTiming: 0 921 | hmiCpuConfiguration: 922 | apiCompatibilityLevel: 6 923 | activeInputHandler: 0 924 | windowsGamepadBackendHint: 0 925 | cloudProjectId: 0526ccec-2857-43a5-a3ff-0dcca3115268 926 | framebufferDepthMemorylessMode: 0 927 | qualitySettingsNames: [] 928 | projectName: test 929 | organizationId: satanas 930 | cloudEnabled: 0 931 | legacyClampBlendShapeWeights: 1 932 | hmiLoadingImage: {fileID: 0} 933 | platformRequiresReadableAssets: 0 934 | virtualTexturingSupportEnabled: 0 935 | insecureHttpOption: 0 936 | -------------------------------------------------------------------------------- /ProjectSettings/ProjectVersion.txt: -------------------------------------------------------------------------------- 1 | m_EditorVersion: 2022.3.45f1 2 | m_EditorVersionWithRevision: 2022.3.45f1 (a13dfa44d684) 3 | -------------------------------------------------------------------------------- /ProjectSettings/QualitySettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!47 &1 4 | QualitySettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 5 7 | m_CurrentQuality: 5 8 | m_QualitySettings: 9 | - serializedVersion: 2 10 | name: Fastest 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 | blendWeights: 1 21 | textureQuality: 1 22 | anisotropicTextures: 0 23 | antiAliasing: 0 24 | softParticles: 0 25 | softVegetation: 0 26 | realtimeReflectionProbes: 0 27 | billboardsFaceCameraPosition: 0 28 | vSyncCount: 0 29 | lodBias: 0.3 30 | maximumLODLevel: 0 31 | particleRaycastBudget: 4 32 | asyncUploadTimeSlice: 2 33 | asyncUploadBufferSize: 4 34 | excludedTargetPlatforms: [] 35 | - serializedVersion: 2 36 | name: Fast 37 | pixelLightCount: 0 38 | shadows: 0 39 | shadowResolution: 0 40 | shadowProjection: 1 41 | shadowCascades: 1 42 | shadowDistance: 20 43 | shadowNearPlaneOffset: 3 44 | shadowCascade2Split: 0.33333334 45 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 46 | blendWeights: 2 47 | textureQuality: 0 48 | anisotropicTextures: 0 49 | antiAliasing: 0 50 | softParticles: 0 51 | softVegetation: 0 52 | realtimeReflectionProbes: 0 53 | billboardsFaceCameraPosition: 0 54 | vSyncCount: 0 55 | lodBias: 0.4 56 | maximumLODLevel: 0 57 | particleRaycastBudget: 16 58 | asyncUploadTimeSlice: 2 59 | asyncUploadBufferSize: 4 60 | excludedTargetPlatforms: [] 61 | - serializedVersion: 2 62 | name: Simple 63 | pixelLightCount: 1 64 | shadows: 1 65 | shadowResolution: 0 66 | shadowProjection: 1 67 | shadowCascades: 1 68 | shadowDistance: 20 69 | shadowNearPlaneOffset: 3 70 | shadowCascade2Split: 0.33333334 71 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 72 | blendWeights: 2 73 | textureQuality: 0 74 | anisotropicTextures: 1 75 | antiAliasing: 0 76 | softParticles: 0 77 | softVegetation: 0 78 | realtimeReflectionProbes: 0 79 | billboardsFaceCameraPosition: 0 80 | vSyncCount: 1 81 | lodBias: 0.7 82 | maximumLODLevel: 0 83 | particleRaycastBudget: 64 84 | asyncUploadTimeSlice: 2 85 | asyncUploadBufferSize: 4 86 | excludedTargetPlatforms: [] 87 | - serializedVersion: 2 88 | name: Good 89 | pixelLightCount: 2 90 | shadows: 2 91 | shadowResolution: 1 92 | shadowProjection: 1 93 | shadowCascades: 2 94 | shadowDistance: 40 95 | shadowNearPlaneOffset: 3 96 | shadowCascade2Split: 0.33333334 97 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 98 | blendWeights: 2 99 | textureQuality: 0 100 | anisotropicTextures: 1 101 | antiAliasing: 0 102 | softParticles: 0 103 | softVegetation: 1 104 | realtimeReflectionProbes: 1 105 | billboardsFaceCameraPosition: 1 106 | vSyncCount: 1 107 | lodBias: 1 108 | maximumLODLevel: 0 109 | particleRaycastBudget: 256 110 | asyncUploadTimeSlice: 2 111 | asyncUploadBufferSize: 4 112 | excludedTargetPlatforms: [] 113 | - serializedVersion: 2 114 | name: Beautiful 115 | pixelLightCount: 3 116 | shadows: 2 117 | shadowResolution: 2 118 | shadowProjection: 1 119 | shadowCascades: 2 120 | shadowDistance: 70 121 | shadowNearPlaneOffset: 3 122 | shadowCascade2Split: 0.33333334 123 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 124 | blendWeights: 4 125 | textureQuality: 0 126 | anisotropicTextures: 2 127 | antiAliasing: 2 128 | softParticles: 1 129 | softVegetation: 1 130 | realtimeReflectionProbes: 1 131 | billboardsFaceCameraPosition: 1 132 | vSyncCount: 1 133 | lodBias: 1.5 134 | maximumLODLevel: 0 135 | particleRaycastBudget: 1024 136 | asyncUploadTimeSlice: 2 137 | asyncUploadBufferSize: 4 138 | excludedTargetPlatforms: [] 139 | - serializedVersion: 2 140 | name: Fantastic 141 | pixelLightCount: 4 142 | shadows: 2 143 | shadowResolution: 2 144 | shadowProjection: 1 145 | shadowCascades: 4 146 | shadowDistance: 150 147 | shadowNearPlaneOffset: 3 148 | shadowCascade2Split: 0.33333334 149 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 150 | blendWeights: 4 151 | textureQuality: 0 152 | anisotropicTextures: 2 153 | antiAliasing: 2 154 | softParticles: 1 155 | softVegetation: 1 156 | realtimeReflectionProbes: 1 157 | billboardsFaceCameraPosition: 1 158 | vSyncCount: 1 159 | lodBias: 2 160 | maximumLODLevel: 0 161 | particleRaycastBudget: 4096 162 | asyncUploadTimeSlice: 2 163 | asyncUploadBufferSize: 4 164 | excludedTargetPlatforms: [] 165 | m_PerPlatformDefaultQuality: 166 | Android: 2 167 | Nintendo 3DS: 5 168 | PS4: 5 169 | PSM: 5 170 | PSP2: 2 171 | Samsung TV: 2 172 | Standalone: 5 173 | Switch: 5 174 | Tizen: 2 175 | Web: 5 176 | WebGL: 3 177 | WiiU: 5 178 | Windows Store Apps: 5 179 | XboxOne: 5 180 | iPhone: 2 181 | tvOS: 2 182 | -------------------------------------------------------------------------------- /ProjectSettings/SceneTemplateSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "templatePinStates": [], 3 | "dependencyTypeInfos": [ 4 | { 5 | "userAdded": false, 6 | "type": "UnityEngine.AnimationClip", 7 | "defaultInstantiationMode": 0 8 | }, 9 | { 10 | "userAdded": false, 11 | "type": "UnityEditor.Animations.AnimatorController", 12 | "defaultInstantiationMode": 0 13 | }, 14 | { 15 | "userAdded": false, 16 | "type": "UnityEngine.AnimatorOverrideController", 17 | "defaultInstantiationMode": 0 18 | }, 19 | { 20 | "userAdded": false, 21 | "type": "UnityEditor.Audio.AudioMixerController", 22 | "defaultInstantiationMode": 0 23 | }, 24 | { 25 | "userAdded": false, 26 | "type": "UnityEngine.ComputeShader", 27 | "defaultInstantiationMode": 1 28 | }, 29 | { 30 | "userAdded": false, 31 | "type": "UnityEngine.Cubemap", 32 | "defaultInstantiationMode": 0 33 | }, 34 | { 35 | "userAdded": false, 36 | "type": "UnityEngine.GameObject", 37 | "defaultInstantiationMode": 0 38 | }, 39 | { 40 | "userAdded": false, 41 | "type": "UnityEditor.LightingDataAsset", 42 | "defaultInstantiationMode": 0 43 | }, 44 | { 45 | "userAdded": false, 46 | "type": "UnityEngine.LightingSettings", 47 | "defaultInstantiationMode": 0 48 | }, 49 | { 50 | "userAdded": false, 51 | "type": "UnityEngine.Material", 52 | "defaultInstantiationMode": 0 53 | }, 54 | { 55 | "userAdded": false, 56 | "type": "UnityEditor.MonoScript", 57 | "defaultInstantiationMode": 1 58 | }, 59 | { 60 | "userAdded": false, 61 | "type": "UnityEngine.PhysicMaterial", 62 | "defaultInstantiationMode": 0 63 | }, 64 | { 65 | "userAdded": false, 66 | "type": "UnityEngine.PhysicsMaterial2D", 67 | "defaultInstantiationMode": 0 68 | }, 69 | { 70 | "userAdded": false, 71 | "type": "UnityEngine.Rendering.PostProcessing.PostProcessProfile", 72 | "defaultInstantiationMode": 0 73 | }, 74 | { 75 | "userAdded": false, 76 | "type": "UnityEngine.Rendering.PostProcessing.PostProcessResources", 77 | "defaultInstantiationMode": 0 78 | }, 79 | { 80 | "userAdded": false, 81 | "type": "UnityEngine.Rendering.VolumeProfile", 82 | "defaultInstantiationMode": 0 83 | }, 84 | { 85 | "userAdded": false, 86 | "type": "UnityEditor.SceneAsset", 87 | "defaultInstantiationMode": 1 88 | }, 89 | { 90 | "userAdded": false, 91 | "type": "UnityEngine.Shader", 92 | "defaultInstantiationMode": 1 93 | }, 94 | { 95 | "userAdded": false, 96 | "type": "UnityEngine.ShaderVariantCollection", 97 | "defaultInstantiationMode": 1 98 | }, 99 | { 100 | "userAdded": false, 101 | "type": "UnityEngine.Texture", 102 | "defaultInstantiationMode": 0 103 | }, 104 | { 105 | "userAdded": false, 106 | "type": "UnityEngine.Texture2D", 107 | "defaultInstantiationMode": 0 108 | }, 109 | { 110 | "userAdded": false, 111 | "type": "UnityEngine.Timeline.TimelineAsset", 112 | "defaultInstantiationMode": 0 113 | } 114 | ], 115 | "defaultDependencyTypeInfo": { 116 | "userAdded": false, 117 | "type": "", 118 | "defaultInstantiationMode": 1 119 | }, 120 | "newSceneOverride": 0 121 | } -------------------------------------------------------------------------------- /ProjectSettings/TagManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!78 &1 4 | TagManager: 5 | serializedVersion: 2 6 | tags: [] 7 | layers: 8 | - Default 9 | - TransparentFX 10 | - Ignore Raycast 11 | - 12 | - Water 13 | - UI 14 | - 15 | - 16 | - 17 | - 18 | - 19 | - 20 | - 21 | - 22 | - 23 | - 24 | - 25 | - 26 | - 27 | - 28 | - 29 | - 30 | - 31 | - 32 | - 33 | - 34 | - 35 | - 36 | - 37 | - 38 | - 39 | - 40 | m_SortingLayers: 41 | - name: Default 42 | uniqueID: 0 43 | locked: 0 44 | -------------------------------------------------------------------------------- /ProjectSettings/TimeManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!5 &1 4 | TimeManager: 5 | m_ObjectHideFlags: 0 6 | Fixed Timestep: 0.02 7 | Maximum Allowed Timestep: 0.33333334 8 | m_TimeScale: 1 9 | Maximum Particle Timestep: 0.03 10 | -------------------------------------------------------------------------------- /ProjectSettings/UnityConnectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!310 &1 4 | UnityConnectSettings: 5 | m_ObjectHideFlags: 0 6 | m_Enabled: 0 7 | m_TestMode: 0 8 | m_TestEventUrl: 9 | m_TestConfigUrl: 10 | m_TestInitMode: 0 11 | CrashReportingSettings: 12 | m_EventUrl: https://perf-events.cloud.unity3d.com/api/events/crashes 13 | m_NativeEventUrl: https://perf-events.cloud.unity3d.com/symbolicate 14 | m_Enabled: 1 15 | m_CaptureEditorExceptions: 1 16 | UnityPurchasingSettings: 17 | m_Enabled: 0 18 | m_TestMode: 0 19 | UnityAnalyticsSettings: 20 | m_Enabled: 1 21 | m_InitializeOnStartup: 1 22 | m_TestMode: 0 23 | m_TestEventUrl: 24 | m_TestConfigUrl: 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_StripUpdateShader: {fileID: 0} 10 | m_EmptyShader: {fileID: 0} 11 | m_RenderPipeSettingsPath: 12 | m_FixedTimeStep: 0.016666668 13 | m_MaxDeltaTime: 0.05 14 | m_MaxScrubTime: 30 15 | m_CompiledVersion: 0 16 | m_RuntimeVersion: 0 17 | m_RuntimeResources: {fileID: 0} 18 | m_BatchEmptyLifetime: 300 19 | -------------------------------------------------------------------------------- /ProjectSettings/VersionControlSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!890905787 &1 4 | VersionControlSettings: 5 | m_ObjectHideFlags: 0 6 | m_Mode: Visible Meta Files 7 | m_CollabEditorSettings: 8 | inProgressEnabled: 1 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SimpleHTTP 2 | 3 | SimpleHTTP is a dead simple HTTP client for Unity, because HTTP shouldn't be that hard. 4 | 5 | ## Installation 6 | 7 | Download the [.unitypackage](https://github.com/satanas/unity-simple-http/blob/master/simplehttp-1.0.0.unitypackage) file 8 | and inside Unity go to the menu `Assets -> Import New Assets...` and select the package for SimpleHTTP. 9 | 10 | ## Features 11 | 12 | Currently, SimpleHTTP supports: 13 | * HTTP and HTTPS 14 | * GET, POST, PUT and DELETE 15 | * Headers 16 | * Timeouts 17 | 18 | All of these features with a simple and consistent API. In the future it will also support: 19 | * More validations 20 | * URL parsing 21 | * Delegates to indicate progress 22 | 23 | ## Usage 24 | 25 | SimpleHTTP is very, very, very, simple to use (really!) and it is asynchronous. You can send any type of request 26 | basically with three objects: `Request`, `Client` and `Response`. Consider that the general flow would be something 27 | like this: 28 | * Create a request 29 | * Use the client to send the request 30 | * Get the response 31 | * Profit! 32 | 33 | To make your life even easier, SimpleHTTP support JSON serialization and deserialization, so you don't need to worry 34 | about that. To use it in your Unity scripts, you just need to add the following instruction at the top of your .cs 35 | scripts: 36 | 37 | ``` 38 | using SimpleHTTP; 39 | ``` 40 | 41 | Below are some examples that can help you understand how it works. Also you can refer to the `Examples` folder for a 42 | full working example of the library with a demo scene. 43 | 44 | ### GET 45 | 46 | ```csharp 47 | IEnumerator Get() { 48 | // Create the request object 49 | Request request = new Request ("https://jsonplaceholder.typicode.com/posts/1"); 50 | 51 | // Instantiate the client 52 | Client http = new Client (); 53 | // Send the request 54 | yield return http.Send (request); 55 | 56 | // Use the response if the request was successful, otherwise print an error 57 | if (http.IsSuccessful ()) { 58 | Response resp = http.Response (); 59 | Debug.Log("status: " + resp.Status().ToString() + "\nbody: " + resp.Body()); 60 | } else { 61 | Debug.Log("error: " + http.Error()); 62 | } 63 | } 64 | ``` 65 | 66 | 67 | ### POST with JSON payload (raw) 68 | 69 | As I mentioned before, SimpleHTTP supports JSON serialization and deserialization, so you just need to have serializable 70 | POJOs in your code. Let's say you want to fetch a post from a certain URL and your POJO looks like this: 71 | ```csharp 72 | [System.Serializable] 73 | public class Post { 74 | private string title; 75 | private string body; 76 | private int userId; 77 | 78 | public Post(string title, string body, int userId) { 79 | this.title = title; 80 | this.body = body; 81 | this.userId = userId; 82 | } 83 | } 84 | ``` 85 | 86 | Then you can send a POST to the server to create a new post. 87 | ```csharp 88 | IEnumerator Post() { 89 | // Let's say that this the object you want to create 90 | Post post = new Post ("Test", "This is a test", 1); 91 | 92 | // Create the request object and use the helper function `RequestBody` to create a body from JSON 93 | Request request = new Request ("https://jsonplaceholder.typicode.com/posts") 94 | .Post (RequestBody.From (post)); 95 | 96 | // Instantiate the client 97 | Client http = new Client (); 98 | // Send the request 99 | yield return http.Send (request); 100 | 101 | // Use the response if the request was successful, otherwise print an error 102 | if (http.IsSuccessful ()) { 103 | Response resp = http.Response (); 104 | Debug.Log("status: " + resp.Status().ToString() + "\nbody: " + resp.Body()); 105 | } else { 106 | Debug.Log("error: " + http.Error()); 107 | } 108 | } 109 | ``` 110 | 111 | Consider that the `Post` object can be something more complex, with other objects inside (check the `UserProfile.cs` 112 | class in the examples folder for more details). Also, SimpleHTTP will set the content type of this request automagically 113 | as "application/json", so another thing you don't need to worry about :). 114 | 115 | ### POST with FormData 116 | If the server only supports `x-www-form-urlencoded` you still can use SimpleHTTP to send your request. In this case, 117 | you just need to use the `FormData` helper to create the body of your request. Then you can send the POST as you 118 | would normally do (and SimpleHTTP will also take care of the content type for this request). 119 | 120 | ```csharp 121 | Byte[] myFile = File.ReadAllBytes("file/path/test.jpg"); 122 | 123 | IEnumerator Post() { 124 | FormData formData = new FormData () 125 | .AddField ("userId", "1") 126 | .AddField ("body", "Hey, another test") 127 | .AddField ("title", "Did I say test?") 128 | .AddFile("file", myFile, "test.jpg", "image/jpg"); 129 | 130 | // Create the request object and use the helper function `RequestBody` to create a body from FormData 131 | Request request = new Request ("https://jsonplaceholder.typicode.com/posts") 132 | .Post (RequestBody.From (formData)); 133 | 134 | // Instantiate the client 135 | Client http = new Client (); 136 | // Send the request 137 | yield return http.Send (request); 138 | 139 | // Use the response if the request was successful, otherwise print an error 140 | if (http.IsSuccessful ()) { 141 | Response resp = http.Response (); 142 | Debug.Log("status: " + resp.Status().ToString() + "\nbody: " + resp.Body()); 143 | } else { 144 | Debug.Log("error: " + http.Error()); 145 | } 146 | } 147 | ``` 148 | 149 | ### Adding headers to your request 150 | So, you also need to add certain headers to your request? Do not fear! SimpleHTTP also let you do that easily. Just 151 | use the `AddHeader` method in your request and you're all set. 152 | 153 | ```csharp 154 | IEnumerator Get() { 155 | // Create the request object 156 | Request request = new Request ("https://jsonplaceholder.typicode.com/posts/1") 157 | .AddHeader ("Test-Header", "test") 158 | .AddHeader ("X-Fancy-Id", "some-fancy-id"); 159 | 160 | // Instantiate the client 161 | Client http = new Client (); 162 | // Send the request 163 | yield return http.Send (request); 164 | 165 | // Use the response if the request was successful, otherwise print an error 166 | if (http.IsSuccessful ()) { 167 | Response resp = http.Response (); 168 | Debug.Log("status: " + resp.Status().ToString() + "\nbody: " + resp.Body()); 169 | } else { 170 | Debug.Log("error: " + http.Error()); 171 | } 172 | } 173 | ``` 174 | 175 | ### PUT and DELETE 176 | PUT requests will work exactly the same than POSTs, you just need to use `Put()` instead. And DELETEs will work 177 | similarly to GETs, just use `Delete()` for that and you're done. 178 | 179 | ## License 180 | 181 | SimpleHTTP is licensed under the [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0). 182 | 183 | ## Publish 184 | 185 | * Go to Tools -> Asset Store -> Uploader 186 | * `Upload type`: From Assets Folder 187 | * `Folder path`: Assets/SimpleHTTP/ 188 | * `Dependencies`: com.unity.modules.ui, com.unity.modules.unitywebrequest 189 | * Validate 190 | * Export (to create .unitypackage in Assets folder) 191 | * Upload 192 | 193 | ## Donation 194 | 195 | SimpleHTTP is free and open source because I think that HTTP is something fundamental and basic for games nowadays, 196 | and there are no simple and free solutions to perform basic tasks like GET or POST. However, I'm open to donations, and 197 | if you really love SimpleHTTP I'd really appreciate if you buy me a coffee to continue improving this small and simple 198 | client for the use of all of us. 199 | 200 | https://paypal.me/satanas82 201 | 202 | 203 | 204 | -------------------------------------------------------------------------------- /SVG/icon-128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/satanas/unity-simple-http/52fa9f07740772559c114d24d18aea6548793a4c/SVG/icon-128x128.png -------------------------------------------------------------------------------- /SVG/icon-200x124.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/satanas/unity-simple-http/52fa9f07740772559c114d24d18aea6548793a4c/SVG/icon-200x124.png -------------------------------------------------------------------------------- /SVG/icon-516x389.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/satanas/unity-simple-http/52fa9f07740772559c114d24d18aea6548793a4c/SVG/icon-516x389.png -------------------------------------------------------------------------------- /SVG/icons.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 22 | 24 | 45 | 47 | 48 | 50 | image/svg+xml 51 | 53 | 54 | 55 | 56 | 57 | 62 | 71 | 80 | 89 | 99 | 100 | 105 | 116 | 119 | 127 | SimpleHTTP 139 | 140 | 143 | 150 | 156 | 159 | 161 | 167 | 176 | 186 | 196 | 206 | 217 | 228 | 239 | 250 | 251 | 252 | 253 | 254 | 259 | 267 | SimpleHTTP 279 | 280 | 285 | 292 | 298 | 301 | 303 | 309 | 318 | 328 | 338 | 348 | 359 | 370 | 381 | 392 | 393 | 394 | 395 | 396 | 401 | 408 | 414 | 417 | 419 | 425 | 434 | 444 | 454 | 464 | 475 | 486 | 497 | 508 | 509 | 510 | 511 | 512 | 520 | SimpleHTTP 532 | 538 | 541 | 544 | 552 | 557 | 566 | 576 | 586 | 596 | 607 | 618 | 629 | 640 | 641 | 642 | 643 | HTTP forhumans 658 | http://satanas.io 672 | 673 | 674 | -------------------------------------------------------------------------------- /SVG/satanas.io-key-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/satanas/unity-simple-http/52fa9f07740772559c114d24d18aea6548793a4c/SVG/satanas.io-key-image.png -------------------------------------------------------------------------------- /generate_doc.sh: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env bash 2 | pandoc README.md -o Assets/SimpleHTTP/README.html 3 | -------------------------------------------------------------------------------- /simplehttp-1.0.0.unitypackage: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/satanas/unity-simple-http/52fa9f07740772559c114d24d18aea6548793a4c/simplehttp-1.0.0.unitypackage -------------------------------------------------------------------------------- /simplehttp-1.0.2.unitypackage: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/satanas/unity-simple-http/52fa9f07740772559c114d24d18aea6548793a4c/simplehttp-1.0.2.unitypackage --------------------------------------------------------------------------------