├── .gitignore
├── Documentation
├── 01_add_plugin.png
├── 02_modify_manifest.png
├── 03_add_component.png
├── 04_config_script.png
├── 05_config_build_settings.png
├── 06_trouble_manifest_merge.png
├── 07_portal_metrics.png
└── Changelog.md
├── ExampleGame
├── Assets
│ ├── HockeyAppUnityAndroid.meta
│ ├── HockeyAppUnityAndroid
│ │ ├── AndroidManifest.xml
│ │ ├── AndroidManifest.xml.meta
│ │ ├── HockeyAppUnity-Scripts.meta
│ │ ├── HockeyAppUnity-Scripts
│ │ │ ├── HockeyAppAndroid.cs
│ │ │ └── HockeyAppAndroid.cs.meta
│ │ ├── HockeySDK-5.2.0.aar
│ │ ├── README.pdf
│ │ ├── exampleunityplugin.jar
│ │ ├── exampleunityplugin.jar.meta
│ │ └── hockeysdk-unity-5.2.0.aar
│ ├── TestScene.unity
│ ├── TestScene.unity.meta
│ ├── TestUI.meta
│ └── TestUI
│ │ ├── Ressources.meta
│ │ ├── Ressources
│ │ ├── btn_active.png
│ │ ├── btn_active.png.meta
│ │ ├── btn_normal.png
│ │ └── btn_normal.png.meta
│ │ ├── TestUI.cs
│ │ ├── TestUI.cs.meta
│ │ ├── TestUISkin.guiskin
│ │ └── TestUISkin.guiskin.meta
└── ProjectSettings
│ ├── AudioManager.asset
│ ├── ClusterInputManager.asset
│ ├── DynamicsManager.asset
│ ├── EditorBuildSettings.asset
│ ├── EditorSettings.asset
│ ├── GraphicsSettings.asset
│ ├── InputManager.asset
│ ├── NavMeshAreas.asset
│ ├── NavMeshLayers.asset
│ ├── NetworkManager.asset
│ ├── Physics2DSettings.asset
│ ├── ProjectSettings.asset
│ ├── ProjectVersion.txt
│ ├── QualitySettings.asset
│ ├── TagManager.asset
│ ├── TimeManager.asset
│ ├── UnityAdsSettings.asset
│ └── UnityConnectSettings.asset
├── HockeyAppUnityPlugin
├── build.gradle
├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── hockeysdk-unity
│ ├── build.gradle
│ ├── libs
│ │ └── HockeySDK-5.2.0.aar
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ └── net
│ │ │ └── hockeyapp
│ │ │ └── unity
│ │ │ └── HockeyUnityPlugin.java
│ │ └── res
│ │ ├── drawable-hdpi
│ │ └── ic_launcher.png
│ │ ├── drawable-mdpi
│ │ └── ic_launcher.png
│ │ ├── drawable-xhdpi
│ │ └── ic_launcher.png
│ │ ├── drawable-xxhdpi
│ │ └── ic_launcher.png
│ │ ├── layout
│ │ └── activity_plugin.xml
│ │ ├── menu
│ │ └── plugin.xml
│ │ ├── values-sw600dp
│ │ └── dimens.xml
│ │ ├── values-sw720dp-land
│ │ └── dimens.xml
│ │ ├── values-v11
│ │ └── styles.xml
│ │ ├── values-v14
│ │ └── styles.xml
│ │ └── values
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
├── import-summary.txt
└── settings.gradle
├── LICENSE
├── Plugins
└── HockeyAppUnityAndroid
│ ├── AndroidManifest.xml
│ ├── HockeyAppUnity-Scripts
│ └── HockeyAppAndroid.cs
│ ├── HockeySDK-5.2.0.aar
│ ├── README.pdf
│ └── hockeysdk-unity-5.2.0.aar
└── README.md
/.gitignore:
--------------------------------------------------------------------------------
1 | # ================= #
2 | # Android generated #
3 | # ================= #
4 | *.apk
5 | *.ap_
6 | *.dex
7 | *.class
8 | bin/
9 | gen/
10 | local.properties
11 | .classpath
12 | .project
13 | proguard/
14 | *.iml
15 | *.ipr
16 | *.iws
17 | .idea/
18 | gen-external-apklibs/
19 | out/
20 | target/
21 | .gradle/
22 | build/
23 | /*/build/
24 | *.log
25 | infer-out
26 |
27 | # =============== #
28 | # Unity generated #
29 | # =============== #
30 | Temp/
31 | Obj/
32 | UnityGenerated/
33 | Library/
34 |
35 | # ===================================== #
36 | # Visual Studio / MonoDevelop generated #
37 | # ===================================== #
38 | ExportedObj/
39 | *.svd
40 | *.userprefs
41 | *.csproj
42 | *.pidb
43 | *.suo
44 | *.sln
45 | *.user
46 | *.unityproj
47 | *.booproj
48 |
49 | # ============ #
50 | # OS generated #
51 | # ============ #
52 | .DS_Store
53 | .DS_Store?
54 | ._*
55 | .Spotlight-V100
56 | .Trashes
57 | Icon?
58 | ehthumbs.db
59 | Thumbs.db
--------------------------------------------------------------------------------
/Documentation/01_add_plugin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitstadium/HockeySDK-Unity-Android/eabf07dd7786de4dfb2b9be6b04f75eb6cdb66cc/Documentation/01_add_plugin.png
--------------------------------------------------------------------------------
/Documentation/02_modify_manifest.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitstadium/HockeySDK-Unity-Android/eabf07dd7786de4dfb2b9be6b04f75eb6cdb66cc/Documentation/02_modify_manifest.png
--------------------------------------------------------------------------------
/Documentation/03_add_component.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitstadium/HockeySDK-Unity-Android/eabf07dd7786de4dfb2b9be6b04f75eb6cdb66cc/Documentation/03_add_component.png
--------------------------------------------------------------------------------
/Documentation/04_config_script.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitstadium/HockeySDK-Unity-Android/eabf07dd7786de4dfb2b9be6b04f75eb6cdb66cc/Documentation/04_config_script.png
--------------------------------------------------------------------------------
/Documentation/05_config_build_settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitstadium/HockeySDK-Unity-Android/eabf07dd7786de4dfb2b9be6b04f75eb6cdb66cc/Documentation/05_config_build_settings.png
--------------------------------------------------------------------------------
/Documentation/06_trouble_manifest_merge.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitstadium/HockeySDK-Unity-Android/eabf07dd7786de4dfb2b9be6b04f75eb6cdb66cc/Documentation/06_trouble_manifest_merge.png
--------------------------------------------------------------------------------
/Documentation/07_portal_metrics.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitstadium/HockeySDK-Unity-Android/eabf07dd7786de4dfb2b9be6b04f75eb6cdb66cc/Documentation/07_portal_metrics.png
--------------------------------------------------------------------------------
/Documentation/Changelog.md:
--------------------------------------------------------------------------------
1 | ## Changelog
2 |
3 | ### Version 5.2.0
4 |
5 | This release wraps HockeySDK-Android 5.2.0.
6 |
7 | * **[Improvement]** Replaced obsolete `WWW` request calls with the new `UnityWebRequest` version.
8 |
9 | #### Changelog for HockeySDK-Android 5.2.0
10 |
11 | * **[Bugfix]** Leaking HTTP connection.
12 | * **[Bugfix]** Fix HTTPS connection creation.
13 | * **[Security]** To enforce TLS 1.2 on all HTTPS connections the SDK makes, we are dropping support for API level 15 (which supports only TLS 1.0), the minimum SDK version thus becomes 16. Previous versions of the SDK were already using TLS 1.2 on API level 16+.
14 |
15 | ### Version 5.1.1
16 |
17 | This release wraps HockeySDK-Android 5.1.0.
18 |
19 | #### Changelog for HockeySDK-Android 5.1.0
20 |
21 | * **[Bugfix]** Fix issue in persistence logic that could cause Session information to be inaccurate. [#340](https://github.com/bitstadium/HockeySDK-Android/pull/340)
22 | * **[Improvement]** Remove left-to-right attribute in case the app that integrates the SDK doesn't use that. Thx to [Steven](https://github.com/smuldr) for this contribution. [#335](https://github.com/bitstadium/HockeySDK-Android/pull/335)
23 | * **[Improvement]** Improve error message for the Feedback feature. [#341](https://github.com/bitstadium/HockeySDK-Android/pull/341)
24 | * **[Improvement]** It's now possible to call `setUserId` for Feedback. [#339](https://github.com/bitstadium/HockeySDK-Android/pull/339)
25 |
26 | ### Version 5.1.0
27 |
28 | This release adds the missing bindings for the `trackEvent`-api in MetricsManager.java.
29 |
30 | ### 5.0.1
31 |
32 | This is a bugfix release. If you upgrade from version 1.X, please be aware of the breaking changes in version 5.0.0!
33 |
34 | * **[IMPROVEMENT]** Uses HockeySDK-Android 5.0.4. Please have a look at it's full changelog.
35 | * **[BUGFIX]** Fix bug that made it possible to bypass authentication. [#22](https://github.com/bitstadium/HockeySDK-Unity-Android/pull/22).
36 | * **[BUGFIX]** Fix an issue when using the GUID for crash reports. [#26](https://github.com/bitstadium/HockeySDK-Unity-Android/pull/26)
37 | * **[BUGFIX]** Fix a bug where merging AndroidManifest.xml would fail. [#11](https://github.com/bitstadium/HockeySDK-Unity-Android/issues/11)
38 |
39 | #### Changelog for HockeySDK-Android 5.0.4
40 |
41 | This version contains a few bugfixes as well as the removal of an API that has been deprecated since HockeySDK 3.7.0-Beta.2.
42 |
43 | * **Removal of deprecated API** `ExceptionHandler.saveException(Throwable exception, CrashManagerListener listener)` has been deprecated since 3.7.0-beta.2. Use `ExceptionHandler.saveException(Throwable exception, Thread thread, CrashManagerListener listener)` instead.
44 | * **Bugfix** The SDK now deletes redundant crash reports.
45 | * **Bugfix** The SDK does no longer send the event that indicates the start of a session twice but once. There was no impact on session counts as the event was de-duplicated on the server.
46 | * **Bugfix** Fixes a potential deadlock when reading device information when saving an exception.
47 | * **Bugfix** Fixes a potential NPE when processing stacktraces. Thanks to [Thomas Reis for reporting issue #331](https://github.com/bitstadium/HockeySDK-Android/issues/331).
48 |
49 | #### Changelog for HockeySDK-Android 5.0.3
50 |
51 | This release now limits the number of crashes that are stored by the SDK while the device is offline to 100 Crashes. HockeySDK-Android will stop to collect crashes until the number of unsent crashes drops below the limit of 100 unsent crashes.
52 |
53 | * [BUGFIX] Fixes a possible `OutOfMemoryError` exception. This only occurs when a very large number of crashes – several 100k or more – wasn't sent to the server. [#313](https://github.com/bitstadium/HockeySDK-Android/pull/313)
54 |
55 |
56 | ### 5.0.0
57 |
58 | Upgrade to HockeySDK for Android 5.0.2.
59 |
60 | This release comes with one major breaking change. HockeySDK 5.0.0 raises the minimum API level to 15.
61 | In addition, we no longer support restricting builds by device id. The reason is that, with Android O, `ANDROID_ID` no longer ensures a consistent way of identification of a user.
62 |
63 | To be ready for Android O, HockeySDK-Android now limits the `WRITE_EXTERNAL_STORAGE` permission with the `maxSdkVersion` filter. In some use cases, e.g. where an app contains a dependency that requires this permission, `maxSdkVersion` makes it impossible for those dependencies to grant or request the permission. The solution for those cases is to declare the `tools:node="replace"` manifest merging strategy later in the dependency tree:
64 |
65 | ``````
66 |
67 | #### Full changelog
68 |
69 | In addition, this release contains the following changes:
70 |
71 | * [IMPROVEMENT] Support for Android O.
72 | * [IMPROVEMENT] Code scans no longer trigger warnings related to usage of `ANDROID_ID` as we are no longer using it.
73 | * [IMPROVEMENT] The SDK supports Android Strict Mode way better as it no longer violates it.
74 | * [IMPROVEMENT] We've improved the way we send Feedback attachments.
75 | * [IMPROVEMENT] The SDK no longer caches information about in-app updates to make sure updates are available immediately. The iOS SDK has behaved like this for a while and we decided to align the behavior across SDKs.
76 | * [IMPROVEMENT] Add the ability to when to show the UpdateFragment [#280](https://github.com/bitstadium/HockeySDK-Android/issues/280).
77 | * [IMPROVEMENT] Retrieving the last crash details is now asynchronous.
78 | * [BUGFIX] Metrics no longer leaks a connection.
79 | * [BUGFIX] It's no longer possible to circumvent the login UI by pressing the backbutton under certain circumstances [#278](https://github.com/bitstadium/HockeySDK-Android/pull/278).
80 | * [BUGFIX] Fix a crash in MetricsManager [#279](https://github.com/bitstadium/HockeySDK-Android/pull/279).
81 | * [BUGFIX] Fix authentication by email [#288](https://github.com/bitstadium/HockeySDK-Android/pull/288).
82 | * [BUGFIX] Fix a regression that was introduced in 5.0.0-beta.1 that prevented attaching screenshots to work [#289](https://github.com/bitstadium/HockeySDK-Android/pull/289).
83 | * [BUGFIX] Fix Feedback notifications on Android [#290](https://github.com/bitstadium/HockeySDK-Android/pull/290).
84 | * [IMPROVEMENT] Add the ability to when to show the UpdateFragment [#280](https://github.com/bitstadium/HockeySDK-Android/issues/280).
85 | * [IMPROVEMENT] `CrashManagerListener` now has `onNoCrashesFound()` to notify you in case no new crashes were found [#280](https://github.com/bitstadium/HockeySDK-Android/issues/280).
86 | * [DEPRECATION] We've removed the `onCrashesFound` callback in `CrashManagerListener` as it has been deprecated since HockeySDK 3.0.0.
87 | * [Bugfix] Fixes a NPE in `FeedbackActivity`. [#303](https://github.com/bitstadium/HockeySDK-Android/pull/303)
88 | * [Bugfix] Fixes a potential deadlock in `CrashManager`.[#https://github.com/bitstadium/HockeySDK-Android/pull/308]
89 | * [Improvement] Fix potential NPE when calling `MetricsManager.sessionTrackingEnabled()` before calling `MetricsManager.register(...)`. [#310](https://github.com/bitstadium/HockeySDK-Android/pull/310)
90 | * * [Bugfix] Fix a bug in the Italian translation. [#296](https://github.com/bitstadium/HockeySDK-Android/pull/296)
91 | * [Improvement] Use different timestamp format for crash date and app start time. [#297](https://github.com/bitstadium/HockeySDK-Android/pull/297)
92 |
93 | ### 1.1.6
94 |
95 | Upgrade to HockeySDK for Android 4.1.5
96 |
97 | * [FIX] Fix a resource leak in Sender.
98 | * [FIX] Fix possibility to bypass authentication.
99 | * [FIX] Fix the progress bar when sending feedback.
100 | * [FIX] Fix the dates in the Feedback UI.
101 | * [FIX] Fix ConcurrentModificationException in metrics feature.
102 | * [FIX] Fix potential crash related to multi-threading in Channel.
103 | * [FIX] Fix the focus in the Feedback UI, this also improves accessibility.
104 | * [IMPROVEMENT] Fix some strict mode violations.
105 | * [IMPROVEMENT] Improve accessibility for Feedback attachments.
106 | * [IMPROVEMENT] Send batched events when the app goes into background.
107 | * [IMPROVEMENT] Automatically add the sdk to the often already existent Plugins folder
108 |
109 | ### 1.1.5
110 |
111 | * [FIX] Fixes session tracking by explicitly starting one.
112 |
113 | ### 1.1.4
114 | Upgrade to HockeySDK for Android 4.1.4
115 |
116 | * [IMPROVEMENT] Minor bugfixes
117 | * [IMPROVEMENT] FeedbackActivity now uses accessibility labels.
118 |
119 |
120 | ### 1.1.3
121 | * [IMPROVEMENT] Update to HockeySDK Android version 4.1.3
122 | * [FIX] Thanks to Ivan Matkov, it's no longer possible to avoid providing login information and circumvent authentication. [#208](https://github.com/bitstadium/HockeySDK-Android/pull/208)
123 | * [FIX] Thanks to Guillaume Perrot, the google play store detection was fixed for emulators running Android Nougat. [#209](https://github.com/bitstadium/HockeySDK-Android/pull/209)
124 | * [IMPROVEMENT] It's now possible to scroll within the `FeedbackActivity` while the keyboard is up. Previously, when providing a lot of feedback, the keyboard could hide the submit-button. [#207](https://github.com/bitstadium/HockeySDK-Android/pull/207)
125 | * [IMPROVEMENT] In case the app is offline, the Update feature will no longer log the IOException to avoid confusion. [#209](https://github.com/bitstadium/HockeySDK-Android/pull/209)
126 |
127 | ### 1.1.2
128 | * [BUGFIX] Installing an app through HockeyApp would falsely report this as a store installation on Android Nougat
129 | * [BUGFIX] Workaround an issue when installing updates and targeting SDK version 24
130 | * [BUGFIX] Added user contributed localizations for Simplified Chinese and Russian
131 | * [UPDATE] Plugin now uses HockeySDK Android 4.1.2
132 |
133 | ### 1.1.1
134 | * [BUGFIX] Fix bug where report for managed exceptions didn't contain a `CrashReporter Key`. The key is needed to get proper user statistics on the portal
135 | * [UPDATE] Plugin now uses HockeySDK Android 4.0.1
136 |
137 | ### 1.1.0
138 | * [NEW] User Metrics (user and session tracking)
139 | * [NEW] Trigger version update check explicitly
140 | * [NEW] Authentication
141 | * [BUGFIX] Avoid app crash when first launching app without internet connection
142 | * [UPDATE] Plugin now uses HockeySDK Android 4.0.0
143 | * [UPDATE] Minor bugfixes
144 |
145 | ### 1.0.8:
146 |
147 | - Update SDK to use HockeySDK 3.6.2 for Android
148 | - Fix minor bug
149 |
150 | ### 1.0.7:
151 |
152 | - Update SDK to use HockeySDK 3.6.1 for Android
153 | - Fix minor bug
154 |
155 | ### 1.0.6:
156 |
157 | - Append SDK and App information to crash reports
158 | * SDK name
159 | * SDK version
160 | * App version name
161 |
--------------------------------------------------------------------------------
/ExampleGame/Assets/HockeyAppUnityAndroid.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 3d8f53f17d6c04c98aac9b59fcbcbaff
3 | folderAsset: yes
4 | timeCreated: 1433484542
5 | licenseType: Pro
6 | DefaultImporter:
7 | userData:
8 | assetBundleName:
9 | assetBundleVariant:
10 |
--------------------------------------------------------------------------------
/ExampleGame/Assets/HockeyAppUnityAndroid/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ExampleGame/Assets/HockeyAppUnityAndroid/AndroidManifest.xml.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 12ea5c8efe5554cbd8a8ff017694f13b
3 | timeCreated: 1501524001
4 | licenseType: Pro
5 | TextScriptImporter:
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/ExampleGame/Assets/HockeyAppUnityAndroid/HockeyAppUnity-Scripts.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: d9dc1e81ab942458c8a1cf3150005d40
3 | folderAsset: yes
4 | timeCreated: 1501523999
5 | licenseType: Pro
6 | DefaultImporter:
7 | userData:
8 | assetBundleName:
9 | assetBundleVariant:
10 |
--------------------------------------------------------------------------------
/ExampleGame/Assets/HockeyAppUnityAndroid/HockeyAppUnity-Scripts/HockeyAppAndroid.cs:
--------------------------------------------------------------------------------
1 | /*
2 | * Version: 5.2.0
3 | */
4 |
5 | using UnityEngine;
6 | using System.Collections;
7 | using System.Collections.Generic;
8 | using System;
9 | using System.IO;
10 | using System.Runtime.InteropServices;
11 |
12 | public class HockeyAppAndroid : MonoBehaviour
13 | {
14 | private const string JAVA_UNITYPLAYER_CLASS = "com.unity3d.player.UnityPlayer";
15 | private const string JAVA_HOCKEYUNITYPLUGIN_CLASS = "net.hockeyapp.unity.HockeyUnityPlugin";
16 |
17 | protected const string HOCKEYAPP_BASEURL = "https://rink.hockeyapp.net/";
18 | protected const string HOCKEYAPP_CRASHESPATH = "api/2/apps/[APPID]/crashes/upload";
19 | protected const int MAX_CHARS = 199800;
20 | protected const string LOG_FILE_DIR = "/logs/";
21 | private const string SERVER_URL_PLACEHOLDER = "your-custom-server-url";
22 | private static HockeyAppAndroid instance;
23 |
24 | public enum AuthenticatorType
25 | {
26 | Anonymous,
27 | HockeyAppEmail,
28 | HockeyAppUser,
29 | Validate
30 | }
31 |
32 | [Header("HockeyApp Setup")]
33 | public string appID = "your-hockey-app-id";
34 | public string packageID = "your-package-identifier";
35 | public string serverURL = SERVER_URL_PLACEHOLDER;
36 |
37 | [Header("Authentication")]
38 | public AuthenticatorType authenticatorType;
39 | public string secret = "your-hockey-app-secret";
40 |
41 | [Header("Crashes & Exceptions")]
42 | public bool autoUploadCrashes = false;
43 | public bool exceptionLogging = true;
44 |
45 | [Header("Metrics")]
46 | public bool userMetrics = true;
47 |
48 | [Header("Version Updates")]
49 | public bool updateAlert = true;
50 |
51 | void Awake ()
52 | {
53 | #if (UNITY_ANDROID && !UNITY_EDITOR)
54 | if (instance != null) {
55 | Destroy(gameObject);
56 | return;
57 | }
58 |
59 | DontDestroyOnLoad(gameObject);
60 | CreateLogDirectory();
61 |
62 | if(exceptionLogging == true && IsConnected() == true) {
63 | List logFileDirs = GetLogFiles();
64 | if(logFileDirs.Count > 0) {
65 | Debug.Log("Found files: " + logFileDirs.Count);
66 | StartCoroutine(SendLogs(logFileDirs));
67 | }
68 | }
69 | serverURL = GetBaseURL();
70 | int authType = (int)authenticatorType;
71 | StartCrashManager(serverURL, appID, secret, authType, updateAlert, userMetrics, autoUploadCrashes);
72 | #endif
73 | }
74 |
75 | void OnEnable ()
76 | {
77 |
78 | #if (UNITY_ANDROID && !UNITY_EDITOR)
79 | if(exceptionLogging == true) {
80 | System.AppDomain.CurrentDomain.UnhandledException += OnHandleUnresolvedException;
81 | Application.logMessageReceived += OnHandleLogCallback;
82 | }
83 | #endif
84 | }
85 |
86 | void OnDisable ()
87 | {
88 | #if (UNITY_ANDROID && !UNITY_EDITOR)
89 | if (exceptionLogging == true) {
90 | System.AppDomain.CurrentDomain.UnhandledException -= OnHandleUnresolvedException;
91 | Application.logMessageReceived -= OnHandleLogCallback;
92 | }
93 | #endif
94 | }
95 |
96 | void OnApplicationPause(bool pause)
97 | {
98 | if (!pause) {
99 | PerformAuthentication();
100 | }
101 | }
102 |
103 | ///
104 | /// Start HockeyApp for Unity.
105 | ///
106 | /// The url of the endpoint used for sending data.
107 | /// The app specific Identifier provided by HockeyApp.
108 | /// The app secret used for authenticating users.
109 | /// Auth type used for authentication: Anonymous, email, email& password, or check if user was explicitly added to use this app.
110 | /// True, if user should be notified about newer versions of the app.
111 | /// True, app should send user and session information.
112 | /// True, if crashes should be sent without asking the user for approval.
113 | protected void StartCrashManager (string urlString, string appID, string secret, int authType, bool updateManagerEnabled, bool userMetricsEnabled, bool autoSendEnabled)
114 | {
115 | #if (UNITY_ANDROID && !UNITY_EDITOR)
116 | using (var unityPlayer = new AndroidJavaClass(JAVA_UNITYPLAYER_CLASS))
117 | using (var pluginClass = new AndroidJavaClass(JAVA_HOCKEYUNITYPLUGIN_CLASS))
118 | {
119 | var currentActivity = unityPlayer.GetStatic("currentActivity");
120 | pluginClass.CallStatic("startHockeyAppManager", currentActivity, urlString, appID, secret, authType, updateManagerEnabled, userMetricsEnabled, autoSendEnabled);
121 | }
122 | instance = this;
123 | #endif
124 | }
125 |
126 | ///
127 | /// This method allows to track an event that happened in your app.
128 | /// Remember to choose meaningful event names to have the best experience when diagnosing your app
129 | /// in the web portal.
130 | ///
131 | /// The name of the event, which should be tracked.
132 | public static void TrackEvent(string eventName)
133 | {
134 | #if (UNITY_ANDROID && !UNITY_EDITOR)
135 | if (instance != null)
136 | {
137 | using (var pluginClass = new AndroidJavaClass(JAVA_HOCKEYUNITYPLUGIN_CLASS))
138 | {
139 | pluginClass.CallStatic("trackEvent", eventName);
140 | }
141 | }
142 | else
143 | {
144 | Debug.Log("Failed to track event. SDK has not been initialized, yet.");
145 | }
146 | #endif
147 | }
148 |
149 | ///
150 | /// This method allows to track an event that happened in your app.
151 | /// Remember to choose meaningful event names to have the best experience when diagnosing your app
152 | /// in the web portal.
153 | ///
154 | /// The name of the event, which should be tracked.
155 | /// Key value pairs, which contain custom metrics.
156 | public static void TrackEvent(string eventName, IDictionary properties)
157 | {
158 | #if (UNITY_ANDROID && !UNITY_EDITOR)
159 | if (instance != null)
160 | {
161 | using (var pluginClass = new AndroidJavaClass(JAVA_HOCKEYUNITYPLUGIN_CLASS))
162 | {
163 | pluginClass.CallStatic("trackEvent", eventName,
164 | DictainaryToJavaMap(properties, "java.lang.String", "java.lang.String"));
165 | }
166 | }
167 | else
168 | {
169 | Debug.Log("Failed to track event. SDK has not been initialized, yet.");
170 | }
171 | #endif
172 | }
173 |
174 | ///
175 | /// This method allows to track an event that happened in your app.
176 | /// Remember to choose meaningful event names to have the best experience when diagnosing your app
177 | /// in the web portal.
178 | ///
179 | /// The name of the event, which should be tracked.
180 | /// Key value pairs with additional info about the event.
181 | /// Key value pairs, which contain custom metrics.
182 | public static void TrackEvent(string eventName, IDictionary properties, IDictionary measurements)
183 | {
184 | #if (UNITY_ANDROID && !UNITY_EDITOR)
185 | if (instance != null)
186 | {
187 | using (var pluginClass = new AndroidJavaClass(JAVA_HOCKEYUNITYPLUGIN_CLASS))
188 | {
189 | pluginClass.CallStatic("trackEvent", eventName,
190 | DictainaryToJavaMap(properties, "java.lang.String", "java.lang.String"),
191 | DictainaryToJavaMap(measurements, "java.lang.String", "java.lang.Double"));
192 | }
193 | }
194 | else
195 | {
196 | Debug.Log("Failed to track event. SDK has not been initialized, yet.");
197 | }
198 | #endif
199 | }
200 |
201 | ///
202 | /// Performs user authentication.
203 | ///
204 | public static void PerformAuthentication()
205 | {
206 | #if (UNITY_ANDROID && !UNITY_EDITOR)
207 | using (var unityPlayer = new AndroidJavaClass(JAVA_UNITYPLAYER_CLASS))
208 | using (var pluginClass = new AndroidJavaClass(JAVA_HOCKEYUNITYPLUGIN_CLASS))
209 | {
210 | var currentActivity = unityPlayer.GetStatic("currentActivity");
211 | pluginClass.CallStatic("performAuthentication", currentActivity);
212 | }
213 | #endif
214 | }
215 |
216 | ///
217 | /// Check for version update and present alert if newer version is available.
218 | ///
219 | public static void CheckForUpdate()
220 | {
221 | #if (UNITY_ANDROID && !UNITY_EDITOR)
222 | if (instance != null)
223 | {
224 | using (var unityPlayer = new AndroidJavaClass(JAVA_UNITYPLAYER_CLASS))
225 | using (var pluginClass = new AndroidJavaClass(JAVA_HOCKEYUNITYPLUGIN_CLASS))
226 | {
227 | var currentActivity = unityPlayer.GetStatic("currentActivity");
228 | pluginClass.CallStatic("checkForUpdate", currentActivity, instance.serverURL, instance.appID);
229 | }
230 | }
231 | else
232 | {
233 | Debug.Log("Failed to check for update. SDK has not been initialized, yet.");
234 | }
235 | #endif
236 | }
237 |
238 | ///
239 | /// Display a feedback form.
240 | ///
241 | public static void ShowFeedbackForm()
242 | {
243 | #if (UNITY_ANDROID && !UNITY_EDITOR)
244 | if (instance != null)
245 | {
246 | using (var unityPlayer = new AndroidJavaClass(JAVA_UNITYPLAYER_CLASS))
247 | using (var pluginClass = new AndroidJavaClass(JAVA_HOCKEYUNITYPLUGIN_CLASS))
248 | {
249 | var currentActivity = unityPlayer.GetStatic("currentActivity");
250 | pluginClass.CallStatic("startFeedbackForm", currentActivity);
251 | }
252 | }
253 | else
254 | {
255 | Debug.Log("Failed to present feedback form. SDK has not been initialized, yet.");
256 | }
257 | #endif
258 | }
259 |
260 | ///
261 | /// Collect all header fields for the custom exception report.
262 | ///
263 | /// A list which contains the header fields for a log file.
264 | protected virtual List GetLogHeaders ()
265 | {
266 | List list = new List ();
267 |
268 | #if (UNITY_ANDROID && !UNITY_EDITOR)
269 | using (var pluginClass = new AndroidJavaClass(JAVA_HOCKEYUNITYPLUGIN_CLASS))
270 | {
271 | var versionCode = pluginClass.CallStatic("getVersionCode");
272 | var versionName = pluginClass.CallStatic("getVersionName");
273 | var manufacturer = pluginClass.CallStatic("getManufacturer");
274 | var model = pluginClass.CallStatic("getModel");
275 | var deviceIdentifier = pluginClass.CallStatic("getDeviceIdentifier");
276 |
277 | list.Add("Package: " + packageID);
278 | list.Add("Version Code: " + versionCode);
279 | list.Add("Version Name: " + versionName);
280 |
281 | var versionComponents = SystemInfo.operatingSystem.Split('/');
282 | var osVersion = "Android: " + versionComponents[0].Replace("Android OS ", "");
283 | list.Add (osVersion);
284 |
285 | list.Add("Manufacturer: " + manufacturer);
286 | list.Add("Model: " + model);
287 | list.Add("CrashReporter Key: " + deviceIdentifier);
288 | list.Add("Date: " + DateTime.UtcNow.ToString("ddd MMM dd HH:mm:ss {}zzzz yyyy").Replace("{}", "GMT"));
289 | }
290 | #endif
291 |
292 | return list;
293 | }
294 |
295 | ///
296 | /// Create the form data for a single exception report.
297 | ///
298 | /// A string that contains information about the exception.
299 | /// The form data for the current crash report.
300 | protected virtual WWWForm CreateForm (string log)
301 | {
302 | WWWForm form = new WWWForm ();
303 |
304 | #if (UNITY_ANDROID && !UNITY_EDITOR)
305 | byte[] bytes = null;
306 | using(FileStream fs = File.OpenRead(log)){
307 |
308 | if (fs.Length > MAX_CHARS) {
309 | string resizedLog = null;
310 |
311 | using(StreamReader reader = new StreamReader(fs)) {
312 |
313 | reader.BaseStream.Seek( fs.Length - MAX_CHARS, SeekOrigin.Begin );
314 | resizedLog = reader.ReadToEnd();
315 | }
316 |
317 | List logHeaders = GetLogHeaders();
318 | string logHeader = "";
319 |
320 | foreach (string header in logHeaders) {
321 | logHeader += header + "\n";
322 | }
323 | resizedLog = logHeader + "\n" + "[...]" + resizedLog;
324 |
325 | try {
326 | bytes = System.Text.Encoding.Default.GetBytes(resizedLog);
327 | } catch(ArgumentException ae) {
328 | if (Debug.isDebugBuild) {
329 | Debug.Log("Failed to read bytes of log file: " + ae);
330 | }
331 | }
332 | } else {
333 | try {
334 | bytes = File.ReadAllBytes(log);
335 | } catch(SystemException se) {
336 | if (Debug.isDebugBuild) {
337 | Debug.Log("Failed to read bytes of log file: " + se);
338 | }
339 | }
340 | }
341 | }
342 |
343 | if(bytes != null) {
344 | form.AddBinaryData("log", bytes, log, "text/plain");
345 | }
346 |
347 | #endif
348 |
349 | return form;
350 | }
351 |
352 | ///
353 | /// Create the log directory if needed.
354 | ///
355 | protected virtual void CreateLogDirectory ()
356 | {
357 | #if (UNITY_ANDROID && !UNITY_EDITOR)
358 | string logsDirectoryPath = Application.persistentDataPath + LOG_FILE_DIR;
359 |
360 | try {
361 | Directory.CreateDirectory (logsDirectoryPath);
362 | } catch (Exception e) {
363 | if (Debug.isDebugBuild) Debug.Log ("Failed to create log directory at " + logsDirectoryPath + ": " + e);
364 | }
365 | #endif
366 | }
367 |
368 | ///
369 | /// Get a list of all existing exception reports.
370 | ///
371 | /// A list which contains the filenames of the log files.
372 | protected virtual List GetLogFiles ()
373 | {
374 | List logs = new List ();
375 |
376 | #if (UNITY_ANDROID && !UNITY_EDITOR)
377 | string logsDirectoryPath = Application.persistentDataPath + LOG_FILE_DIR;
378 |
379 | try {
380 | DirectoryInfo info = new DirectoryInfo(logsDirectoryPath);
381 | FileInfo[] files = info.GetFiles();
382 |
383 | if (files.Length > 0) {
384 | foreach (FileInfo file in files) {
385 | if (file.Extension == ".log") {
386 | logs.Add(file.FullName);
387 | } else {
388 | File.Delete(file.FullName);
389 | }
390 | }
391 | }
392 | } catch(Exception e) {
393 | if (Debug.isDebugBuild) {
394 | Debug.Log("Failed to write exception log to file: " + e);
395 | }
396 | }
397 | #endif
398 |
399 | return logs;
400 | }
401 |
402 | ///
403 | /// Upload existing reports to HockeyApp and delete delete them locally.
404 | ///
405 | protected virtual IEnumerator SendLogs (List logs)
406 | {
407 | string crashPath = HOCKEYAPP_CRASHESPATH;
408 | string url = GetBaseURL () + crashPath.Replace ("[APPID]", appID);
409 |
410 | #if (UNITY_ANDROID && !UNITY_EDITOR)
411 | using (var pluginClass = new AndroidJavaClass(JAVA_HOCKEYUNITYPLUGIN_CLASS))
412 | {
413 | var sdkName = pluginClass.CallStatic("getSdkName");
414 | if (sdkName != null) {
415 | url += "?sdk=" + WWW.EscapeURL(sdkName);
416 | }
417 | }
418 | #endif
419 |
420 | foreach (string log in logs) {
421 | WWWForm postForm = CreateForm (log);
422 | string lContent = postForm.headers ["Content-Type"].ToString ();
423 | lContent = lContent.Replace ("\"", "");
424 | Dictionary headers = new Dictionary ();
425 | headers.Add ("Content-Type", lContent);
426 | WWW www = new WWW (url, postForm.data, headers);
427 | yield return www;
428 |
429 | if (String.IsNullOrEmpty (www.error)) {
430 | try {
431 | File.Delete (log);
432 | } catch (Exception e) {
433 | if (Debug.isDebugBuild)
434 | Debug.Log ("Failed to delete exception log: " + e);
435 | }
436 | } else {
437 | if (Debug.isDebugBuild)
438 | Debug.Log ("Crash sending error: " + www.error);
439 | }
440 | }
441 | }
442 |
443 | ///
444 | /// Write a single exception report to disk.
445 | ///
446 | /// A string that contains the reason for the exception.
447 | /// The stacktrace for the exception.
448 | protected virtual void WriteLogToDisk (string logString, string stackTrace)
449 | {
450 | #if (UNITY_ANDROID && !UNITY_EDITOR)
451 | string logSession = DateTime.Now.ToString("yyyy-MM-dd-HH_mm_ss_fff");
452 | string log = logString.Replace("\n", " ");
453 | string[]stacktraceLines = stackTrace.Split('\n');
454 |
455 | log = "\n" + log + "\n";
456 | foreach (string line in stacktraceLines) {
457 | if(line.Length > 0) {
458 | log +=" at " + line + "\n";
459 | }
460 | }
461 |
462 | List logHeaders = GetLogHeaders();
463 | using (StreamWriter file = new StreamWriter(Application.persistentDataPath + LOG_FILE_DIR + "LogFile_" + logSession + ".log", true)) {
464 | foreach (string header in logHeaders) {
465 | file.WriteLine(header);
466 | }
467 | file.WriteLine(log);
468 | }
469 | #endif
470 | }
471 |
472 | ///
473 | /// Get the base url used for custom exception reports.
474 | ///
475 | /// A formatted base url.
476 | protected virtual string GetBaseURL ()
477 | {
478 | string baseURL = "";
479 |
480 | #if (UNITY_ANDROID && !UNITY_EDITOR)
481 |
482 | string urlString = serverURL.Trim();
483 | if(urlString.Length > 0 && urlString != SERVER_URL_PLACEHOLDER) {
484 | baseURL = urlString;
485 |
486 | if(baseURL[baseURL.Length -1].Equals("/") != true) {
487 | baseURL += "/";
488 | }
489 | } else {
490 | baseURL = HOCKEYAPP_BASEURL;
491 | }
492 | #endif
493 |
494 | return baseURL;
495 | }
496 |
497 | ///
498 | /// Checks whether internet is reachable
499 | ///
500 | protected virtual bool IsConnected ()
501 | {
502 | bool connected = false;
503 |
504 | #if (UNITY_ANDROID && !UNITY_EDITOR)
505 |
506 | if (Application.internetReachability == NetworkReachability.ReachableViaLocalAreaNetwork ||
507 | (Application.internetReachability == NetworkReachability.ReachableViaCarrierDataNetwork)) {
508 | connected = true;
509 | }
510 | #endif
511 |
512 | return connected;
513 | }
514 |
515 | ///
516 | /// Handle a single exception. By default the exception and its stacktrace gets written to disk.
517 | ///
518 | /// A string that contains the reason for the exception.
519 | /// The stacktrace for the exception.
520 | protected virtual void HandleException (string logString, string stackTrace)
521 | {
522 |
523 | #if (UNITY_ANDROID && !UNITY_EDITOR)
524 | try
525 | {
526 | WriteLogToDisk(logString, stackTrace);
527 | }
528 | catch (Exception e)
529 | {
530 | AndroidLog(e.ToString());
531 | }
532 | #endif
533 | }
534 |
535 | ///
536 | /// Callback for handling log messages.
537 | ///
538 | /// A string that contains the reason for the exception.
539 | /// The stacktrace for the exception.
540 | /// The type of the log message.
541 | public void OnHandleLogCallback (string logString, string stackTrace, LogType type)
542 | {
543 | #if (UNITY_ANDROID && !UNITY_EDITOR)
544 | if(LogType.Assert == type || LogType.Exception == type || LogType.Error == type) {
545 | HandleException(logString, stackTrace);
546 | }
547 | #endif
548 | }
549 |
550 | ///
551 | /// Callback for handling unresolved exceptions.
552 | ///
553 | public void OnHandleUnresolvedException (object sender, System.UnhandledExceptionEventArgs args)
554 | {
555 | #if (UNITY_ANDROID && !UNITY_EDITOR)
556 | if(args == null || args.ExceptionObject == null) {
557 | return;
558 | }
559 |
560 | if(args.ExceptionObject.GetType() == typeof(System.Exception)) {
561 | System.Exception e = (System.Exception)args.ExceptionObject;
562 | HandleException(e.Source, e.StackTrace);
563 | }
564 | #endif
565 | }
566 |
567 | #region Android Binding Helpers
568 | #if (UNITY_ANDROID && !UNITY_EDITOR)
569 |
570 | private static AndroidJavaObject DictainaryToJavaMap(IDictionary parameters, string javaKeyClass, string javaValueClass)
571 | {
572 | if (parameters == null)
573 | {
574 | return null;
575 | }
576 | var javaMap = new AndroidJavaObject("java.util.HashMap");
577 | var putMethod = AndroidJNIHelper.GetMethodID(javaMap.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
578 | foreach (var kvp in parameters)
579 | {
580 | AndroidJNI.CallObjectMethod(javaMap.GetRawObject(), putMethod, AndroidJNIHelper.CreateJNIArgArray(new object[]
581 | {
582 | new AndroidJavaObject(javaKeyClass, kvp.Key),
583 | new AndroidJavaObject(javaValueClass, kvp.Value)
584 | }));
585 | }
586 | return javaMap;
587 | }
588 |
589 | private static void AndroidLog(string message)
590 | {
591 | var logClass = new AndroidJavaObject("android.util.Log");
592 | logClass.CallStatic("d", "HockeyApp", message);
593 | }
594 |
595 | #endif
596 | #endregion
597 | }
598 |
--------------------------------------------------------------------------------
/ExampleGame/Assets/HockeyAppUnityAndroid/HockeyAppUnity-Scripts/HockeyAppAndroid.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 72daf2375120d4568a9272f38a405ef5
3 | timeCreated: 1501523999
4 | licenseType: Pro
5 | MonoImporter:
6 | serializedVersion: 2
7 | defaultReferences: []
8 | executionOrder: 0
9 | icon: {instanceID: 0}
10 | userData:
11 | assetBundleName:
12 | assetBundleVariant:
13 |
--------------------------------------------------------------------------------
/ExampleGame/Assets/HockeyAppUnityAndroid/HockeySDK-5.2.0.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitstadium/HockeySDK-Unity-Android/eabf07dd7786de4dfb2b9be6b04f75eb6cdb66cc/ExampleGame/Assets/HockeyAppUnityAndroid/HockeySDK-5.2.0.aar
--------------------------------------------------------------------------------
/ExampleGame/Assets/HockeyAppUnityAndroid/README.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitstadium/HockeySDK-Unity-Android/eabf07dd7786de4dfb2b9be6b04f75eb6cdb66cc/ExampleGame/Assets/HockeyAppUnityAndroid/README.pdf
--------------------------------------------------------------------------------
/ExampleGame/Assets/HockeyAppUnityAndroid/exampleunityplugin.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitstadium/HockeySDK-Unity-Android/eabf07dd7786de4dfb2b9be6b04f75eb6cdb66cc/ExampleGame/Assets/HockeyAppUnityAndroid/exampleunityplugin.jar
--------------------------------------------------------------------------------
/ExampleGame/Assets/HockeyAppUnityAndroid/exampleunityplugin.jar.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 7a8f6d75bef6b4fb7977a8e88c3625de
3 | timeCreated: 1433484544
4 | licenseType: Pro
5 | PluginImporter:
6 | serializedVersion: 1
7 | iconMap: {}
8 | executionOrder: {}
9 | isPreloaded: 0
10 | platformData:
11 | Any:
12 | enabled: 1
13 | settings: {}
14 | userData:
15 | assetBundleName:
16 | assetBundleVariant:
17 |
--------------------------------------------------------------------------------
/ExampleGame/Assets/HockeyAppUnityAndroid/hockeysdk-unity-5.2.0.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitstadium/HockeySDK-Unity-Android/eabf07dd7786de4dfb2b9be6b04f75eb6cdb66cc/ExampleGame/Assets/HockeyAppUnityAndroid/hockeysdk-unity-5.2.0.aar
--------------------------------------------------------------------------------
/ExampleGame/Assets/TestScene.unity:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!29 &1
4 | OcclusionCullingSettings:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 2
7 | m_OcclusionBakeSettings:
8 | smallestOccluder: 5
9 | smallestHole: 0.25
10 | backfaceThreshold: 100
11 | m_SceneGUID: 00000000000000000000000000000000
12 | m_OcclusionCullingData: {fileID: 0}
13 | --- !u!104 &2
14 | RenderSettings:
15 | m_ObjectHideFlags: 0
16 | serializedVersion: 8
17 | m_Fog: 0
18 | m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
19 | m_FogMode: 3
20 | m_FogDensity: 0.01
21 | m_LinearFogStart: 0
22 | m_LinearFogEnd: 300
23 | m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
24 | m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
25 | m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
26 | m_AmbientIntensity: 1
27 | m_AmbientMode: 0
28 | m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
29 | m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
30 | m_HaloStrength: 0.5
31 | m_FlareStrength: 1
32 | m_FlareFadeSpeed: 3
33 | m_HaloTexture: {fileID: 0}
34 | m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
35 | m_DefaultReflectionMode: 0
36 | m_DefaultReflectionResolution: 128
37 | m_ReflectionBounces: 1
38 | m_ReflectionIntensity: 1
39 | m_CustomReflection: {fileID: 0}
40 | m_Sun: {fileID: 0}
41 | m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1}
42 | --- !u!157 &4
43 | LightmapSettings:
44 | m_ObjectHideFlags: 0
45 | serializedVersion: 11
46 | m_GIWorkflowMode: 1
47 | m_GISettings:
48 | serializedVersion: 2
49 | m_BounceScale: 1
50 | m_IndirectOutputScale: 1
51 | m_AlbedoBoost: 1
52 | m_TemporalCoherenceThreshold: 1
53 | m_EnvironmentLightingMode: 0
54 | m_EnableBakedLightmaps: 1
55 | m_EnableRealtimeLightmaps: 1
56 | m_LightmapEditorSettings:
57 | serializedVersion: 9
58 | m_Resolution: 2
59 | m_BakeResolution: 40
60 | m_TextureWidth: 1024
61 | m_TextureHeight: 1024
62 | m_AO: 0
63 | m_AOMaxDistance: 1
64 | m_CompAOExponent: 0
65 | m_CompAOExponentDirect: 0
66 | m_Padding: 2
67 | m_LightmapParameters: {fileID: 0}
68 | m_LightmapsBakeMode: 1
69 | m_TextureCompression: 1
70 | m_FinalGather: 0
71 | m_FinalGatherFiltering: 1
72 | m_FinalGatherRayCount: 1024
73 | m_ReflectionCompression: 2
74 | m_MixedBakeMode: 1
75 | m_BakeBackend: 0
76 | m_PVRSampling: 1
77 | m_PVRDirectSampleCount: 32
78 | m_PVRSampleCount: 500
79 | m_PVRBounces: 2
80 | m_PVRFiltering: 0
81 | m_PVRFilteringMode: 1
82 | m_PVRCulling: 1
83 | m_PVRFilteringGaussRadiusDirect: 1
84 | m_PVRFilteringGaussRadiusIndirect: 5
85 | m_PVRFilteringGaussRadiusAO: 2
86 | m_PVRFilteringAtrousColorSigma: 1
87 | m_PVRFilteringAtrousNormalSigma: 1
88 | m_PVRFilteringAtrousPositionSigma: 1
89 | m_LightingDataAsset: {fileID: 0}
90 | m_UseShadowmask: 0
91 | --- !u!196 &5
92 | NavMeshSettings:
93 | serializedVersion: 2
94 | m_ObjectHideFlags: 0
95 | m_BuildSettings:
96 | serializedVersion: 2
97 | agentTypeID: 0
98 | agentRadius: 0.5
99 | agentHeight: 2
100 | agentSlope: 45
101 | agentClimb: 0.4
102 | ledgeDropHeight: 0
103 | maxJumpAcrossDistance: 0
104 | minRegionArea: 2
105 | manualCellSize: 0
106 | cellSize: 0.16666667
107 | manualTileSize: 0
108 | tileSize: 256
109 | accuratePlacement: 0
110 | m_NavMeshData: {fileID: 0}
111 | --- !u!1 &588686177
112 | GameObject:
113 | m_ObjectHideFlags: 0
114 | m_PrefabParentObject: {fileID: 0}
115 | m_PrefabInternal: {fileID: 0}
116 | serializedVersion: 5
117 | m_Component:
118 | - component: {fileID: 588686179}
119 | - component: {fileID: 588686180}
120 | m_Layer: 0
121 | m_Name: HockeyAppUnityAndroid
122 | m_TagString: Untagged
123 | m_Icon: {fileID: 0}
124 | m_NavMeshLayer: 0
125 | m_StaticEditorFlags: 0
126 | m_IsActive: 1
127 | --- !u!4 &588686179
128 | Transform:
129 | m_ObjectHideFlags: 0
130 | m_PrefabParentObject: {fileID: 0}
131 | m_PrefabInternal: {fileID: 0}
132 | m_GameObject: {fileID: 588686177}
133 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
134 | m_LocalPosition: {x: 0, y: 0, z: 0}
135 | m_LocalScale: {x: 1, y: 1, z: 1}
136 | m_Children: []
137 | m_Father: {fileID: 0}
138 | m_RootOrder: 0
139 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
140 | --- !u!114 &588686180
141 | MonoBehaviour:
142 | m_ObjectHideFlags: 0
143 | m_PrefabParentObject: {fileID: 0}
144 | m_PrefabInternal: {fileID: 0}
145 | m_GameObject: {fileID: 588686177}
146 | m_Enabled: 1
147 | m_EditorHideFlags: 0
148 | m_Script: {fileID: 11500000, guid: 72daf2375120d4568a9272f38a405ef5, type: 3}
149 | m_Name:
150 | m_EditorClassIdentifier:
151 | appID: your-hockey-app-id
152 | packageID: your-package-identifier
153 | serverURL: your-custom-server-url
154 | authenticatorType: 0
155 | secret: your-hockey-app-secret
156 | autoUploadCrashes: 0
157 | exceptionLogging: 1
158 | userMetrics: 1
159 | updateAlert: 1
160 | --- !u!1 &1709789755
161 | GameObject:
162 | m_ObjectHideFlags: 0
163 | m_PrefabParentObject: {fileID: 0}
164 | m_PrefabInternal: {fileID: 0}
165 | serializedVersion: 5
166 | m_Component:
167 | - component: {fileID: 1709789760}
168 | - component: {fileID: 1709789759}
169 | - component: {fileID: 1709789758}
170 | - component: {fileID: 1709789757}
171 | - component: {fileID: 1709789756}
172 | - component: {fileID: 1709789761}
173 | m_Layer: 0
174 | m_Name: Camera
175 | m_TagString: Untagged
176 | m_Icon: {fileID: 0}
177 | m_NavMeshLayer: 0
178 | m_StaticEditorFlags: 0
179 | m_IsActive: 1
180 | --- !u!81 &1709789756
181 | AudioListener:
182 | m_ObjectHideFlags: 0
183 | m_PrefabParentObject: {fileID: 0}
184 | m_PrefabInternal: {fileID: 0}
185 | m_GameObject: {fileID: 1709789755}
186 | m_Enabled: 1
187 | --- !u!92 &1709789757
188 | Behaviour:
189 | m_ObjectHideFlags: 0
190 | m_PrefabParentObject: {fileID: 0}
191 | m_PrefabInternal: {fileID: 0}
192 | m_GameObject: {fileID: 1709789755}
193 | m_Enabled: 1
194 | --- !u!124 &1709789758
195 | Behaviour:
196 | m_ObjectHideFlags: 0
197 | m_PrefabParentObject: {fileID: 0}
198 | m_PrefabInternal: {fileID: 0}
199 | m_GameObject: {fileID: 1709789755}
200 | m_Enabled: 1
201 | --- !u!20 &1709789759
202 | Camera:
203 | m_ObjectHideFlags: 0
204 | m_PrefabParentObject: {fileID: 0}
205 | m_PrefabInternal: {fileID: 0}
206 | m_GameObject: {fileID: 1709789755}
207 | m_Enabled: 1
208 | serializedVersion: 2
209 | m_ClearFlags: 2
210 | m_BackGroundColor: {r: 1, g: 1, b: 1, a: 0.019607844}
211 | m_NormalizedViewPortRect:
212 | serializedVersion: 2
213 | x: 0
214 | y: 0
215 | width: 1
216 | height: 1
217 | near clip plane: 0.3
218 | far clip plane: 1000
219 | field of view: 60
220 | orthographic: 0
221 | orthographic size: 5
222 | m_Depth: 0
223 | m_CullingMask:
224 | serializedVersion: 2
225 | m_Bits: 4294967295
226 | m_RenderingPath: -1
227 | m_TargetTexture: {fileID: 0}
228 | m_TargetDisplay: 0
229 | m_TargetEye: 3
230 | m_HDR: 0
231 | m_AllowMSAA: 1
232 | m_ForceIntoRT: 0
233 | m_OcclusionCulling: 1
234 | m_StereoConvergence: 10
235 | m_StereoSeparation: 0.022
236 | m_StereoMirrorMode: 0
237 | --- !u!4 &1709789760
238 | Transform:
239 | m_ObjectHideFlags: 0
240 | m_PrefabParentObject: {fileID: 0}
241 | m_PrefabInternal: {fileID: 0}
242 | m_GameObject: {fileID: 1709789755}
243 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
244 | m_LocalPosition: {x: 0, y: 0, z: 0}
245 | m_LocalScale: {x: 1, y: 1, z: 1}
246 | m_Children: []
247 | m_Father: {fileID: 0}
248 | m_RootOrder: 1
249 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
250 | --- !u!114 &1709789761
251 | MonoBehaviour:
252 | m_ObjectHideFlags: 0
253 | m_PrefabParentObject: {fileID: 0}
254 | m_PrefabInternal: {fileID: 0}
255 | m_GameObject: {fileID: 1709789755}
256 | m_Enabled: 1
257 | m_EditorHideFlags: 0
258 | m_Script: {fileID: 11500000, guid: 7453863bc32a44d8d875d5f68721c3f6, type: 3}
259 | m_Name:
260 | m_EditorClassIdentifier:
261 | customUISkin: {fileID: 11400000, guid: d7fb91a8c54f149948c667b9f0e70c96, type: 2}
262 |
--------------------------------------------------------------------------------
/ExampleGame/Assets/TestScene.unity.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 87fb373f238fc487eb954ac23c3978c6
3 | DefaultImporter:
4 | userData:
5 | assetBundleName:
6 | assetBundleVariant:
7 |
--------------------------------------------------------------------------------
/ExampleGame/Assets/TestUI.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: f1679da049b70478e9f70f08eb55b2a4
3 | folderAsset: yes
4 | DefaultImporter:
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/ExampleGame/Assets/TestUI/Ressources.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 033d017c1f17d40cab9c64ee75c082f4
3 | folderAsset: yes
4 | DefaultImporter:
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/ExampleGame/Assets/TestUI/Ressources/btn_active.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitstadium/HockeySDK-Unity-Android/eabf07dd7786de4dfb2b9be6b04f75eb6cdb66cc/ExampleGame/Assets/TestUI/Ressources/btn_active.png
--------------------------------------------------------------------------------
/ExampleGame/Assets/TestUI/Ressources/btn_active.png.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: aa363a8f65df74a90b43e6a9ded9d668
3 | TextureImporter:
4 | fileIDToRecycleName: {}
5 | serializedVersion: 2
6 | mipmaps:
7 | mipMapMode: 0
8 | enableMipMap: 0
9 | linearTexture: 0
10 | correctGamma: 0
11 | fadeOut: 0
12 | borderMipMap: 0
13 | mipMapFadeDistanceStart: 1
14 | mipMapFadeDistanceEnd: 3
15 | bumpmap:
16 | convertToNormalMap: 0
17 | externalNormalMap: 0
18 | heightScale: .25
19 | normalMapFilter: 0
20 | isReadable: 0
21 | grayScaleToAlpha: 0
22 | generateCubemap: 0
23 | cubemapConvolution: 0
24 | cubemapConvolutionSteps: 8
25 | cubemapConvolutionExponent: 1.5
26 | seamlessCubemap: 0
27 | textureFormat: -1
28 | maxTextureSize: 64
29 | textureSettings:
30 | filterMode: -1
31 | aniso: 1
32 | mipBias: -1
33 | wrapMode: 1
34 | nPOTScale: 0
35 | lightmap: 0
36 | rGBM: 0
37 | compressionQuality: 50
38 | spriteMode: 1
39 | spriteExtrude: 1
40 | spriteMeshType: 1
41 | alignment: 0
42 | spritePivot: {x: .5, y: .5}
43 | spriteBorder: {x: 0, y: 0, z: 0, w: 0}
44 | spritePixelsToUnits: 64
45 | alphaIsTransparency: 1
46 | textureType: 8
47 | buildTargetSettings: []
48 | spriteSheet:
49 | sprites: []
50 | spritePackingTag:
51 | userData:
52 | assetBundleName:
53 | assetBundleVariant:
54 |
--------------------------------------------------------------------------------
/ExampleGame/Assets/TestUI/Ressources/btn_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitstadium/HockeySDK-Unity-Android/eabf07dd7786de4dfb2b9be6b04f75eb6cdb66cc/ExampleGame/Assets/TestUI/Ressources/btn_normal.png
--------------------------------------------------------------------------------
/ExampleGame/Assets/TestUI/Ressources/btn_normal.png.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 33cfd0245ea97475f9cdfff3a86ddfce
3 | TextureImporter:
4 | fileIDToRecycleName: {}
5 | serializedVersion: 2
6 | mipmaps:
7 | mipMapMode: 0
8 | enableMipMap: 0
9 | linearTexture: 0
10 | correctGamma: 0
11 | fadeOut: 0
12 | borderMipMap: 0
13 | mipMapFadeDistanceStart: 1
14 | mipMapFadeDistanceEnd: 3
15 | bumpmap:
16 | convertToNormalMap: 0
17 | externalNormalMap: 0
18 | heightScale: .25
19 | normalMapFilter: 0
20 | isReadable: 0
21 | grayScaleToAlpha: 0
22 | generateCubemap: 0
23 | cubemapConvolution: 0
24 | cubemapConvolutionSteps: 8
25 | cubemapConvolutionExponent: 1.5
26 | seamlessCubemap: 0
27 | textureFormat: -1
28 | maxTextureSize: 64
29 | textureSettings:
30 | filterMode: -1
31 | aniso: 1
32 | mipBias: -1
33 | wrapMode: 1
34 | nPOTScale: 0
35 | lightmap: 0
36 | rGBM: 0
37 | compressionQuality: 50
38 | spriteMode: 1
39 | spriteExtrude: 1
40 | spriteMeshType: 1
41 | alignment: 0
42 | spritePivot: {x: .5, y: .5}
43 | spriteBorder: {x: 0, y: 0, z: 0, w: 0}
44 | spritePixelsToUnits: 64
45 | alphaIsTransparency: 1
46 | textureType: 8
47 | buildTargetSettings: []
48 | spriteSheet:
49 | sprites: []
50 | spritePackingTag:
51 | userData:
52 | assetBundleName:
53 | assetBundleVariant:
54 |
--------------------------------------------------------------------------------
/ExampleGame/Assets/TestUI/TestUI.cs:
--------------------------------------------------------------------------------
1 | using UnityEngine;
2 | using System;
3 | using System.Collections;
4 | using System.Collections.Generic;
5 | using System.Runtime.InteropServices;
6 |
7 | public class TestUI : MonoBehaviour{
8 |
9 | public GUISkin customUISkin;
10 | private int controlHeight = 60;
11 | private int horizontalMargin = 16;
12 | private int space = 16;
13 |
14 | void OnGUI(){
15 |
16 | AutoResize (640, 1136);
17 | GUI.skin = customUISkin;
18 |
19 | GUI.Label(GetControlRect(1), "Choose an exception type");
20 |
21 | if(GUI.Button(GetControlRect(2), "Divide By Zero"))
22 | {
23 |
24 | int i = 0;
25 | i = 5 / i;
26 | }
27 |
28 | if(GUI.Button(GetControlRect(3), "Native Code Crash"))
29 | {
30 | ForceAppCrash();
31 | }
32 |
33 | if(GUI.Button(GetControlRect(4), "Index Out Of Range"))
34 | {
35 | string[] arr = new string[3];
36 | arr[4] = "Out of Range";
37 | }
38 |
39 | if(GUI.Button(GetControlRect(5), "Custom Exception"))
40 | {
41 | throw new System.Exception("My Custom Exception");
42 | }
43 |
44 | if(GUI.Button(GetControlRect(6), "Custom Coroutine Exception"))
45 | {
46 | StartCoroutine(CorutineCrash());
47 | }
48 |
49 | if(GUI.Button(GetControlRect(7), "Handled Null Pointer Exception"))
50 | {
51 | try {
52 | NullReferenceException();
53 | } catch (Exception e) {
54 | throw new Exception("Null Pointer Exception");
55 | }
56 | }
57 |
58 | if(GUI.Button(GetControlRect(8), "Null Pointer Exception"))
59 | {
60 | NullReferenceException();
61 | }
62 |
63 | if(GUI.Button(GetControlRect(9), "Coroutine Null Exception"))
64 | {
65 | StartCoroutine(CorutineNullCrash());
66 | }
67 |
68 | GUI.Label(GetControlRect(10), "Features");
69 |
70 | if(GUI.Button(GetControlRect(11), "Show Feedback Form"))
71 | {
72 | ShowFeedbackForm();
73 | }
74 |
75 | if(GUI.Button(GetControlRect(12), "Check For Update"))
76 | {
77 | CheckForUpdate();
78 | }
79 |
80 | if (GUI.Button(GetControlRect(13), "Track Event"))
81 | {
82 | TrackEvent();
83 | }
84 | }
85 |
86 | private Rect GetControlRect(int controlIndex){
87 |
88 | return new Rect (horizontalMargin,
89 | controlIndex * (controlHeight + space),
90 | 640 - (2 * horizontalMargin),
91 | controlHeight);
92 | }
93 |
94 | public void AutoResize(int screenWidth, int screenHeight){
95 |
96 | Vector2 resizeRatio = new Vector2((float)Screen.width / screenWidth, (float)Screen.height / screenHeight);
97 | GUI.matrix = Matrix4x4.TRS(Vector3.zero, Quaternion.identity, new Vector3(resizeRatio.x, resizeRatio.y, 1.0f));
98 | }
99 |
100 | System.Collections.IEnumerator CorutineNullCrash(){
101 |
102 | string crash = null;
103 | crash = crash.ToLower();
104 | yield break;
105 | }
106 |
107 | System.Collections.IEnumerator CorutineCrash(){
108 |
109 | throw new System.Exception("Custom Coroutine Exception");
110 | }
111 |
112 | public void NullReferenceException(){
113 | object testObject = null;
114 | testObject.GetHashCode();
115 | }
116 |
117 | public void ForceAppCrash(){
118 |
119 | #if (UNITY_ANDROID && !UNITY_EDITOR)
120 | AndroidJavaClass player = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
121 | AndroidJavaObject activity = player.GetStatic("currentActivity");
122 | AndroidJavaObject exampleClass = new AndroidJavaObject("net.hockeyapp.exampleunityplugin.ExampleClass");
123 | exampleClass.Call("forceAppCrash", activity);
124 | #endif
125 | }
126 |
127 | public void ShowFeedbackForm(){
128 |
129 | #if (UNITY_ANDROID && !UNITY_EDITOR)
130 | HockeyAppAndroid.ShowFeedbackForm();
131 | #endif
132 | }
133 |
134 | public void CheckForUpdate(){
135 |
136 | #if (UNITY_ANDROID && !UNITY_EDITOR)
137 | HockeyAppAndroid.CheckForUpdate();
138 | #endif
139 | }
140 |
141 | public void TrackEvent(){
142 |
143 | #if (UNITY_ANDROID && !UNITY_EDITOR)
144 | HockeyAppAndroid.TrackEvent("Test Unity");
145 | HockeyAppAndroid.TrackEvent("Test Unity with properties",
146 | new Dictionary { { "Prop1", "Val1" }, { "Prop2", "Val2" } });
147 | HockeyAppAndroid.TrackEvent("Test Unity with properties and measurements",
148 | new Dictionary { { "Prop1", "Val1" }, { "Prop2", "Val2" } },
149 | new Dictionary { { "M1", 1.0 }, { "M2", 2.0 } });
150 | #endif
151 | }
152 | }
--------------------------------------------------------------------------------
/ExampleGame/Assets/TestUI/TestUI.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 7453863bc32a44d8d875d5f68721c3f6
3 | MonoImporter:
4 | serializedVersion: 2
5 | defaultReferences:
6 | - customUISkin: {fileID: 11400000, guid: d7fb91a8c54f149948c667b9f0e70c96, type: 2}
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/ExampleGame/Assets/TestUI/TestUISkin.guiskin:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!114 &11400000
4 | MonoBehaviour:
5 | m_ObjectHideFlags: 0
6 | m_PrefabParentObject: {fileID: 0}
7 | m_PrefabInternal: {fileID: 0}
8 | m_GameObject: {fileID: 0}
9 | m_Enabled: 1
10 | m_EditorHideFlags: 1
11 | m_Script: {fileID: 12001, guid: 0000000000000000e000000000000000, type: 0}
12 | m_Name: TestUISkin
13 | m_EditorClassIdentifier:
14 | m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
15 | m_box:
16 | m_Name: box
17 | m_Normal:
18 | m_Background: {fileID: 11001, guid: 0000000000000000e000000000000000, type: 0}
19 | m_TextColor: {r: .799999952, g: .799999952, b: .799999952, a: 1}
20 | m_Hover:
21 | m_Background: {fileID: 0}
22 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
23 | m_Active:
24 | m_Background: {fileID: 0}
25 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
26 | m_Focused:
27 | m_Background: {fileID: 0}
28 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
29 | m_OnNormal:
30 | m_Background: {fileID: 0}
31 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
32 | m_OnHover:
33 | m_Background: {fileID: 0}
34 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
35 | m_OnActive:
36 | m_Background: {fileID: 0}
37 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
38 | m_OnFocused:
39 | m_Background: {fileID: 0}
40 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
41 | m_Border:
42 | m_Left: 6
43 | m_Right: 6
44 | m_Top: 6
45 | m_Bottom: 6
46 | m_Margin:
47 | m_Left: 4
48 | m_Right: 4
49 | m_Top: 4
50 | m_Bottom: 4
51 | m_Padding:
52 | m_Left: 4
53 | m_Right: 4
54 | m_Top: 4
55 | m_Bottom: 4
56 | m_Overflow:
57 | m_Left: 0
58 | m_Right: 0
59 | m_Top: 0
60 | m_Bottom: 0
61 | m_Font: {fileID: 0}
62 | m_FontSize: 0
63 | m_FontStyle: 0
64 | m_Alignment: 1
65 | m_WordWrap: 0
66 | m_RichText: 1
67 | m_TextClipping: 1
68 | m_ImagePosition: 0
69 | m_ContentOffset: {x: 0, y: 0}
70 | m_FixedWidth: 0
71 | m_FixedHeight: 0
72 | m_StretchWidth: 1
73 | m_StretchHeight: 0
74 | m_button:
75 | m_Name: button
76 | m_Normal:
77 | m_Background: {fileID: 2800000, guid: 33cfd0245ea97475f9cdfff3a86ddfce, type: 3}
78 | m_TextColor: {r: 0, g: .450980395, b: .65882355, a: 1}
79 | m_Hover:
80 | m_Background: {fileID: 2800000, guid: aa363a8f65df74a90b43e6a9ded9d668, type: 3}
81 | m_TextColor: {r: 1, g: 1, b: 1, a: 1}
82 | m_Active:
83 | m_Background: {fileID: 2800000, guid: aa363a8f65df74a90b43e6a9ded9d668, type: 3}
84 | m_TextColor: {r: 1, g: 1, b: 1, a: 1}
85 | m_Focused:
86 | m_Background: {fileID: 2800000, guid: aa363a8f65df74a90b43e6a9ded9d668, type: 3}
87 | m_TextColor: {r: 1, g: 1, b: 1, a: 1}
88 | m_OnNormal:
89 | m_Background: {fileID: 2800000, guid: 33cfd0245ea97475f9cdfff3a86ddfce, type: 3}
90 | m_TextColor: {r: 0, g: .450980395, b: .65882355, a: 1}
91 | m_OnHover:
92 | m_Background: {fileID: 2800000, guid: aa363a8f65df74a90b43e6a9ded9d668, type: 3}
93 | m_TextColor: {r: 1, g: 1, b: 1, a: 1}
94 | m_OnActive:
95 | m_Background: {fileID: 2800000, guid: aa363a8f65df74a90b43e6a9ded9d668, type: 3}
96 | m_TextColor: {r: 1, g: 1, b: 1, a: 1}
97 | m_OnFocused:
98 | m_Background: {fileID: 2800000, guid: aa363a8f65df74a90b43e6a9ded9d668, type: 3}
99 | m_TextColor: {r: 1, g: 1, b: 1, a: 1}
100 | m_Border:
101 | m_Left: 32
102 | m_Right: 32
103 | m_Top: 32
104 | m_Bottom: 32
105 | m_Margin:
106 | m_Left: 0
107 | m_Right: 0
108 | m_Top: 0
109 | m_Bottom: 0
110 | m_Padding:
111 | m_Left: 0
112 | m_Right: 0
113 | m_Top: 0
114 | m_Bottom: 0
115 | m_Overflow:
116 | m_Left: 0
117 | m_Right: 0
118 | m_Top: 0
119 | m_Bottom: 0
120 | m_Font: {fileID: 0}
121 | m_FontSize: 30
122 | m_FontStyle: 0
123 | m_Alignment: 4
124 | m_WordWrap: 1
125 | m_RichText: 0
126 | m_TextClipping: 1
127 | m_ImagePosition: 0
128 | m_ContentOffset: {x: 0, y: 0}
129 | m_FixedWidth: 0
130 | m_FixedHeight: 0
131 | m_StretchWidth: 0
132 | m_StretchHeight: 0
133 | m_toggle:
134 | m_Name: toggle
135 | m_Normal:
136 | m_Background: {fileID: 11018, guid: 0000000000000000e000000000000000, type: 0}
137 | m_TextColor: {r: .891128957, g: .891128957, b: .891128957, a: 1}
138 | m_Hover:
139 | m_Background: {fileID: 11014, guid: 0000000000000000e000000000000000, type: 0}
140 | m_TextColor: {r: 1, g: 1, b: 1, a: 1}
141 | m_Active:
142 | m_Background: {fileID: 11013, guid: 0000000000000000e000000000000000, type: 0}
143 | m_TextColor: {r: 1, g: 1, b: 1, a: 1}
144 | m_Focused:
145 | m_Background: {fileID: 0}
146 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
147 | m_OnNormal:
148 | m_Background: {fileID: 11016, guid: 0000000000000000e000000000000000, type: 0}
149 | m_TextColor: {r: .890196085, g: .890196085, b: .890196085, a: 1}
150 | m_OnHover:
151 | m_Background: {fileID: 11015, guid: 0000000000000000e000000000000000, type: 0}
152 | m_TextColor: {r: 1, g: 1, b: 1, a: 1}
153 | m_OnActive:
154 | m_Background: {fileID: 11017, guid: 0000000000000000e000000000000000, type: 0}
155 | m_TextColor: {r: 1, g: 1, b: 1, a: 1}
156 | m_OnFocused:
157 | m_Background: {fileID: 0}
158 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
159 | m_Border:
160 | m_Left: 14
161 | m_Right: 0
162 | m_Top: 14
163 | m_Bottom: 0
164 | m_Margin:
165 | m_Left: 4
166 | m_Right: 4
167 | m_Top: 4
168 | m_Bottom: 4
169 | m_Padding:
170 | m_Left: 15
171 | m_Right: 0
172 | m_Top: 3
173 | m_Bottom: 0
174 | m_Overflow:
175 | m_Left: -1
176 | m_Right: 0
177 | m_Top: -4
178 | m_Bottom: 0
179 | m_Font: {fileID: 0}
180 | m_FontSize: 0
181 | m_FontStyle: 0
182 | m_Alignment: 0
183 | m_WordWrap: 0
184 | m_RichText: 1
185 | m_TextClipping: 1
186 | m_ImagePosition: 0
187 | m_ContentOffset: {x: 0, y: 0}
188 | m_FixedWidth: 0
189 | m_FixedHeight: 0
190 | m_StretchWidth: 1
191 | m_StretchHeight: 0
192 | m_label:
193 | m_Name: label
194 | m_Normal:
195 | m_Background: {fileID: 0}
196 | m_TextColor: {r: 0, g: .568627477, b: .811764717, a: 1}
197 | m_Hover:
198 | m_Background: {fileID: 0}
199 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
200 | m_Active:
201 | m_Background: {fileID: 0}
202 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
203 | m_Focused:
204 | m_Background: {fileID: 0}
205 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
206 | m_OnNormal:
207 | m_Background: {fileID: 0}
208 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
209 | m_OnHover:
210 | m_Background: {fileID: 0}
211 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
212 | m_OnActive:
213 | m_Background: {fileID: 0}
214 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
215 | m_OnFocused:
216 | m_Background: {fileID: 0}
217 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
218 | m_Border:
219 | m_Left: 0
220 | m_Right: 0
221 | m_Top: 0
222 | m_Bottom: 0
223 | m_Margin:
224 | m_Left: 4
225 | m_Right: 4
226 | m_Top: 4
227 | m_Bottom: 4
228 | m_Padding:
229 | m_Left: 0
230 | m_Right: 0
231 | m_Top: 10
232 | m_Bottom: 3
233 | m_Overflow:
234 | m_Left: 0
235 | m_Right: 0
236 | m_Top: 0
237 | m_Bottom: 0
238 | m_Font: {fileID: 0}
239 | m_FontSize: 40
240 | m_FontStyle: 1
241 | m_Alignment: 7
242 | m_WordWrap: 1
243 | m_RichText: 1
244 | m_TextClipping: 1
245 | m_ImagePosition: 0
246 | m_ContentOffset: {x: 0, y: 0}
247 | m_FixedWidth: 0
248 | m_FixedHeight: 0
249 | m_StretchWidth: 1
250 | m_StretchHeight: 0
251 | m_textField:
252 | m_Name: textfield
253 | m_Normal:
254 | m_Background: {fileID: 11024, guid: 0000000000000000e000000000000000, type: 0}
255 | m_TextColor: {r: .799999952, g: .799999952, b: .799999952, a: 1}
256 | m_Hover:
257 | m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0}
258 | m_TextColor: {r: .899999976, g: .899999976, b: .899999976, a: 1}
259 | m_Active:
260 | m_Background: {fileID: 0}
261 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
262 | m_Focused:
263 | m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0}
264 | m_TextColor: {r: 1, g: 1, b: 1, a: 1}
265 | m_OnNormal:
266 | m_Background: {fileID: 11025, guid: 0000000000000000e000000000000000, type: 0}
267 | m_TextColor: {r: 1, g: 1, b: 1, a: 1}
268 | m_OnHover:
269 | m_Background: {fileID: 0}
270 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
271 | m_OnActive:
272 | m_Background: {fileID: 0}
273 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
274 | m_OnFocused:
275 | m_Background: {fileID: 0}
276 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
277 | m_Border:
278 | m_Left: 4
279 | m_Right: 4
280 | m_Top: 4
281 | m_Bottom: 4
282 | m_Margin:
283 | m_Left: 4
284 | m_Right: 4
285 | m_Top: 4
286 | m_Bottom: 4
287 | m_Padding:
288 | m_Left: 3
289 | m_Right: 3
290 | m_Top: 3
291 | m_Bottom: 3
292 | m_Overflow:
293 | m_Left: 0
294 | m_Right: 0
295 | m_Top: 0
296 | m_Bottom: 0
297 | m_Font: {fileID: 0}
298 | m_FontSize: 0
299 | m_FontStyle: 0
300 | m_Alignment: 0
301 | m_WordWrap: 0
302 | m_RichText: 0
303 | m_TextClipping: 1
304 | m_ImagePosition: 3
305 | m_ContentOffset: {x: 0, y: 0}
306 | m_FixedWidth: 0
307 | m_FixedHeight: 0
308 | m_StretchWidth: 1
309 | m_StretchHeight: 0
310 | m_textArea:
311 | m_Name: textarea
312 | m_Normal:
313 | m_Background: {fileID: 11024, guid: 0000000000000000e000000000000000, type: 0}
314 | m_TextColor: {r: .90196079, g: .90196079, b: .90196079, a: 1}
315 | m_Hover:
316 | m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0}
317 | m_TextColor: {r: .799999952, g: .799999952, b: .799999952, a: 1}
318 | m_Active:
319 | m_Background: {fileID: 0}
320 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
321 | m_Focused:
322 | m_Background: {fileID: 0}
323 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
324 | m_OnNormal:
325 | m_Background: {fileID: 11025, guid: 0000000000000000e000000000000000, type: 0}
326 | m_TextColor: {r: 1, g: 1, b: 1, a: 1}
327 | m_OnHover:
328 | m_Background: {fileID: 0}
329 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
330 | m_OnActive:
331 | m_Background: {fileID: 0}
332 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
333 | m_OnFocused:
334 | m_Background: {fileID: 0}
335 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
336 | m_Border:
337 | m_Left: 4
338 | m_Right: 4
339 | m_Top: 4
340 | m_Bottom: 4
341 | m_Margin:
342 | m_Left: 4
343 | m_Right: 4
344 | m_Top: 4
345 | m_Bottom: 4
346 | m_Padding:
347 | m_Left: 3
348 | m_Right: 3
349 | m_Top: 3
350 | m_Bottom: 3
351 | m_Overflow:
352 | m_Left: 0
353 | m_Right: 0
354 | m_Top: 0
355 | m_Bottom: 0
356 | m_Font: {fileID: 0}
357 | m_FontSize: 0
358 | m_FontStyle: 0
359 | m_Alignment: 0
360 | m_WordWrap: 1
361 | m_RichText: 0
362 | m_TextClipping: 1
363 | m_ImagePosition: 0
364 | m_ContentOffset: {x: 0, y: 0}
365 | m_FixedWidth: 0
366 | m_FixedHeight: 0
367 | m_StretchWidth: 1
368 | m_StretchHeight: 0
369 | m_window:
370 | m_Name: window
371 | m_Normal:
372 | m_Background: {fileID: 2800000, guid: 7e92b874cc525437c808e83fb3e31a4b, type: 3}
373 | m_TextColor: {r: 1, g: 1, b: 1, a: 1}
374 | m_Hover:
375 | m_Background: {fileID: 0}
376 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
377 | m_Active:
378 | m_Background: {fileID: 0}
379 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
380 | m_Focused:
381 | m_Background: {fileID: 0}
382 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
383 | m_OnNormal:
384 | m_Background: {fileID: 11022, guid: 0000000000000000e000000000000000, type: 0}
385 | m_TextColor: {r: 1, g: 1, b: 1, a: 1}
386 | m_OnHover:
387 | m_Background: {fileID: 0}
388 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
389 | m_OnActive:
390 | m_Background: {fileID: 0}
391 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
392 | m_OnFocused:
393 | m_Background: {fileID: 0}
394 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
395 | m_Border:
396 | m_Left: 8
397 | m_Right: 8
398 | m_Top: 18
399 | m_Bottom: 8
400 | m_Margin:
401 | m_Left: 0
402 | m_Right: 0
403 | m_Top: 0
404 | m_Bottom: 0
405 | m_Padding:
406 | m_Left: 10
407 | m_Right: 10
408 | m_Top: 20
409 | m_Bottom: 10
410 | m_Overflow:
411 | m_Left: 0
412 | m_Right: 0
413 | m_Top: 0
414 | m_Bottom: 0
415 | m_Font: {fileID: 0}
416 | m_FontSize: 0
417 | m_FontStyle: 0
418 | m_Alignment: 1
419 | m_WordWrap: 0
420 | m_RichText: 1
421 | m_TextClipping: 1
422 | m_ImagePosition: 0
423 | m_ContentOffset: {x: 0, y: -18}
424 | m_FixedWidth: 0
425 | m_FixedHeight: 0
426 | m_StretchWidth: 1
427 | m_StretchHeight: 0
428 | m_horizontalSlider:
429 | m_Name: horizontalslider
430 | m_Normal:
431 | m_Background: {fileID: 11009, guid: 0000000000000000e000000000000000, type: 0}
432 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
433 | m_Hover:
434 | m_Background: {fileID: 0}
435 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
436 | m_Active:
437 | m_Background: {fileID: 0}
438 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
439 | m_Focused:
440 | m_Background: {fileID: 0}
441 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
442 | m_OnNormal:
443 | m_Background: {fileID: 0}
444 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
445 | m_OnHover:
446 | m_Background: {fileID: 0}
447 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
448 | m_OnActive:
449 | m_Background: {fileID: 0}
450 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
451 | m_OnFocused:
452 | m_Background: {fileID: 0}
453 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
454 | m_Border:
455 | m_Left: 3
456 | m_Right: 3
457 | m_Top: 0
458 | m_Bottom: 0
459 | m_Margin:
460 | m_Left: 4
461 | m_Right: 4
462 | m_Top: 4
463 | m_Bottom: 4
464 | m_Padding:
465 | m_Left: -1
466 | m_Right: -1
467 | m_Top: 0
468 | m_Bottom: 0
469 | m_Overflow:
470 | m_Left: 0
471 | m_Right: 0
472 | m_Top: -2
473 | m_Bottom: -3
474 | m_Font: {fileID: 0}
475 | m_FontSize: 0
476 | m_FontStyle: 0
477 | m_Alignment: 0
478 | m_WordWrap: 0
479 | m_RichText: 1
480 | m_TextClipping: 1
481 | m_ImagePosition: 2
482 | m_ContentOffset: {x: 0, y: 0}
483 | m_FixedWidth: 0
484 | m_FixedHeight: 12
485 | m_StretchWidth: 1
486 | m_StretchHeight: 0
487 | m_horizontalSliderThumb:
488 | m_Name: horizontalsliderthumb
489 | m_Normal:
490 | m_Background: {fileID: 11011, guid: 0000000000000000e000000000000000, type: 0}
491 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
492 | m_Hover:
493 | m_Background: {fileID: 11012, guid: 0000000000000000e000000000000000, type: 0}
494 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
495 | m_Active:
496 | m_Background: {fileID: 11010, guid: 0000000000000000e000000000000000, type: 0}
497 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
498 | m_Focused:
499 | m_Background: {fileID: 0}
500 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
501 | m_OnNormal:
502 | m_Background: {fileID: 0}
503 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
504 | m_OnHover:
505 | m_Background: {fileID: 0}
506 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
507 | m_OnActive:
508 | m_Background: {fileID: 0}
509 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
510 | m_OnFocused:
511 | m_Background: {fileID: 0}
512 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
513 | m_Border:
514 | m_Left: 4
515 | m_Right: 4
516 | m_Top: 0
517 | m_Bottom: 0
518 | m_Margin:
519 | m_Left: 0
520 | m_Right: 0
521 | m_Top: 0
522 | m_Bottom: 0
523 | m_Padding:
524 | m_Left: 7
525 | m_Right: 7
526 | m_Top: 0
527 | m_Bottom: 0
528 | m_Overflow:
529 | m_Left: -1
530 | m_Right: -1
531 | m_Top: 0
532 | m_Bottom: 0
533 | m_Font: {fileID: 0}
534 | m_FontSize: 0
535 | m_FontStyle: 0
536 | m_Alignment: 0
537 | m_WordWrap: 0
538 | m_RichText: 1
539 | m_TextClipping: 1
540 | m_ImagePosition: 2
541 | m_ContentOffset: {x: 0, y: 0}
542 | m_FixedWidth: 0
543 | m_FixedHeight: 12
544 | m_StretchWidth: 1
545 | m_StretchHeight: 0
546 | m_verticalSlider:
547 | m_Name: verticalslider
548 | m_Normal:
549 | m_Background: {fileID: 11021, guid: 0000000000000000e000000000000000, type: 0}
550 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
551 | m_Hover:
552 | m_Background: {fileID: 0}
553 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
554 | m_Active:
555 | m_Background: {fileID: 0}
556 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
557 | m_Focused:
558 | m_Background: {fileID: 0}
559 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
560 | m_OnNormal:
561 | m_Background: {fileID: 0}
562 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
563 | m_OnHover:
564 | m_Background: {fileID: 0}
565 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
566 | m_OnActive:
567 | m_Background: {fileID: 0}
568 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
569 | m_OnFocused:
570 | m_Background: {fileID: 0}
571 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
572 | m_Border:
573 | m_Left: 0
574 | m_Right: 0
575 | m_Top: 3
576 | m_Bottom: 3
577 | m_Margin:
578 | m_Left: 4
579 | m_Right: 4
580 | m_Top: 4
581 | m_Bottom: 4
582 | m_Padding:
583 | m_Left: 0
584 | m_Right: 0
585 | m_Top: -1
586 | m_Bottom: -1
587 | m_Overflow:
588 | m_Left: -2
589 | m_Right: -3
590 | m_Top: 0
591 | m_Bottom: 0
592 | m_Font: {fileID: 0}
593 | m_FontSize: 0
594 | m_FontStyle: 0
595 | m_Alignment: 0
596 | m_WordWrap: 0
597 | m_RichText: 1
598 | m_TextClipping: 0
599 | m_ImagePosition: 0
600 | m_ContentOffset: {x: 0, y: 0}
601 | m_FixedWidth: 12
602 | m_FixedHeight: 0
603 | m_StretchWidth: 0
604 | m_StretchHeight: 1
605 | m_verticalSliderThumb:
606 | m_Name: verticalsliderthumb
607 | m_Normal:
608 | m_Background: {fileID: 11011, guid: 0000000000000000e000000000000000, type: 0}
609 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
610 | m_Hover:
611 | m_Background: {fileID: 11012, guid: 0000000000000000e000000000000000, type: 0}
612 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
613 | m_Active:
614 | m_Background: {fileID: 11010, guid: 0000000000000000e000000000000000, type: 0}
615 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
616 | m_Focused:
617 | m_Background: {fileID: 0}
618 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
619 | m_OnNormal:
620 | m_Background: {fileID: 0}
621 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
622 | m_OnHover:
623 | m_Background: {fileID: 0}
624 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
625 | m_OnActive:
626 | m_Background: {fileID: 0}
627 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
628 | m_OnFocused:
629 | m_Background: {fileID: 0}
630 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
631 | m_Border:
632 | m_Left: 0
633 | m_Right: 0
634 | m_Top: 0
635 | m_Bottom: 0
636 | m_Margin:
637 | m_Left: 0
638 | m_Right: 0
639 | m_Top: 0
640 | m_Bottom: 0
641 | m_Padding:
642 | m_Left: 0
643 | m_Right: 0
644 | m_Top: 7
645 | m_Bottom: 7
646 | m_Overflow:
647 | m_Left: 0
648 | m_Right: 0
649 | m_Top: -1
650 | m_Bottom: -1
651 | m_Font: {fileID: 0}
652 | m_FontSize: 0
653 | m_FontStyle: 0
654 | m_Alignment: 0
655 | m_WordWrap: 0
656 | m_RichText: 1
657 | m_TextClipping: 1
658 | m_ImagePosition: 0
659 | m_ContentOffset: {x: 0, y: 0}
660 | m_FixedWidth: 12
661 | m_FixedHeight: 0
662 | m_StretchWidth: 0
663 | m_StretchHeight: 1
664 | m_horizontalScrollbar:
665 | m_Name: horizontalscrollbar
666 | m_Normal:
667 | m_Background: {fileID: 11008, guid: 0000000000000000e000000000000000, type: 0}
668 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
669 | m_Hover:
670 | m_Background: {fileID: 0}
671 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
672 | m_Active:
673 | m_Background: {fileID: 0}
674 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
675 | m_Focused:
676 | m_Background: {fileID: 0}
677 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
678 | m_OnNormal:
679 | m_Background: {fileID: 0}
680 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
681 | m_OnHover:
682 | m_Background: {fileID: 0}
683 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
684 | m_OnActive:
685 | m_Background: {fileID: 0}
686 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
687 | m_OnFocused:
688 | m_Background: {fileID: 0}
689 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
690 | m_Border:
691 | m_Left: 9
692 | m_Right: 9
693 | m_Top: 0
694 | m_Bottom: 0
695 | m_Margin:
696 | m_Left: 4
697 | m_Right: 4
698 | m_Top: 1
699 | m_Bottom: 4
700 | m_Padding:
701 | m_Left: 0
702 | m_Right: 0
703 | m_Top: 0
704 | m_Bottom: 0
705 | m_Overflow:
706 | m_Left: 0
707 | m_Right: 0
708 | m_Top: 0
709 | m_Bottom: 0
710 | m_Font: {fileID: 0}
711 | m_FontSize: 0
712 | m_FontStyle: 0
713 | m_Alignment: 0
714 | m_WordWrap: 0
715 | m_RichText: 1
716 | m_TextClipping: 1
717 | m_ImagePosition: 2
718 | m_ContentOffset: {x: 0, y: 0}
719 | m_FixedWidth: 0
720 | m_FixedHeight: 15
721 | m_StretchWidth: 1
722 | m_StretchHeight: 0
723 | m_horizontalScrollbarThumb:
724 | m_Name: horizontalscrollbarthumb
725 | m_Normal:
726 | m_Background: {fileID: 11007, guid: 0000000000000000e000000000000000, type: 0}
727 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
728 | m_Hover:
729 | m_Background: {fileID: 0}
730 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
731 | m_Active:
732 | m_Background: {fileID: 0}
733 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
734 | m_Focused:
735 | m_Background: {fileID: 0}
736 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
737 | m_OnNormal:
738 | m_Background: {fileID: 0}
739 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
740 | m_OnHover:
741 | m_Background: {fileID: 0}
742 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
743 | m_OnActive:
744 | m_Background: {fileID: 0}
745 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
746 | m_OnFocused:
747 | m_Background: {fileID: 0}
748 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
749 | m_Border:
750 | m_Left: 6
751 | m_Right: 6
752 | m_Top: 6
753 | m_Bottom: 6
754 | m_Margin:
755 | m_Left: 0
756 | m_Right: 0
757 | m_Top: 0
758 | m_Bottom: 0
759 | m_Padding:
760 | m_Left: 6
761 | m_Right: 6
762 | m_Top: 0
763 | m_Bottom: 0
764 | m_Overflow:
765 | m_Left: 0
766 | m_Right: 0
767 | m_Top: -1
768 | m_Bottom: 1
769 | m_Font: {fileID: 0}
770 | m_FontSize: 0
771 | m_FontStyle: 0
772 | m_Alignment: 0
773 | m_WordWrap: 0
774 | m_RichText: 1
775 | m_TextClipping: 1
776 | m_ImagePosition: 0
777 | m_ContentOffset: {x: 0, y: 0}
778 | m_FixedWidth: 0
779 | m_FixedHeight: 13
780 | m_StretchWidth: 1
781 | m_StretchHeight: 0
782 | m_horizontalScrollbarLeftButton:
783 | m_Name: horizontalscrollbarleftbutton
784 | m_Normal:
785 | m_Background: {fileID: 0}
786 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
787 | m_Hover:
788 | m_Background: {fileID: 0}
789 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
790 | m_Active:
791 | m_Background: {fileID: 0}
792 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
793 | m_Focused:
794 | m_Background: {fileID: 0}
795 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
796 | m_OnNormal:
797 | m_Background: {fileID: 0}
798 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
799 | m_OnHover:
800 | m_Background: {fileID: 0}
801 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
802 | m_OnActive:
803 | m_Background: {fileID: 0}
804 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
805 | m_OnFocused:
806 | m_Background: {fileID: 0}
807 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
808 | m_Border:
809 | m_Left: 0
810 | m_Right: 0
811 | m_Top: 0
812 | m_Bottom: 0
813 | m_Margin:
814 | m_Left: 0
815 | m_Right: 0
816 | m_Top: 0
817 | m_Bottom: 0
818 | m_Padding:
819 | m_Left: 0
820 | m_Right: 0
821 | m_Top: 0
822 | m_Bottom: 0
823 | m_Overflow:
824 | m_Left: 0
825 | m_Right: 0
826 | m_Top: 0
827 | m_Bottom: 0
828 | m_Font: {fileID: 0}
829 | m_FontSize: 0
830 | m_FontStyle: 0
831 | m_Alignment: 0
832 | m_WordWrap: 0
833 | m_RichText: 1
834 | m_TextClipping: 1
835 | m_ImagePosition: 0
836 | m_ContentOffset: {x: 0, y: 0}
837 | m_FixedWidth: 0
838 | m_FixedHeight: 0
839 | m_StretchWidth: 1
840 | m_StretchHeight: 0
841 | m_horizontalScrollbarRightButton:
842 | m_Name: horizontalscrollbarrightbutton
843 | m_Normal:
844 | m_Background: {fileID: 0}
845 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
846 | m_Hover:
847 | m_Background: {fileID: 0}
848 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
849 | m_Active:
850 | m_Background: {fileID: 0}
851 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
852 | m_Focused:
853 | m_Background: {fileID: 0}
854 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
855 | m_OnNormal:
856 | m_Background: {fileID: 0}
857 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
858 | m_OnHover:
859 | m_Background: {fileID: 0}
860 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
861 | m_OnActive:
862 | m_Background: {fileID: 0}
863 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
864 | m_OnFocused:
865 | m_Background: {fileID: 0}
866 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
867 | m_Border:
868 | m_Left: 0
869 | m_Right: 0
870 | m_Top: 0
871 | m_Bottom: 0
872 | m_Margin:
873 | m_Left: 0
874 | m_Right: 0
875 | m_Top: 0
876 | m_Bottom: 0
877 | m_Padding:
878 | m_Left: 0
879 | m_Right: 0
880 | m_Top: 0
881 | m_Bottom: 0
882 | m_Overflow:
883 | m_Left: 0
884 | m_Right: 0
885 | m_Top: 0
886 | m_Bottom: 0
887 | m_Font: {fileID: 0}
888 | m_FontSize: 0
889 | m_FontStyle: 0
890 | m_Alignment: 0
891 | m_WordWrap: 0
892 | m_RichText: 1
893 | m_TextClipping: 1
894 | m_ImagePosition: 0
895 | m_ContentOffset: {x: 0, y: 0}
896 | m_FixedWidth: 0
897 | m_FixedHeight: 0
898 | m_StretchWidth: 1
899 | m_StretchHeight: 0
900 | m_verticalScrollbar:
901 | m_Name: verticalscrollbar
902 | m_Normal:
903 | m_Background: {fileID: 11020, guid: 0000000000000000e000000000000000, type: 0}
904 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
905 | m_Hover:
906 | m_Background: {fileID: 0}
907 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
908 | m_Active:
909 | m_Background: {fileID: 0}
910 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
911 | m_Focused:
912 | m_Background: {fileID: 0}
913 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
914 | m_OnNormal:
915 | m_Background: {fileID: 0}
916 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
917 | m_OnHover:
918 | m_Background: {fileID: 0}
919 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
920 | m_OnActive:
921 | m_Background: {fileID: 0}
922 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
923 | m_OnFocused:
924 | m_Background: {fileID: 0}
925 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
926 | m_Border:
927 | m_Left: 0
928 | m_Right: 0
929 | m_Top: 9
930 | m_Bottom: 9
931 | m_Margin:
932 | m_Left: 1
933 | m_Right: 4
934 | m_Top: 4
935 | m_Bottom: 4
936 | m_Padding:
937 | m_Left: 0
938 | m_Right: 0
939 | m_Top: 1
940 | m_Bottom: 1
941 | m_Overflow:
942 | m_Left: 0
943 | m_Right: 0
944 | m_Top: 0
945 | m_Bottom: 0
946 | m_Font: {fileID: 0}
947 | m_FontSize: 0
948 | m_FontStyle: 0
949 | m_Alignment: 0
950 | m_WordWrap: 0
951 | m_RichText: 1
952 | m_TextClipping: 1
953 | m_ImagePosition: 0
954 | m_ContentOffset: {x: 0, y: 0}
955 | m_FixedWidth: 15
956 | m_FixedHeight: 0
957 | m_StretchWidth: 1
958 | m_StretchHeight: 0
959 | m_verticalScrollbarThumb:
960 | m_Name: verticalscrollbarthumb
961 | m_Normal:
962 | m_Background: {fileID: 11019, guid: 0000000000000000e000000000000000, type: 0}
963 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
964 | m_Hover:
965 | m_Background: {fileID: 0}
966 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
967 | m_Active:
968 | m_Background: {fileID: 0}
969 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
970 | m_Focused:
971 | m_Background: {fileID: 0}
972 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
973 | m_OnNormal:
974 | m_Background: {fileID: 0}
975 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
976 | m_OnHover:
977 | m_Background: {fileID: 0}
978 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
979 | m_OnActive:
980 | m_Background: {fileID: 0}
981 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
982 | m_OnFocused:
983 | m_Background: {fileID: 0}
984 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
985 | m_Border:
986 | m_Left: 6
987 | m_Right: 6
988 | m_Top: 6
989 | m_Bottom: 6
990 | m_Margin:
991 | m_Left: 0
992 | m_Right: 0
993 | m_Top: 0
994 | m_Bottom: 0
995 | m_Padding:
996 | m_Left: 0
997 | m_Right: 0
998 | m_Top: 6
999 | m_Bottom: 6
1000 | m_Overflow:
1001 | m_Left: -1
1002 | m_Right: -1
1003 | m_Top: 0
1004 | m_Bottom: 0
1005 | m_Font: {fileID: 0}
1006 | m_FontSize: 0
1007 | m_FontStyle: 0
1008 | m_Alignment: 0
1009 | m_WordWrap: 0
1010 | m_RichText: 1
1011 | m_TextClipping: 1
1012 | m_ImagePosition: 2
1013 | m_ContentOffset: {x: 0, y: 0}
1014 | m_FixedWidth: 15
1015 | m_FixedHeight: 0
1016 | m_StretchWidth: 0
1017 | m_StretchHeight: 1
1018 | m_verticalScrollbarUpButton:
1019 | m_Name: verticalscrollbarupbutton
1020 | m_Normal:
1021 | m_Background: {fileID: 0}
1022 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1023 | m_Hover:
1024 | m_Background: {fileID: 0}
1025 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1026 | m_Active:
1027 | m_Background: {fileID: 0}
1028 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1029 | m_Focused:
1030 | m_Background: {fileID: 0}
1031 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1032 | m_OnNormal:
1033 | m_Background: {fileID: 0}
1034 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1035 | m_OnHover:
1036 | m_Background: {fileID: 0}
1037 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1038 | m_OnActive:
1039 | m_Background: {fileID: 0}
1040 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1041 | m_OnFocused:
1042 | m_Background: {fileID: 0}
1043 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1044 | m_Border:
1045 | m_Left: 0
1046 | m_Right: 0
1047 | m_Top: 0
1048 | m_Bottom: 0
1049 | m_Margin:
1050 | m_Left: 0
1051 | m_Right: 0
1052 | m_Top: 0
1053 | m_Bottom: 0
1054 | m_Padding:
1055 | m_Left: 0
1056 | m_Right: 0
1057 | m_Top: 0
1058 | m_Bottom: 0
1059 | m_Overflow:
1060 | m_Left: 0
1061 | m_Right: 0
1062 | m_Top: 0
1063 | m_Bottom: 0
1064 | m_Font: {fileID: 0}
1065 | m_FontSize: 0
1066 | m_FontStyle: 0
1067 | m_Alignment: 0
1068 | m_WordWrap: 0
1069 | m_RichText: 1
1070 | m_TextClipping: 1
1071 | m_ImagePosition: 0
1072 | m_ContentOffset: {x: 0, y: 0}
1073 | m_FixedWidth: 0
1074 | m_FixedHeight: 0
1075 | m_StretchWidth: 1
1076 | m_StretchHeight: 0
1077 | m_verticalScrollbarDownButton:
1078 | m_Name: verticalscrollbardownbutton
1079 | m_Normal:
1080 | m_Background: {fileID: 0}
1081 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1082 | m_Hover:
1083 | m_Background: {fileID: 0}
1084 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1085 | m_Active:
1086 | m_Background: {fileID: 0}
1087 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1088 | m_Focused:
1089 | m_Background: {fileID: 0}
1090 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1091 | m_OnNormal:
1092 | m_Background: {fileID: 0}
1093 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1094 | m_OnHover:
1095 | m_Background: {fileID: 0}
1096 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1097 | m_OnActive:
1098 | m_Background: {fileID: 0}
1099 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1100 | m_OnFocused:
1101 | m_Background: {fileID: 0}
1102 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1103 | m_Border:
1104 | m_Left: 0
1105 | m_Right: 0
1106 | m_Top: 0
1107 | m_Bottom: 0
1108 | m_Margin:
1109 | m_Left: 0
1110 | m_Right: 0
1111 | m_Top: 0
1112 | m_Bottom: 0
1113 | m_Padding:
1114 | m_Left: 0
1115 | m_Right: 0
1116 | m_Top: 0
1117 | m_Bottom: 0
1118 | m_Overflow:
1119 | m_Left: 0
1120 | m_Right: 0
1121 | m_Top: 0
1122 | m_Bottom: 0
1123 | m_Font: {fileID: 0}
1124 | m_FontSize: 0
1125 | m_FontStyle: 0
1126 | m_Alignment: 0
1127 | m_WordWrap: 0
1128 | m_RichText: 1
1129 | m_TextClipping: 1
1130 | m_ImagePosition: 0
1131 | m_ContentOffset: {x: 0, y: 0}
1132 | m_FixedWidth: 0
1133 | m_FixedHeight: 0
1134 | m_StretchWidth: 1
1135 | m_StretchHeight: 0
1136 | m_ScrollView:
1137 | m_Name: scrollview
1138 | m_Normal:
1139 | m_Background: {fileID: 0}
1140 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1141 | m_Hover:
1142 | m_Background: {fileID: 0}
1143 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1144 | m_Active:
1145 | m_Background: {fileID: 0}
1146 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1147 | m_Focused:
1148 | m_Background: {fileID: 0}
1149 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1150 | m_OnNormal:
1151 | m_Background: {fileID: 0}
1152 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1153 | m_OnHover:
1154 | m_Background: {fileID: 0}
1155 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1156 | m_OnActive:
1157 | m_Background: {fileID: 0}
1158 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1159 | m_OnFocused:
1160 | m_Background: {fileID: 0}
1161 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1162 | m_Border:
1163 | m_Left: 0
1164 | m_Right: 0
1165 | m_Top: 0
1166 | m_Bottom: 0
1167 | m_Margin:
1168 | m_Left: 0
1169 | m_Right: 0
1170 | m_Top: 0
1171 | m_Bottom: 0
1172 | m_Padding:
1173 | m_Left: 0
1174 | m_Right: 0
1175 | m_Top: 0
1176 | m_Bottom: 0
1177 | m_Overflow:
1178 | m_Left: 0
1179 | m_Right: 0
1180 | m_Top: 0
1181 | m_Bottom: 0
1182 | m_Font: {fileID: 0}
1183 | m_FontSize: 0
1184 | m_FontStyle: 0
1185 | m_Alignment: 0
1186 | m_WordWrap: 0
1187 | m_RichText: 1
1188 | m_TextClipping: 1
1189 | m_ImagePosition: 0
1190 | m_ContentOffset: {x: 0, y: 0}
1191 | m_FixedWidth: 0
1192 | m_FixedHeight: 0
1193 | m_StretchWidth: 1
1194 | m_StretchHeight: 0
1195 | m_CustomStyles:
1196 | - m_Name:
1197 | m_Normal:
1198 | m_Background: {fileID: 0}
1199 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1200 | m_Hover:
1201 | m_Background: {fileID: 0}
1202 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1203 | m_Active:
1204 | m_Background: {fileID: 0}
1205 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1206 | m_Focused:
1207 | m_Background: {fileID: 0}
1208 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1209 | m_OnNormal:
1210 | m_Background: {fileID: 0}
1211 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1212 | m_OnHover:
1213 | m_Background: {fileID: 0}
1214 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1215 | m_OnActive:
1216 | m_Background: {fileID: 0}
1217 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1218 | m_OnFocused:
1219 | m_Background: {fileID: 0}
1220 | m_TextColor: {r: 0, g: 0, b: 0, a: 1}
1221 | m_Border:
1222 | m_Left: 0
1223 | m_Right: 0
1224 | m_Top: 0
1225 | m_Bottom: 0
1226 | m_Margin:
1227 | m_Left: 0
1228 | m_Right: 0
1229 | m_Top: 0
1230 | m_Bottom: 0
1231 | m_Padding:
1232 | m_Left: 0
1233 | m_Right: 0
1234 | m_Top: 0
1235 | m_Bottom: 0
1236 | m_Overflow:
1237 | m_Left: 0
1238 | m_Right: 0
1239 | m_Top: 0
1240 | m_Bottom: 0
1241 | m_Font: {fileID: 0}
1242 | m_FontSize: 0
1243 | m_FontStyle: 0
1244 | m_Alignment: 0
1245 | m_WordWrap: 0
1246 | m_RichText: 1
1247 | m_TextClipping: 0
1248 | m_ImagePosition: 0
1249 | m_ContentOffset: {x: 0, y: 0}
1250 | m_FixedWidth: 0
1251 | m_FixedHeight: 0
1252 | m_StretchWidth: 1
1253 | m_StretchHeight: 0
1254 | m_Settings:
1255 | m_DoubleClickSelectsWord: 1
1256 | m_TripleClickSelectsLine: 1
1257 | m_CursorColor: {r: 1, g: 1, b: 1, a: 1}
1258 | m_CursorFlashSpeed: -1
1259 | m_SelectionColor: {r: 0, g: .564705908, b: .823529422, a: .698039234}
1260 |
--------------------------------------------------------------------------------
/ExampleGame/Assets/TestUI/TestUISkin.guiskin.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: d7fb91a8c54f149948c667b9f0e70c96
3 | NativeFormatImporter:
4 | userData:
5 | assetBundleName:
6 | assetBundleVariant:
7 |
--------------------------------------------------------------------------------
/ExampleGame/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_AmbisonicDecoderPlugin:
16 | m_DisableAudio: 0
17 | m_VirtualizeEffects: 1
18 |
--------------------------------------------------------------------------------
/ExampleGame/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 |
--------------------------------------------------------------------------------
/ExampleGame/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 | m_AutoSimulation: 1
20 |
--------------------------------------------------------------------------------
/ExampleGame/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 |
--------------------------------------------------------------------------------
/ExampleGame/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: 4
7 | m_ExternalVersionControlSupport: Hidden Meta Files
8 | m_SerializationMode: 2
9 | m_DefaultBehaviorMode: 0
10 | m_SpritePackerMode: 0
11 | m_SpritePackerPaddingPower: 1
12 | m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd
13 | m_ProjectGenerationRootNamespace:
14 | m_UserGeneratedProjectSuffix:
15 | m_CollabEditorSettings:
16 | inProgressEnabled: 1
17 |
--------------------------------------------------------------------------------
/ExampleGame/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 | m_PreloadedShaders: []
33 | m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000,
34 | type: 0}
35 | m_CustomRenderPipeline: {fileID: 0}
36 | m_TransparencySortMode: 0
37 | m_TransparencySortAxis: {x: 0, y: 0, z: 1}
38 | m_DefaultRenderingPath: 1
39 | m_DefaultMobileRenderingPath: 1
40 | m_TierSettings: []
41 | m_LightmapStripping: 0
42 | m_FogStripping: 0
43 | m_InstancingStripping: 0
44 | m_LightmapKeepPlain: 1
45 | m_LightmapKeepDirCombined: 1
46 | m_LightmapKeepDynamicPlain: 1
47 | m_LightmapKeepDynamicDirCombined: 1
48 | m_LightmapKeepShadowMask: 1
49 | m_LightmapKeepSubtractive: 1
50 | m_FogKeepLinear: 1
51 | m_FogKeepExp: 1
52 | m_FogKeepExp2: 1
53 | m_AlbedoSwatchInfos: []
54 | m_LightsUseLinearIntensity: 0
55 | m_LightsUseColorTemperature: 0
56 |
--------------------------------------------------------------------------------
/ExampleGame/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 cmd
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 |
--------------------------------------------------------------------------------
/ExampleGame/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 |
--------------------------------------------------------------------------------
/ExampleGame/ProjectSettings/NavMeshLayers.asset:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitstadium/HockeySDK-Unity-Android/eabf07dd7786de4dfb2b9be6b04f75eb6cdb66cc/ExampleGame/ProjectSettings/NavMeshLayers.asset
--------------------------------------------------------------------------------
/ExampleGame/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 |
--------------------------------------------------------------------------------
/ExampleGame/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_AutoSimulation: 1
23 | m_QueriesHitTriggers: 1
24 | m_QueriesStartInColliders: 1
25 | m_ChangeStopsCallbacks: 0
26 | m_CallbacksOnDisable: 1
27 | m_AlwaysShowColliders: 0
28 | m_ShowColliderSleep: 1
29 | m_ShowColliderContacts: 0
30 | m_ShowColliderAABB: 0
31 | m_ContactArrowScale: 0.2
32 | m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412}
33 | m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432}
34 | m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745}
35 | m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804}
36 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
37 |
--------------------------------------------------------------------------------
/ExampleGame/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: 12
7 | productGUID: 730ed430fcb9342ce9e02324477fc1f7
8 | AndroidProfiler: 0
9 | defaultScreenOrientation: 4
10 | targetDevice: 2
11 | useOnDemandResources: 0
12 | accelerometerFrequency: 60
13 | companyName: DefaultCompany
14 | productName: ExampleGame
15 | defaultCursor: {fileID: 0}
16 | cursorHotspot: {x: 0, y: 0}
17 | m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1}
18 | m_ShowUnitySplashScreen: 1
19 | m_ShowUnitySplashLogo: 1
20 | m_SplashScreenOverlayOpacity: 1
21 | m_SplashScreenAnimation: 1
22 | m_SplashScreenLogoStyle: 1
23 | m_SplashScreenDrawMode: 0
24 | m_SplashScreenBackgroundAnimationZoom: 1
25 | m_SplashScreenLogoAnimationZoom: 1
26 | m_SplashScreenBackgroundLandscapeAspect: 1
27 | m_SplashScreenBackgroundPortraitAspect: 1
28 | m_SplashScreenBackgroundLandscapeUvs:
29 | serializedVersion: 2
30 | x: 0
31 | y: 0
32 | width: 1
33 | height: 1
34 | m_SplashScreenBackgroundPortraitUvs:
35 | serializedVersion: 2
36 | x: 0
37 | y: 0
38 | width: 1
39 | height: 1
40 | m_SplashScreenLogos: []
41 | m_SplashScreenBackgroundLandscape: {fileID: 0}
42 | m_SplashScreenBackgroundPortrait: {fileID: 0}
43 | m_VirtualRealitySplashScreen: {fileID: 0}
44 | m_HolographicTrackingLossScreen: {fileID: 0}
45 | defaultScreenWidth: 1024
46 | defaultScreenHeight: 768
47 | defaultScreenWidthWeb: 960
48 | defaultScreenHeightWeb: 600
49 | m_StereoRenderingPath: 0
50 | m_ActiveColorSpace: 0
51 | m_MTRendering: 1
52 | m_MobileMTRendering: 0
53 | m_StackTraceTypes: 010000000100000001000000010000000100000001000000
54 | iosShowActivityIndicatorOnLoading: -1
55 | androidShowActivityIndicatorOnLoading: -1
56 | tizenShowActivityIndicatorOnLoading: -1
57 | iosAppInBackgroundBehavior: 0
58 | displayResolutionDialog: 1
59 | iosAllowHTTPDownload: 1
60 | allowedAutorotateToPortrait: 1
61 | allowedAutorotateToPortraitUpsideDown: 1
62 | allowedAutorotateToLandscapeRight: 1
63 | allowedAutorotateToLandscapeLeft: 1
64 | useOSAutorotation: 1
65 | use32BitDisplayBuffer: 1
66 | disableDepthAndStencilBuffers: 0
67 | defaultIsFullScreen: 1
68 | defaultIsNativeResolution: 1
69 | runInBackground: 0
70 | captureSingleScreen: 0
71 | muteOtherAudioSources: 0
72 | Prepare IOS For Recording: 0
73 | Force IOS Speakers When Recording: 0
74 | submitAnalytics: 1
75 | usePlayerLog: 1
76 | bakeCollisionMeshes: 0
77 | forceSingleInstance: 0
78 | resizableWindow: 0
79 | useMacAppStoreValidation: 0
80 | macAppStoreCategory: public.app-category.games
81 | gpuSkinning: 0
82 | graphicsJobs: 0
83 | xboxPIXTextureCapture: 0
84 | xboxEnableAvatar: 0
85 | xboxEnableKinect: 0
86 | xboxEnableKinectAutoTracking: 0
87 | xboxEnableFitness: 0
88 | visibleInBackground: 0
89 | allowFullscreenSwitch: 1
90 | graphicsJobMode: 0
91 | macFullscreenMode: 2
92 | d3d9FullscreenMode: 1
93 | d3d11FullscreenMode: 1
94 | xboxSpeechDB: 0
95 | xboxEnableHeadOrientation: 0
96 | xboxEnableGuest: 0
97 | xboxEnablePIXSampling: 0
98 | n3dsDisableStereoscopicView: 0
99 | n3dsEnableSharedListOpt: 1
100 | n3dsEnableVSync: 0
101 | ignoreAlphaClear: 0
102 | xboxOneResolution: 0
103 | xboxOneMonoLoggingLevel: 0
104 | xboxOneLoggingLevel: 1
105 | xboxOneDisableEsram: 0
106 | videoMemoryForVertexBuffers: 0
107 | psp2PowerMode: 0
108 | psp2AcquireBGM: 1
109 | wiiUTVResolution: 0
110 | wiiUGamePadMSAA: 1
111 | wiiUSupportsNunchuk: 0
112 | wiiUSupportsClassicController: 0
113 | wiiUSupportsBalanceBoard: 0
114 | wiiUSupportsMotionPlus: 0
115 | wiiUSupportsProController: 0
116 | wiiUAllowScreenCapture: 1
117 | wiiUControllerCount: 0
118 | m_SupportedAspectRatios:
119 | 4:3: 1
120 | 5:4: 1
121 | 16:10: 1
122 | 16:9: 1
123 | Others: 1
124 | bundleVersion: 5.0.1
125 | preloadedAssets: []
126 | metroInputSource: 0
127 | m_HolographicPauseOnTrackingLoss: 1
128 | xboxOneDisableKinectGpuReservation: 0
129 | xboxOneEnable7thCore: 0
130 | vrSettings:
131 | cardboard:
132 | depthFormat: 0
133 | enableTransitionView: 0
134 | daydream:
135 | depthFormat: 0
136 | useSustainedPerformanceMode: 0
137 | hololens:
138 | depthFormat: 1
139 | protectGraphicsMemory: 0
140 | useHDRDisplay: 0
141 | targetPixelDensity: 0
142 | resolutionScalingMode: 0
143 | applicationIdentifier:
144 | Android: com.Company.ProductName
145 | Standalone: unity.DefaultCompany.ExampleGame
146 | Tizen: com.Company.ProductName
147 | iOS: com.Company.ProductName
148 | tvOS: com.Company.ProductName
149 | buildNumber:
150 | iOS:
151 | AndroidBundleVersionCode: 18
152 | AndroidMinSdkVersion: 16
153 | AndroidTargetSdkVersion: 0
154 | AndroidPreferredInstallLocation: 1
155 | aotOptions:
156 | stripEngineCode: 1
157 | iPhoneStrippingLevel: 0
158 | iPhoneScriptCallOptimization: 0
159 | ForceInternetPermission: 0
160 | ForceSDCardPermission: 0
161 | CreateWallpaper: 0
162 | APKExpansionFiles: 0
163 | keepLoadedShadersAlive: 0
164 | StripUnusedMeshComponents: 0
165 | VertexChannelCompressionMask:
166 | serializedVersion: 2
167 | m_Bits: 238
168 | iPhoneSdkVersion: 988
169 | iOSTargetOSVersionString: 6.0
170 | tvOSSdkVersion: 0
171 | tvOSRequireExtendedGameController: 0
172 | tvOSTargetOSVersionString:
173 | uIPrerenderedIcon: 0
174 | uIRequiresPersistentWiFi: 0
175 | uIRequiresFullScreen: 1
176 | uIStatusBarHidden: 1
177 | uIExitOnSuspend: 0
178 | uIStatusBarStyle: 0
179 | iPhoneSplashScreen: {fileID: 0}
180 | iPhoneHighResSplashScreen: {fileID: 0}
181 | iPhoneTallHighResSplashScreen: {fileID: 0}
182 | iPhone47inSplashScreen: {fileID: 0}
183 | iPhone55inPortraitSplashScreen: {fileID: 0}
184 | iPhone55inLandscapeSplashScreen: {fileID: 0}
185 | iPadPortraitSplashScreen: {fileID: 0}
186 | iPadHighResPortraitSplashScreen: {fileID: 0}
187 | iPadLandscapeSplashScreen: {fileID: 0}
188 | iPadHighResLandscapeSplashScreen: {fileID: 0}
189 | appleTVSplashScreen: {fileID: 0}
190 | tvOSSmallIconLayers: []
191 | tvOSLargeIconLayers: []
192 | tvOSTopShelfImageLayers: []
193 | tvOSTopShelfImageWideLayers: []
194 | iOSLaunchScreenType: 0
195 | iOSLaunchScreenPortrait: {fileID: 0}
196 | iOSLaunchScreenLandscape: {fileID: 0}
197 | iOSLaunchScreenBackgroundColor:
198 | serializedVersion: 2
199 | rgba: 0
200 | iOSLaunchScreenFillPct: 1
201 | iOSLaunchScreenSize: 100
202 | iOSLaunchScreenCustomXibPath:
203 | iOSLaunchScreeniPadType: 0
204 | iOSLaunchScreeniPadImage: {fileID: 0}
205 | iOSLaunchScreeniPadBackgroundColor:
206 | serializedVersion: 2
207 | rgba: 0
208 | iOSLaunchScreeniPadFillPct: 100
209 | iOSLaunchScreeniPadSize: 100
210 | iOSLaunchScreeniPadCustomXibPath:
211 | iOSDeviceRequirements: []
212 | iOSURLSchemes: []
213 | iOSBackgroundModes: 0
214 | iOSMetalForceHardShadows: 0
215 | metalEditorSupport: 0
216 | metalAPIValidation: 1
217 | iOSRenderExtraFrameOnPause: 1
218 | appleDeveloperTeamID:
219 | iOSManualSigningProvisioningProfileID:
220 | tvOSManualSigningProvisioningProfileID:
221 | appleEnableAutomaticSigning: 0
222 | AndroidTargetDevice: 0
223 | AndroidSplashScreenScale: 0
224 | androidSplashScreen: {fileID: 0}
225 | AndroidKeystoreName:
226 | AndroidKeyaliasName:
227 | AndroidTVCompatibility: 1
228 | AndroidIsGame: 1
229 | androidEnableBanner: 1
230 | m_AndroidBanners:
231 | - width: 320
232 | height: 180
233 | banner: {fileID: 0}
234 | androidGamepadSupportLevel: 0
235 | resolutionDialogBanner: {fileID: 0}
236 | m_BuildTargetIcons:
237 | - m_BuildTarget:
238 | m_Icons:
239 | - serializedVersion: 2
240 | m_Icon: {fileID: 0}
241 | m_Width: 128
242 | m_Height: 128
243 | m_BuildTargetBatching: []
244 | m_BuildTargetGraphicsAPIs: []
245 | m_BuildTargetVRSettings:
246 | - m_BuildTarget: Android
247 | m_Enabled: 0
248 | m_Devices: []
249 | openGLRequireES31: 0
250 | openGLRequireES31AEP: 0
251 | webPlayerTemplate: APPLICATION:Default
252 | m_TemplateCustomTags: {}
253 | wiiUTitleID: 0005000011000000
254 | wiiUGroupID: 00010000
255 | wiiUCommonSaveSize: 4096
256 | wiiUAccountSaveSize: 2048
257 | wiiUOlvAccessKey: 0
258 | wiiUTinCode: 0
259 | wiiUJoinGameId: 0
260 | wiiUJoinGameModeMask: 0000000000000000
261 | wiiUCommonBossSize: 0
262 | wiiUAccountBossSize: 0
263 | wiiUAddOnUniqueIDs: []
264 | wiiUMainThreadStackSize: 3072
265 | wiiULoaderThreadStackSize: 1024
266 | wiiUSystemHeapSize: 128
267 | wiiUTVStartupScreen: {fileID: 0}
268 | wiiUGamePadStartupScreen: {fileID: 0}
269 | wiiUDrcBufferDisabled: 0
270 | wiiUProfilerLibPath:
271 | playModeTestRunnerEnabled: 0
272 | actionOnDotNetUnhandledException: 1
273 | enableInternalProfiler: 0
274 | logObjCUncaughtExceptions: 1
275 | enableCrashReportAPI: 0
276 | cameraUsageDescription:
277 | locationUsageDescription:
278 | microphoneUsageDescription:
279 | switchNetLibKey:
280 | switchSocketMemoryPoolSize: 6144
281 | switchSocketAllocatorPoolSize: 128
282 | switchSocketConcurrencyLimit: 14
283 | switchScreenResolutionBehavior: 2
284 | switchUseCPUProfiler: 0
285 | switchApplicationID: 0x01004b9000490000
286 | switchNSODependencies:
287 | switchTitleNames_0:
288 | switchTitleNames_1:
289 | switchTitleNames_2:
290 | switchTitleNames_3:
291 | switchTitleNames_4:
292 | switchTitleNames_5:
293 | switchTitleNames_6:
294 | switchTitleNames_7:
295 | switchTitleNames_8:
296 | switchTitleNames_9:
297 | switchTitleNames_10:
298 | switchTitleNames_11:
299 | switchPublisherNames_0:
300 | switchPublisherNames_1:
301 | switchPublisherNames_2:
302 | switchPublisherNames_3:
303 | switchPublisherNames_4:
304 | switchPublisherNames_5:
305 | switchPublisherNames_6:
306 | switchPublisherNames_7:
307 | switchPublisherNames_8:
308 | switchPublisherNames_9:
309 | switchPublisherNames_10:
310 | switchPublisherNames_11:
311 | switchIcons_0: {fileID: 0}
312 | switchIcons_1: {fileID: 0}
313 | switchIcons_2: {fileID: 0}
314 | switchIcons_3: {fileID: 0}
315 | switchIcons_4: {fileID: 0}
316 | switchIcons_5: {fileID: 0}
317 | switchIcons_6: {fileID: 0}
318 | switchIcons_7: {fileID: 0}
319 | switchIcons_8: {fileID: 0}
320 | switchIcons_9: {fileID: 0}
321 | switchIcons_10: {fileID: 0}
322 | switchIcons_11: {fileID: 0}
323 | switchSmallIcons_0: {fileID: 0}
324 | switchSmallIcons_1: {fileID: 0}
325 | switchSmallIcons_2: {fileID: 0}
326 | switchSmallIcons_3: {fileID: 0}
327 | switchSmallIcons_4: {fileID: 0}
328 | switchSmallIcons_5: {fileID: 0}
329 | switchSmallIcons_6: {fileID: 0}
330 | switchSmallIcons_7: {fileID: 0}
331 | switchSmallIcons_8: {fileID: 0}
332 | switchSmallIcons_9: {fileID: 0}
333 | switchSmallIcons_10: {fileID: 0}
334 | switchSmallIcons_11: {fileID: 0}
335 | switchManualHTML:
336 | switchAccessibleURLs:
337 | switchLegalInformation:
338 | switchMainThreadStackSize: 1048576
339 | switchPresenceGroupId:
340 | switchLogoHandling: 0
341 | switchReleaseVersion: 0
342 | switchDisplayVersion: 1.0.0
343 | switchStartupUserAccount: 0
344 | switchTouchScreenUsage: 0
345 | switchSupportedLanguagesMask: 0
346 | switchLogoType: 0
347 | switchApplicationErrorCodeCategory:
348 | switchUserAccountSaveDataSize: 0
349 | switchUserAccountSaveDataJournalSize: 0
350 | switchApplicationAttribute: 0
351 | switchCardSpecSize: -1
352 | switchCardSpecClock: -1
353 | switchRatingsMask: 0
354 | switchRatingsInt_0: 0
355 | switchRatingsInt_1: 0
356 | switchRatingsInt_2: 0
357 | switchRatingsInt_3: 0
358 | switchRatingsInt_4: 0
359 | switchRatingsInt_5: 0
360 | switchRatingsInt_6: 0
361 | switchRatingsInt_7: 0
362 | switchRatingsInt_8: 0
363 | switchRatingsInt_9: 0
364 | switchRatingsInt_10: 0
365 | switchRatingsInt_11: 0
366 | switchLocalCommunicationIds_0:
367 | switchLocalCommunicationIds_1:
368 | switchLocalCommunicationIds_2:
369 | switchLocalCommunicationIds_3:
370 | switchLocalCommunicationIds_4:
371 | switchLocalCommunicationIds_5:
372 | switchLocalCommunicationIds_6:
373 | switchLocalCommunicationIds_7:
374 | switchParentalControl: 0
375 | switchAllowsScreenshot: 1
376 | switchDataLossConfirmation: 0
377 | switchSupportedNpadStyles: 3
378 | switchSocketConfigEnabled: 0
379 | switchTcpInitialSendBufferSize: 32
380 | switchTcpInitialReceiveBufferSize: 64
381 | switchTcpAutoSendBufferSizeMax: 256
382 | switchTcpAutoReceiveBufferSizeMax: 256
383 | switchUdpSendBufferSize: 9
384 | switchUdpReceiveBufferSize: 42
385 | switchSocketBufferEfficiency: 4
386 | ps4NPAgeRating: 12
387 | ps4NPTitleSecret:
388 | ps4NPTrophyPackPath:
389 | ps4ParentalLevel: 1
390 | ps4ContentID: ED1633-NPXX51362_00-0000000000000000
391 | ps4Category: 0
392 | ps4MasterVersion: 01.00
393 | ps4AppVersion: 01.00
394 | ps4AppType: 0
395 | ps4ParamSfxPath:
396 | ps4VideoOutPixelFormat: 0
397 | ps4VideoOutInitialWidth: 1920
398 | ps4VideoOutBaseModeInitialWidth: 1920
399 | ps4VideoOutReprojectionRate: 120
400 | ps4PronunciationXMLPath:
401 | ps4PronunciationSIGPath:
402 | ps4BackgroundImagePath:
403 | ps4StartupImagePath:
404 | ps4SaveDataImagePath:
405 | ps4SdkOverride:
406 | ps4BGMPath:
407 | ps4ShareFilePath:
408 | ps4ShareOverlayImagePath:
409 | ps4PrivacyGuardImagePath:
410 | ps4NPtitleDatPath:
411 | ps4RemotePlayKeyAssignment: -1
412 | ps4RemotePlayKeyMappingDir:
413 | ps4PlayTogetherPlayerCount: 0
414 | ps4EnterButtonAssignment: 1
415 | ps4ApplicationParam1: 0
416 | ps4ApplicationParam2: 0
417 | ps4ApplicationParam3: 0
418 | ps4ApplicationParam4: 0
419 | ps4DownloadDataSize: 0
420 | ps4GarlicHeapSize: 2048
421 | ps4ProGarlicHeapSize: 2560
422 | ps4Passcode: 15SyFFYzQzudR6JQDGnnl7UutNHhZECv
423 | ps4pnSessions: 1
424 | ps4pnPresence: 1
425 | ps4pnFriends: 1
426 | ps4pnGameCustomData: 1
427 | playerPrefsSupport: 0
428 | restrictedAudioUsageRights: 0
429 | ps4UseResolutionFallback: 0
430 | ps4ReprojectionSupport: 0
431 | ps4UseAudio3dBackend: 0
432 | ps4SocialScreenEnabled: 0
433 | ps4ScriptOptimizationLevel: 3
434 | ps4Audio3dVirtualSpeakerCount: 14
435 | ps4attribCpuUsage: 0
436 | ps4PatchPkgPath:
437 | ps4PatchLatestPkgPath:
438 | ps4PatchChangeinfoPath:
439 | ps4PatchDayOne: 0
440 | ps4attribUserManagement: 0
441 | ps4attribMoveSupport: 0
442 | ps4attrib3DSupport: 0
443 | ps4attribShareSupport: 0
444 | ps4attribExclusiveVR: 0
445 | ps4disableAutoHideSplash: 0
446 | ps4videoRecordingFeaturesUsed: 0
447 | ps4contentSearchFeaturesUsed: 0
448 | ps4attribEyeToEyeDistanceSettingVR: 0
449 | ps4IncludedModules: []
450 | monoEnv:
451 | psp2Splashimage: {fileID: 0}
452 | psp2NPTrophyPackPath:
453 | psp2NPSupportGBMorGJP: 0
454 | psp2NPAgeRating: 12
455 | psp2NPTitleDatPath:
456 | psp2NPCommsID:
457 | psp2NPCommunicationsID:
458 | psp2NPCommsPassphrase:
459 | psp2NPCommsSig:
460 | psp2ParamSfxPath:
461 | psp2ManualPath:
462 | psp2LiveAreaGatePath:
463 | psp2LiveAreaBackroundPath:
464 | psp2LiveAreaPath:
465 | psp2LiveAreaTrialPath:
466 | psp2PatchChangeInfoPath:
467 | psp2PatchOriginalPackage:
468 | psp2PackagePassword: vnj9rgXqbQNm9xjd7HD0xRC5QpyhKMPs
469 | psp2KeystoneFile:
470 | psp2MemoryExpansionMode: 0
471 | psp2DRMType: 0
472 | psp2StorageType: 0
473 | psp2MediaCapacity: 0
474 | psp2DLCConfigPath:
475 | psp2ThumbnailPath:
476 | psp2BackgroundPath:
477 | psp2SoundPath:
478 | psp2TrophyCommId:
479 | psp2TrophyPackagePath:
480 | psp2PackagedResourcesPath:
481 | psp2SaveDataQuota: 10240
482 | psp2ParentalLevel: 1
483 | psp2ShortTitle: Not Set
484 | psp2ContentID: IV0000-ABCD12345_00-0123456789ABCDEF
485 | psp2Category: 0
486 | psp2MasterVersion: 01.00
487 | psp2AppVersion: 01.00
488 | psp2TVBootMode: 0
489 | psp2EnterButtonAssignment: 2
490 | psp2TVDisableEmu: 0
491 | psp2AllowTwitterDialog: 1
492 | psp2Upgradable: 0
493 | psp2HealthWarning: 0
494 | psp2UseLibLocation: 0
495 | psp2InfoBarOnStartup: 0
496 | psp2InfoBarColor: 0
497 | psp2ScriptOptimizationLevel: 0
498 | psmSplashimage: {fileID: 0}
499 | splashScreenBackgroundSourceLandscape: {fileID: 0}
500 | splashScreenBackgroundSourcePortrait: {fileID: 0}
501 | spritePackerPolicy:
502 | webGLMemorySize: 256
503 | webGLExceptionSupport: 0
504 | webGLNameFilesAsHashes: 0
505 | webGLDataCaching: 0
506 | webGLDebugSymbols: 0
507 | webGLEmscriptenArgs:
508 | webGLModulesDirectory:
509 | webGLTemplate: APPLICATION:Default
510 | webGLAnalyzeBuildSize: 0
511 | webGLUseEmbeddedResources: 0
512 | webGLUseWasm: 0
513 | webGLCompressionFormat: 1
514 | scriptingDefineSymbols: {}
515 | platformArchitecture:
516 | iOS: 0
517 | scriptingBackend:
518 | WebGL: 1
519 | iOS: 0
520 | incrementalIl2cppBuild: {}
521 | additionalIl2CppArgs:
522 | scriptingRuntimeVersion: 0
523 | apiCompatibilityLevelPerPlatform: {}
524 | m_RenderingPath: 1
525 | m_MobileRenderingPath: 1
526 | metroPackageName: ExampleGame
527 | metroPackageVersion:
528 | metroCertificatePath:
529 | metroCertificatePassword:
530 | metroCertificateSubject:
531 | metroCertificateIssuer:
532 | metroCertificateNotAfter: 0000000000000000
533 | metroApplicationDescription: ExampleGame
534 | wsaImages: {}
535 | metroTileShortName:
536 | metroCommandLineArgsFile:
537 | metroTileShowName: 0
538 | metroMediumTileShowName: 0
539 | metroLargeTileShowName: 0
540 | metroWideTileShowName: 0
541 | metroDefaultTileSize: 1
542 | metroTileForegroundText: 1
543 | metroTileBackgroundColor: {r: 0, g: 0, b: 0, a: 1}
544 | metroSplashScreenBackgroundColor: {r: 0, g: 0, b: 0, a: 1}
545 | metroSplashScreenUseBackgroundColor: 0
546 | platformCapabilities: {}
547 | metroFTAName:
548 | metroFTAFileTypes: []
549 | metroProtocolName:
550 | metroCompilationOverrides: 1
551 | tizenProductDescription:
552 | tizenProductURL:
553 | tizenSigningProfileName:
554 | tizenGPSPermissions: 0
555 | tizenMicrophonePermissions: 0
556 | tizenDeploymentTarget:
557 | tizenDeploymentTargetType: -1
558 | tizenMinOSVersion: 1
559 | n3dsUseExtSaveData: 0
560 | n3dsCompressStaticMem: 1
561 | n3dsExtSaveDataNumber: 0x12345
562 | n3dsStackSize: 131072
563 | n3dsTargetPlatform: 2
564 | n3dsRegion: 7
565 | n3dsMediaSize: 0
566 | n3dsLogoStyle: 3
567 | n3dsTitle: GameName
568 | n3dsProductCode:
569 | n3dsApplicationId: 0xFF3FF
570 | stvDeviceAddress:
571 | stvProductDescription:
572 | stvProductAuthor:
573 | stvProductAuthorEmail:
574 | stvProductLink:
575 | stvProductCategory: 0
576 | XboxOneProductId:
577 | XboxOneUpdateKey:
578 | XboxOneSandboxId:
579 | XboxOneContentId:
580 | XboxOneTitleId:
581 | XboxOneSCId:
582 | XboxOneGameOsOverridePath:
583 | XboxOnePackagingOverridePath:
584 | XboxOneAppManifestOverridePath:
585 | XboxOnePackageEncryption: 0
586 | XboxOnePackageUpdateGranularity: 2
587 | XboxOneDescription:
588 | XboxOneLanguage:
589 | - enus
590 | XboxOneCapability: []
591 | XboxOneGameRating: {}
592 | XboxOneIsContentPackage: 0
593 | XboxOneEnableGPUVariability: 0
594 | XboxOneSockets: {}
595 | XboxOneSplashScreen: {fileID: 0}
596 | XboxOneAllowedProductIds: []
597 | XboxOnePersistentLocalStorageSize: 0
598 | xboxOneScriptCompiler: 0
599 | vrEditorSettings:
600 | daydream:
601 | daydreamIconForeground: {fileID: 0}
602 | daydreamIconBackground: {fileID: 0}
603 | cloudServicesEnabled: {}
604 | facebookSdkVersion: 7.9.1
605 | apiCompatibilityLevel: 2
606 | cloudProjectId:
607 | projectName:
608 | organizationId:
609 | cloudEnabled: 0
610 | enableNativePlatformBackendsForNewInputSystem: 0
611 | disableOldInputManagerSupport: 0
612 |
--------------------------------------------------------------------------------
/ExampleGame/ProjectSettings/ProjectVersion.txt:
--------------------------------------------------------------------------------
1 | m_EditorVersion: 2017.1.0f3
2 |
--------------------------------------------------------------------------------
/ExampleGame/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: 3
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 | shadowmaskMode: 0
21 | blendWeights: 1
22 | textureQuality: 1
23 | anisotropicTextures: 0
24 | antiAliasing: 0
25 | softParticles: 0
26 | softVegetation: 0
27 | realtimeReflectionProbes: 0
28 | billboardsFaceCameraPosition: 0
29 | vSyncCount: 0
30 | lodBias: 0.3
31 | maximumLODLevel: 0
32 | particleRaycastBudget: 4
33 | asyncUploadTimeSlice: 2
34 | asyncUploadBufferSize: 4
35 | resolutionScalingFixedDPIFactor: 1
36 | excludedTargetPlatforms: []
37 | - serializedVersion: 2
38 | name: Fast
39 | pixelLightCount: 0
40 | shadows: 0
41 | shadowResolution: 0
42 | shadowProjection: 1
43 | shadowCascades: 1
44 | shadowDistance: 20
45 | shadowNearPlaneOffset: 3
46 | shadowCascade2Split: 0.33333334
47 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
48 | shadowmaskMode: 0
49 | blendWeights: 2
50 | textureQuality: 0
51 | anisotropicTextures: 0
52 | antiAliasing: 0
53 | softParticles: 0
54 | softVegetation: 0
55 | realtimeReflectionProbes: 0
56 | billboardsFaceCameraPosition: 0
57 | vSyncCount: 0
58 | lodBias: 0.4
59 | maximumLODLevel: 0
60 | particleRaycastBudget: 16
61 | asyncUploadTimeSlice: 2
62 | asyncUploadBufferSize: 4
63 | resolutionScalingFixedDPIFactor: 1
64 | excludedTargetPlatforms: []
65 | - serializedVersion: 2
66 | name: Simple
67 | pixelLightCount: 1
68 | shadows: 1
69 | shadowResolution: 0
70 | shadowProjection: 1
71 | shadowCascades: 1
72 | shadowDistance: 20
73 | shadowNearPlaneOffset: 3
74 | shadowCascade2Split: 0.33333334
75 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
76 | shadowmaskMode: 0
77 | blendWeights: 2
78 | textureQuality: 0
79 | anisotropicTextures: 1
80 | antiAliasing: 0
81 | softParticles: 0
82 | softVegetation: 0
83 | realtimeReflectionProbes: 0
84 | billboardsFaceCameraPosition: 0
85 | vSyncCount: 0
86 | lodBias: 0.7
87 | maximumLODLevel: 0
88 | particleRaycastBudget: 64
89 | asyncUploadTimeSlice: 2
90 | asyncUploadBufferSize: 4
91 | resolutionScalingFixedDPIFactor: 1
92 | excludedTargetPlatforms: []
93 | - serializedVersion: 2
94 | name: Good
95 | pixelLightCount: 2
96 | shadows: 2
97 | shadowResolution: 1
98 | shadowProjection: 1
99 | shadowCascades: 2
100 | shadowDistance: 40
101 | shadowNearPlaneOffset: 3
102 | shadowCascade2Split: 0.33333334
103 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
104 | shadowmaskMode: 1
105 | blendWeights: 2
106 | textureQuality: 0
107 | anisotropicTextures: 1
108 | antiAliasing: 0
109 | softParticles: 0
110 | softVegetation: 1
111 | realtimeReflectionProbes: 1
112 | billboardsFaceCameraPosition: 1
113 | vSyncCount: 1
114 | lodBias: 1
115 | maximumLODLevel: 0
116 | particleRaycastBudget: 256
117 | asyncUploadTimeSlice: 2
118 | asyncUploadBufferSize: 4
119 | resolutionScalingFixedDPIFactor: 1
120 | excludedTargetPlatforms: []
121 | - serializedVersion: 2
122 | name: Beautiful
123 | pixelLightCount: 3
124 | shadows: 2
125 | shadowResolution: 2
126 | shadowProjection: 1
127 | shadowCascades: 2
128 | shadowDistance: 70
129 | shadowNearPlaneOffset: 3
130 | shadowCascade2Split: 0.33333334
131 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
132 | shadowmaskMode: 1
133 | blendWeights: 4
134 | textureQuality: 0
135 | anisotropicTextures: 2
136 | antiAliasing: 2
137 | softParticles: 1
138 | softVegetation: 1
139 | realtimeReflectionProbes: 1
140 | billboardsFaceCameraPosition: 1
141 | vSyncCount: 1
142 | lodBias: 1.5
143 | maximumLODLevel: 0
144 | particleRaycastBudget: 1024
145 | asyncUploadTimeSlice: 2
146 | asyncUploadBufferSize: 4
147 | resolutionScalingFixedDPIFactor: 1
148 | excludedTargetPlatforms: []
149 | - serializedVersion: 2
150 | name: Fantastic
151 | pixelLightCount: 4
152 | shadows: 2
153 | shadowResolution: 2
154 | shadowProjection: 1
155 | shadowCascades: 4
156 | shadowDistance: 150
157 | shadowNearPlaneOffset: 3
158 | shadowCascade2Split: 0.33333334
159 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
160 | shadowmaskMode: 1
161 | blendWeights: 4
162 | textureQuality: 0
163 | anisotropicTextures: 2
164 | antiAliasing: 2
165 | softParticles: 1
166 | softVegetation: 1
167 | realtimeReflectionProbes: 1
168 | billboardsFaceCameraPosition: 1
169 | vSyncCount: 1
170 | lodBias: 2
171 | maximumLODLevel: 0
172 | particleRaycastBudget: 4096
173 | asyncUploadTimeSlice: 2
174 | asyncUploadBufferSize: 4
175 | resolutionScalingFixedDPIFactor: 1
176 | excludedTargetPlatforms: []
177 | m_PerPlatformDefaultQuality:
178 | Android: 2
179 | BlackBerry: 2
180 | FlashPlayer: 3
181 | GLES Emulation: 3
182 | PS3: 3
183 | Standalone: 3
184 | Tizen: 2
185 | WP8: 3
186 | Web: 3
187 | Wii: 3
188 | Windows Store Apps: 3
189 | XBOX360: 3
190 | iPhone: 2
191 |
--------------------------------------------------------------------------------
/ExampleGame/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 |
--------------------------------------------------------------------------------
/ExampleGame/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 |
--------------------------------------------------------------------------------
/ExampleGame/ProjectSettings/UnityAdsSettings.asset:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitstadium/HockeySDK-Unity-Android/eabf07dd7786de4dfb2b9be6b04f75eb6cdb66cc/ExampleGame/ProjectSettings/UnityAdsSettings.asset
--------------------------------------------------------------------------------
/ExampleGame/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_Enabled: 0
14 | m_CaptureEditorExceptions: 1
15 | UnityPurchasingSettings:
16 | m_Enabled: 0
17 | m_TestMode: 0
18 | UnityAnalyticsSettings:
19 | m_Enabled: 0
20 | m_InitializeOnStartup: 1
21 | m_TestMode: 0
22 | m_TestEventUrl:
23 | m_TestConfigUrl:
24 | UnityAdsSettings:
25 | m_Enabled: 0
26 | m_InitializeOnStartup: 1
27 | m_TestMode: 0
28 | m_EnabledPlatforms: 4294967295
29 | m_IosGameId:
30 | m_AndroidGameId:
31 | m_GameIds: {}
32 | m_GameId:
33 | PerformanceReportingSettings:
34 | m_Enabled: 0
35 |
--------------------------------------------------------------------------------
/HockeyAppUnityPlugin/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 | buildscript {
3 | repositories {
4 | jcenter()
5 | google()
6 | }
7 | dependencies {
8 | classpath 'com.android.tools.build:gradle:3.0.1'
9 | }
10 | }
11 |
12 | allprojects {
13 | repositories {
14 | jcenter()
15 | google()
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/HockeyAppUnityPlugin/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitstadium/HockeySDK-Unity-Android/eabf07dd7786de4dfb2b9be6b04f75eb6cdb66cc/HockeyAppUnityPlugin/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/HockeyAppUnityPlugin/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Wed Nov 22 12:44:27 MSK 2017
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
7 |
--------------------------------------------------------------------------------
/HockeyAppUnityPlugin/gradlew:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | ##############################################################################
4 | ##
5 | ## Gradle start up script for UN*X
6 | ##
7 | ##############################################################################
8 |
9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
10 | DEFAULT_JVM_OPTS=""
11 |
12 | APP_NAME="Gradle"
13 | APP_BASE_NAME=`basename "$0"`
14 |
15 | # Use the maximum available, or set MAX_FD != -1 to use that value.
16 | MAX_FD="maximum"
17 |
18 | warn ( ) {
19 | echo "$*"
20 | }
21 |
22 | die ( ) {
23 | echo
24 | echo "$*"
25 | echo
26 | exit 1
27 | }
28 |
29 | # OS specific support (must be 'true' or 'false').
30 | cygwin=false
31 | msys=false
32 | darwin=false
33 | case "`uname`" in
34 | CYGWIN* )
35 | cygwin=true
36 | ;;
37 | Darwin* )
38 | darwin=true
39 | ;;
40 | MINGW* )
41 | msys=true
42 | ;;
43 | esac
44 |
45 | # Attempt to set APP_HOME
46 | # Resolve links: $0 may be a link
47 | PRG="$0"
48 | # Need this for relative symlinks.
49 | while [ -h "$PRG" ] ; do
50 | ls=`ls -ld "$PRG"`
51 | link=`expr "$ls" : '.*-> \(.*\)$'`
52 | if expr "$link" : '/.*' > /dev/null; then
53 | PRG="$link"
54 | else
55 | PRG=`dirname "$PRG"`"/$link"
56 | fi
57 | done
58 | SAVED="`pwd`"
59 | cd "`dirname \"$PRG\"`/" >/dev/null
60 | APP_HOME="`pwd -P`"
61 | cd "$SAVED" >/dev/null
62 |
63 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
64 |
65 | # Determine the Java command to use to start the JVM.
66 | if [ -n "$JAVA_HOME" ] ; then
67 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
68 | # IBM's JDK on AIX uses strange locations for the executables
69 | JAVACMD="$JAVA_HOME/jre/sh/java"
70 | else
71 | JAVACMD="$JAVA_HOME/bin/java"
72 | fi
73 | if [ ! -x "$JAVACMD" ] ; then
74 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
75 |
76 | Please set the JAVA_HOME variable in your environment to match the
77 | location of your Java installation."
78 | fi
79 | else
80 | JAVACMD="java"
81 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
82 |
83 | Please set the JAVA_HOME variable in your environment to match the
84 | location of your Java installation."
85 | fi
86 |
87 | # Increase the maximum file descriptors if we can.
88 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
89 | MAX_FD_LIMIT=`ulimit -H -n`
90 | if [ $? -eq 0 ] ; then
91 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
92 | MAX_FD="$MAX_FD_LIMIT"
93 | fi
94 | ulimit -n $MAX_FD
95 | if [ $? -ne 0 ] ; then
96 | warn "Could not set maximum file descriptor limit: $MAX_FD"
97 | fi
98 | else
99 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
100 | fi
101 | fi
102 |
103 | # For Darwin, add options to specify how the application appears in the dock
104 | if $darwin; then
105 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
106 | fi
107 |
108 | # For Cygwin, switch paths to Windows format before running java
109 | if $cygwin ; then
110 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
111 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
112 | JAVACMD=`cygpath --unix "$JAVACMD"`
113 |
114 | # We build the pattern for arguments to be converted via cygpath
115 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
116 | SEP=""
117 | for dir in $ROOTDIRSRAW ; do
118 | ROOTDIRS="$ROOTDIRS$SEP$dir"
119 | SEP="|"
120 | done
121 | OURCYGPATTERN="(^($ROOTDIRS))"
122 | # Add a user-defined pattern to the cygpath arguments
123 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
124 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
125 | fi
126 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
127 | i=0
128 | for arg in "$@" ; do
129 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
130 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
131 |
132 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
133 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
134 | else
135 | eval `echo args$i`="\"$arg\""
136 | fi
137 | i=$((i+1))
138 | done
139 | case $i in
140 | (0) set -- ;;
141 | (1) set -- "$args0" ;;
142 | (2) set -- "$args0" "$args1" ;;
143 | (3) set -- "$args0" "$args1" "$args2" ;;
144 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
145 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
146 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
147 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
148 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
149 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
150 | esac
151 | fi
152 |
153 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
154 | function splitJvmOpts() {
155 | JVM_OPTS=("$@")
156 | }
157 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
158 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
159 |
160 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
161 |
--------------------------------------------------------------------------------
/HockeyAppUnityPlugin/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
12 | set DEFAULT_JVM_OPTS=
13 |
14 | set DIRNAME=%~dp0
15 | if "%DIRNAME%" == "" set DIRNAME=.
16 | set APP_BASE_NAME=%~n0
17 | set APP_HOME=%DIRNAME%
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windowz variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 | if "%@eval[2+2]" == "4" goto 4NT_args
53 |
54 | :win9xME_args
55 | @rem Slurp the command line arguments.
56 | set CMD_LINE_ARGS=
57 | set _SKIP=2
58 |
59 | :win9xME_args_slurp
60 | if "x%~1" == "x" goto execute
61 |
62 | set CMD_LINE_ARGS=%*
63 | goto execute
64 |
65 | :4NT_args
66 | @rem Get arguments from the 4NT Shell from JP Software
67 | set CMD_LINE_ARGS=%$
68 |
69 | :execute
70 | @rem Setup the command line
71 |
72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
73 |
74 | @rem Execute Gradle
75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
76 |
77 | :end
78 | @rem End local scope for the variables with windows NT shell
79 | if "%ERRORLEVEL%"=="0" goto mainEnd
80 |
81 | :fail
82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83 | rem the _cmd.exe /c_ return code!
84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
85 | exit /b 1
86 |
87 | :mainEnd
88 | if "%OS%"=="Windows_NT" endlocal
89 |
90 | :omega
91 |
--------------------------------------------------------------------------------
/HockeyAppUnityPlugin/hockeysdk-unity/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 |
3 | android {
4 | compileSdkVersion 27
5 |
6 | defaultConfig {
7 | minSdkVersion 16
8 | targetSdkVersion 27
9 | }
10 |
11 | buildTypes {
12 | release {
13 | minifyEnabled false
14 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
15 | }
16 | }
17 | }
18 |
19 | repositories {
20 | mavenCentral()
21 | flatDir {
22 | dirs 'libs'
23 | }
24 | }
25 |
26 | dependencies {
27 | compile(name:'HockeySDK-5.2.0', ext:'aar')
28 | }
29 |
--------------------------------------------------------------------------------
/HockeyAppUnityPlugin/hockeysdk-unity/libs/HockeySDK-5.2.0.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitstadium/HockeySDK-Unity-Android/eabf07dd7786de4dfb2b9be6b04f75eb6cdb66cc/HockeyAppUnityPlugin/hockeysdk-unity/libs/HockeySDK-5.2.0.aar
--------------------------------------------------------------------------------
/HockeyAppUnityPlugin/hockeysdk-unity/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/HockeyAppUnityPlugin/hockeysdk-unity/src/main/java/net/hockeyapp/unity/HockeyUnityPlugin.java:
--------------------------------------------------------------------------------
1 | package net.hockeyapp.unity;
2 |
3 | import android.app.Activity;
4 |
5 | import net.hockeyapp.android.Constants;
6 | import net.hockeyapp.android.CrashManager;
7 | import net.hockeyapp.android.CrashManagerListener;
8 | import net.hockeyapp.android.FeedbackManager;
9 | import net.hockeyapp.android.LoginManager;
10 | import net.hockeyapp.android.UpdateManager;
11 | import net.hockeyapp.android.metrics.MetricsManager;
12 | import net.hockeyapp.android.utils.HockeyLog;
13 |
14 | import java.lang.reflect.Method;
15 | import java.util.Map;
16 | import java.util.concurrent.ExecutionException;
17 |
18 | @SuppressWarnings({"unused", "WeakerAccess"})
19 | public class HockeyUnityPlugin {
20 |
21 | //region CONFIGURE AND START MODULES
22 | //---------------------------------------------------------------------------------------
23 |
24 | /**
25 | * Enables crash reporting, feedback, user metrics, login, and app updates.
26 | *
27 | * @param currentActivity the context needed for starting this manager.
28 | * @param serverURL the URL of the HockeyApp instance.
29 | * @param appID the app identifier of your app.
30 | * @param secret the app secret of your app used for authentication.
31 | * @param loginMode the login mode used for authentication.
32 | * @param updateManagerEnabled if true, the update manager is enabled.
33 | * @param userMetricsEnabled if true, the metrics manager is enabled.
34 | * @param autoSendEnabled if true, crashes will be sent without presenting a confirmation dialog.
35 | */
36 | public static void startHockeyAppManager(final Activity currentActivity, final String serverURL,
37 | final String appID, final String secret, final int loginMode,
38 | final boolean updateManagerEnabled, final boolean userMetricsEnabled, final boolean autoSendEnabled) {
39 | currentActivity.runOnUiThread(new Runnable() {
40 | @Override
41 | public void run() {
42 | if (updateManagerEnabled) {
43 | registerUpdateManager(currentActivity, serverURL, appID);
44 | }
45 | if (userMetricsEnabled) {
46 | registerMetricsManager(currentActivity, appID);
47 | }
48 | registerCrashManager(currentActivity, serverURL, appID, autoSendEnabled);
49 | registerFeedbackManager(currentActivity, serverURL, appID);
50 | registerLoginManager(currentActivity, serverURL, appID, secret, loginMode);
51 | }
52 | });
53 | }
54 |
55 | /**
56 | * Configures and starts the UpdateManager module.
57 | *
58 | * @param currentActivity the context needed for starting this manager.
59 | * @param serverURL the URL of the HockeyApp instance.
60 | * @param appID the app identifier of your app.
61 | */
62 | public static void registerUpdateManager(final Activity currentActivity, final String serverURL, final String appID) {
63 | currentActivity.runOnUiThread(new Runnable() {
64 | @Override
65 | public void run() {
66 | UpdateManager.register(currentActivity, serverURL, appID, null, true);
67 | }
68 | });
69 | }
70 |
71 | /**
72 | * Configures and starts the crash reporting module.
73 | *
74 | * @param currentActivity the context needed for starting this manager.
75 | * @param serverURL the URL of the HockeyApp instance.
76 | * @param appID the app identifier of your app.
77 | * @param autoSendEnabled if true, crashes will be sent without presenting a confirmation dialog.
78 | */
79 | public static void registerCrashManager(final Activity currentActivity, final String serverURL,
80 | final String appID, final boolean autoSendEnabled) {
81 | currentActivity.runOnUiThread(new Runnable() {
82 | @Override
83 | public void run() {
84 | CrashManager.register(currentActivity, serverURL, appID,
85 | new CrashManagerListener() {
86 | public boolean shouldAutoUploadCrashes() {
87 | return autoSendEnabled;
88 | }
89 | });
90 | }
91 | });
92 | }
93 |
94 | /**
95 | * Configures the login module.
96 | *
97 | * @param currentActivity the context needed for starting this manager.
98 | * @param serverURL the URL of the HockeyApp instance.
99 | * @param appID the app identifier of your app.
100 | * @param secret the URL of the HockeyApp instance.
101 | * @param loginMode the app identifier of your app.
102 | */
103 | public static void registerLoginManager(final Activity currentActivity, final String serverURL,
104 | final String appID, final String secret, final int loginMode) {
105 | currentActivity.runOnUiThread(new Runnable() {
106 | @Override
107 | public void run() {
108 | LoginManager.register(currentActivity, appID, secret, serverURL, loginMode, currentActivity.getClass());
109 | }
110 | });
111 | }
112 |
113 | /**
114 | * Starts the login module.
115 | *
116 | * @param currentActivity the context needed for starting this manager.
117 | */
118 | public static void performAuthentication(final Activity currentActivity) {
119 | currentActivity.runOnUiThread(new Runnable() {
120 | @Override
121 | public void run() {
122 | LoginManager.verifyLogin(currentActivity, currentActivity.getIntent());
123 | }
124 | });
125 | }
126 |
127 | /**
128 | * Configures and starts the feedback module.
129 | *
130 | * @param currentActivity the context needed for starting this manager.
131 | * @param serverURL the URL of the HockeyApp instance.
132 | * @param appID the app identifier of your app.
133 | */
134 | public static void registerFeedbackManager(final Activity currentActivity, final String serverURL, final String appID) {
135 | currentActivity.runOnUiThread(new Runnable() {
136 | @Override
137 | public void run() {
138 | FeedbackManager.register(currentActivity, serverURL, appID, null);
139 | }
140 | });
141 | }
142 |
143 | /**
144 | * Configures and starts the metrics module.
145 | *
146 | * @param currentActivity the context needed for starting this manager.
147 | * @param appID the app identifier of your app.
148 | */
149 | public static void registerMetricsManager(final Activity currentActivity, final String appID) {
150 | currentActivity.runOnUiThread(new Runnable() {
151 | @Override
152 | public void run() {
153 | MetricsManager.register(currentActivity.getApplication(), appID);
154 |
155 | // Unity's awake calls after android activity shown.
156 | // We force start session to avoid missing it.
157 | try {
158 | Method getInstance = MetricsManager.class.getDeclaredMethod("getInstance");
159 | getInstance.setAccessible(true);
160 | MetricsManager instance = (MetricsManager) getInstance.invoke(null);
161 | Method updateSession = MetricsManager.class.getDeclaredMethod("updateSession");
162 | updateSession.setAccessible(true);
163 | updateSession.invoke(instance);
164 | } catch (Throwable ignored) {
165 | }
166 | }
167 | });
168 | }
169 |
170 | /**
171 | * Enables crash reporting, feedback, and app updates. If you don't want to enable all features
172 | * or if you need more options to configure them, use specific register methods instead.
173 | *
174 | * @param currentActivity the context needed for starting this manager.
175 | * @param serverURL the URL of the HockeyApp instance.
176 | * @param appID the app identifier of your app.
177 | */
178 | public static void registerAll(final Activity currentActivity, final String serverURL,
179 | final String appID) {
180 | currentActivity.runOnUiThread(new Runnable() {
181 | @Override
182 | public void run() {
183 | registerUpdateManager(currentActivity, serverURL, appID);
184 | registerCrashManager(currentActivity, serverURL, appID, true);
185 | registerFeedbackManager(currentActivity, serverURL, appID);
186 | registerMetricsManager(currentActivity, appID);
187 | }
188 | });
189 | }
190 | //---------------------------------------------------------------------------------------
191 | //endregion
192 |
193 | //region METADATA
194 | //---------------------------------------------------------------------------------------
195 |
196 | /**
197 | * @return the version of your app.
198 | */
199 | public static String getVersionCode() {
200 | return Constants.APP_VERSION;
201 | }
202 |
203 | /**
204 | * @return the version name of your app
205 | */
206 | public static String getVersionName() {
207 | return Constants.APP_VERSION_NAME;
208 | }
209 |
210 | /**
211 | * @return the name of the base HockeyApp SDK.
212 | */
213 | public static String getSdkName() {
214 | return Constants.SDK_NAME;
215 | }
216 |
217 | /**
218 | * @return the device's model manufacturer name.
219 | */
220 | public static String getManufacturer() {
221 | return Constants.PHONE_MANUFACTURER;
222 | }
223 |
224 | /**
225 | * @return the device's model name.
226 | */
227 | public static String getModel() {
228 | return Constants.PHONE_MODEL;
229 | }
230 |
231 | /**
232 | * @return the unique identifier for device, not dependent on package or device.
233 | */
234 | public static String getDeviceIdentifier() {
235 | try {
236 | return Constants.getDeviceIdentifier().get();
237 | } catch (InterruptedException | ExecutionException e) {
238 | HockeyLog.error("Couldn't get device identifier", e);
239 | return null;
240 | }
241 | }
242 | //---------------------------------------------------------------------------------------
243 | //endregion
244 |
245 | //region METRICS MANAGER
246 | //---------------------------------------------------------------------------------------
247 |
248 | /**
249 | * This method allows to track an event that happened in your app.
250 | * Remember to choose meaningful event names to have the best experience when diagnosing your app
251 | * in the web portal.
252 | *
253 | * @param eventName the name of the event, which should be tracked.
254 | */
255 | public static void trackEvent(final String eventName) {
256 | MetricsManager.trackEvent(eventName);
257 | }
258 |
259 | /**
260 | * This method allows to track an event that happened in your app.
261 | * Remember to choose meaningful event names to have the best experience when diagnosing your app
262 | * in the web portal.
263 | *
264 | * @param eventName the name of the event, which should be tracked.
265 | * @param properties key value pairs with additional info about the event.
266 | */
267 | public static void trackEvent(final String eventName, final Map properties) {
268 | MetricsManager.trackEvent(eventName, properties);
269 | }
270 |
271 | /**
272 | * This method allows to track an event that happened in your app.
273 | * Remember to choose meaningful event names to have the best experience when diagnosing your app
274 | * in the web portal.
275 | *
276 | * @param eventName the name of the event, which should be tracked.
277 | * @param properties key value pairs with additional info about the event.
278 | * @param measurements key value pairs, which contain custom metrics.
279 | */
280 | public static void trackEvent(final String eventName, final Map properties, final Map measurements) {
281 | MetricsManager.trackEvent(eventName, properties, measurements);
282 | }
283 | //---------------------------------------------------------------------------------------
284 | //endregion
285 |
286 | //region FEEDBACK MANAGER
287 | //---------------------------------------------------------------------------------------
288 |
289 | /**
290 | * Shows a feedback form. This should be called after {@link HockeyUnityPlugin#registerFeedbackManager(Activity, String, String)}.
291 | *
292 | * @param currentActivity the context needed for starting this manager.
293 | */
294 | public static void startFeedbackForm(final Activity currentActivity) {
295 | currentActivity.runOnUiThread(new Runnable() {
296 | @Override
297 | public void run() {
298 | FeedbackManager.showFeedbackActivity(currentActivity);
299 | }
300 | });
301 | }
302 | //---------------------------------------------------------------------------------------
303 | //endregion
304 |
305 | //region UPDATE MANAGER
306 | //---------------------------------------------------------------------------------------
307 |
308 | /**
309 | * Checks for version update and presents update alert if newer version is available.
310 | *
311 | * @param currentActivity the context needed to show update alert.
312 | * @param serverURL the URL of the HockeyApp instance.
313 | * @param appID the app identifier of your app.
314 | */
315 | public static void checkForUpdate(final Activity currentActivity, final String serverURL, final String appID) {
316 | UpdateManager.unregister();
317 | registerUpdateManager(currentActivity, serverURL, appID);
318 | }
319 | //---------------------------------------------------------------------------------------
320 | //endregion
321 | }
322 |
--------------------------------------------------------------------------------
/HockeyAppUnityPlugin/hockeysdk-unity/src/main/res/drawable-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitstadium/HockeySDK-Unity-Android/eabf07dd7786de4dfb2b9be6b04f75eb6cdb66cc/HockeyAppUnityPlugin/hockeysdk-unity/src/main/res/drawable-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/HockeyAppUnityPlugin/hockeysdk-unity/src/main/res/drawable-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitstadium/HockeySDK-Unity-Android/eabf07dd7786de4dfb2b9be6b04f75eb6cdb66cc/HockeyAppUnityPlugin/hockeysdk-unity/src/main/res/drawable-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/HockeyAppUnityPlugin/hockeysdk-unity/src/main/res/drawable-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitstadium/HockeySDK-Unity-Android/eabf07dd7786de4dfb2b9be6b04f75eb6cdb66cc/HockeyAppUnityPlugin/hockeysdk-unity/src/main/res/drawable-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/HockeyAppUnityPlugin/hockeysdk-unity/src/main/res/drawable-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitstadium/HockeySDK-Unity-Android/eabf07dd7786de4dfb2b9be6b04f75eb6cdb66cc/HockeyAppUnityPlugin/hockeysdk-unity/src/main/res/drawable-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/HockeyAppUnityPlugin/hockeysdk-unity/src/main/res/layout/activity_plugin.xml:
--------------------------------------------------------------------------------
1 |
10 |
11 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/HockeyAppUnityPlugin/hockeysdk-unity/src/main/res/menu/plugin.xml:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/HockeyAppUnityPlugin/hockeysdk-unity/src/main/res/values-sw600dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/HockeyAppUnityPlugin/hockeysdk-unity/src/main/res/values-sw720dp-land/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 | 128dp
8 |
9 |
10 |
--------------------------------------------------------------------------------
/HockeyAppUnityPlugin/hockeysdk-unity/src/main/res/values-v11/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/HockeyAppUnityPlugin/hockeysdk-unity/src/main/res/values-v14/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/HockeyAppUnityPlugin/hockeysdk-unity/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 16dp
5 | 16dp
6 |
7 |
8 |
--------------------------------------------------------------------------------
/HockeyAppUnityPlugin/hockeysdk-unity/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | HockeyAppUnity
5 | Settings
6 | Hello world!
7 |
8 |
9 |
--------------------------------------------------------------------------------
/HockeyAppUnityPlugin/hockeysdk-unity/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
14 |
15 |
16 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/HockeyAppUnityPlugin/import-summary.txt:
--------------------------------------------------------------------------------
1 | ECLIPSE ANDROID PROJECT IMPORT SUMMARY
2 | ======================================
3 |
4 | Ignored Files:
5 | --------------
6 | The following files were *not* copied into the new Gradle project; you
7 | should evaluate whether these are still needed in your project and if
8 | so manually move them:
9 |
10 | * ic_launcher-web.png
11 | * proguard-project.txt
12 |
13 | Moved Files:
14 | ------------
15 | Android Gradle projects use a different directory structure than ADT
16 | Eclipse projects. Here's how the projects were restructured:
17 |
18 | * AndroidManifest.xml => app/src/main/AndroidManifest.xml
19 | * libs/HockeySDK-3.6.2.jar => app/libs/HockeySDK-3.6.2.jar
20 | * res/ => app/src/main/res/
21 | * src/ => app/src/main/java/
22 |
23 | Next Steps:
24 | -----------
25 | You can now build the project. The Gradle project needs network
26 | connectivity to download dependencies.
27 |
28 | Bugs:
29 | -----
30 | If for some reason your project does not build, and you determine that
31 | it is due to a bug or limitation of the Eclipse to Gradle importer,
32 | please file a bug at http://b.android.com with category
33 | Component-Tools.
34 |
35 | (This import summary is for your information only, and can be deleted
36 | after import once you are satisfied with the results.)
37 |
--------------------------------------------------------------------------------
/HockeyAppUnityPlugin/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':hockeysdk-unity'
2 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | **********************************************************************
2 | LICENSE INFORMATION (I/III)
3 | **********************************************************************
4 |
5 | The Hockey SDK is provided under the following license:
6 |
7 | Copyright (c) Microsoft Corporation. All rights reserved.
8 |
9 | Permission is hereby granted, free of charge, to any person
10 | obtaining a copy of this software and associated documentation
11 | files (the "Software"), to deal in the Software without
12 | restriction, including without limitation the rights to use,
13 | copy, modify, merge, publish, distribute, sublicense, and/or sell
14 | copies of the Software, and to permit persons to whom the
15 | Software is furnished to do so, subject to the following
16 | conditions:
17 |
18 | The above copyright notice and this permission notice shall be
19 | included in all copies or substantial portions of the Software.
20 |
21 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
23 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
25 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
26 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
27 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
28 | OTHER DEALINGS IN THE SOFTWARE.
29 |
30 | **********************************************************************
31 | LICENSE INFORMATION (II/III)
32 | **********************************************************************
33 |
34 | The following classes are based on code from the project
35 | android-remote-stacktrace:
36 |
37 | + Constants
38 | + CrashManager
39 | + ExceptionHandler
40 |
41 | Source: http://code.google.com/p/android-remote-stacktrace/
42 |
43 | The original license of these classes is:
44 |
45 | Copyright (c) 2009 nullwire aps
46 |
47 | Permission is hereby granted, free of charge, to any person
48 | obtaining a copy of this software and associated documentation
49 | files (the "Software"), to deal in the Software without
50 | restriction, including without limitation the rights to use,
51 | copy, modify, merge, publish, distribute, sublicense, and/or sell
52 | copies of the Software, and to permit persons to whom the
53 | Software is furnished to do so, subject to the following
54 | conditions:
55 |
56 | The above copyright notice and this permission notice shall be
57 | included in all copies or substantial portions of the Software.
58 |
59 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
60 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
61 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
62 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
63 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
64 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
65 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
66 | OTHER DEALINGS IN THE SOFTWARE.
67 |
68 | Contributors:
69 | + Mads Kristiansen, mads.kristiansen@nullwire.com
70 | + Glen Humphrey
71 | + Evan Charlton
72 | + Peter Hewitt
73 |
74 | **********************************************************************
75 | LICENSE INFORMATION (III/III)
76 | **********************************************************************
77 |
78 | The following class is based on code from the
79 | Android Open Source Project
80 |
81 | + Base64
82 |
83 | Copyright (C) 2010 The Android Open Source Project
84 |
85 | Licensed under the Apache License, Version 2.0 (the "License");
86 | you may not use this file except in compliance with the License.
87 | You may obtain a copy of the License at
88 |
89 | http://www.apache.org/licenses/LICENSE-2.0
90 |
91 | Unless required by applicable law or agreed to in writing, software
92 | distributed under the License is distributed on an "AS IS" BASIS,
93 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
94 | See the License for the specific language governing permissions and
95 | limitations under the License.
--------------------------------------------------------------------------------
/Plugins/HockeyAppUnityAndroid/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Plugins/HockeyAppUnityAndroid/HockeyAppUnity-Scripts/HockeyAppAndroid.cs:
--------------------------------------------------------------------------------
1 | /*
2 | * Version: 5.2.0
3 | */
4 |
5 | using UnityEngine;
6 | using System.Collections;
7 | using System.Collections.Generic;
8 | using System;
9 | using System.IO;
10 | using System.Runtime.InteropServices;
11 | #if UNITY_2017_1_OR_NEWER
12 | using UnityEngine.Networking;
13 | #endif
14 |
15 | public class HockeyAppAndroid : MonoBehaviour
16 | {
17 | private const string JAVA_UNITYPLAYER_CLASS = "com.unity3d.player.UnityPlayer";
18 | private const string JAVA_HOCKEYUNITYPLUGIN_CLASS = "net.hockeyapp.unity.HockeyUnityPlugin";
19 |
20 | protected const string HOCKEYAPP_BASEURL = "https://rink.hockeyapp.net/";
21 | protected const string HOCKEYAPP_CRASHESPATH = "api/2/apps/[APPID]/crashes/upload";
22 | protected const int MAX_CHARS = 199800;
23 | protected const string LOG_FILE_DIR = "/logs/";
24 | private const string SERVER_URL_PLACEHOLDER = "your-custom-server-url";
25 | private static HockeyAppAndroid instance;
26 |
27 | public enum AuthenticatorType
28 | {
29 | Anonymous,
30 | HockeyAppEmail,
31 | HockeyAppUser,
32 | Validate
33 | }
34 |
35 | [Header("HockeyApp Setup")]
36 | public string appID = "your-hockey-app-id";
37 | public string packageID = "your-package-identifier";
38 | public string serverURL = SERVER_URL_PLACEHOLDER;
39 |
40 | [Header("Authentication")]
41 | public AuthenticatorType authenticatorType;
42 | public string secret = "your-hockey-app-secret";
43 |
44 | [Header("Crashes & Exceptions")]
45 | public bool autoUploadCrashes = false;
46 | public bool exceptionLogging = true;
47 |
48 | [Header("Metrics")]
49 | public bool userMetrics = true;
50 |
51 | [Header("Version Updates")]
52 | public bool updateAlert = true;
53 |
54 | void Awake ()
55 | {
56 | #if (UNITY_ANDROID && !UNITY_EDITOR)
57 | if (instance != null) {
58 | Destroy(gameObject);
59 | return;
60 | }
61 |
62 | DontDestroyOnLoad(gameObject);
63 | CreateLogDirectory();
64 |
65 | if(exceptionLogging == true && IsConnected() == true) {
66 | List logFileDirs = GetLogFiles();
67 | if(logFileDirs.Count > 0) {
68 | Debug.Log("Found files: " + logFileDirs.Count);
69 | StartCoroutine(SendLogs(logFileDirs));
70 | }
71 | }
72 | serverURL = GetBaseURL();
73 | int authType = (int)authenticatorType;
74 | StartCrashManager(serverURL, appID, secret, authType, updateAlert, userMetrics, autoUploadCrashes);
75 | #endif
76 | }
77 |
78 | void OnEnable ()
79 | {
80 |
81 | #if (UNITY_ANDROID && !UNITY_EDITOR)
82 | if(exceptionLogging == true) {
83 | System.AppDomain.CurrentDomain.UnhandledException += OnHandleUnresolvedException;
84 | Application.logMessageReceived += OnHandleLogCallback;
85 | }
86 | #endif
87 | }
88 |
89 | void OnDisable ()
90 | {
91 | #if (UNITY_ANDROID && !UNITY_EDITOR)
92 | if (exceptionLogging == true) {
93 | System.AppDomain.CurrentDomain.UnhandledException -= OnHandleUnresolvedException;
94 | Application.logMessageReceived -= OnHandleLogCallback;
95 | }
96 | #endif
97 | }
98 |
99 | void OnApplicationPause(bool pause)
100 | {
101 | if (!pause) {
102 | PerformAuthentication();
103 | }
104 | }
105 |
106 | ///
107 | /// Start HockeyApp for Unity.
108 | ///
109 | /// The url of the endpoint used for sending data.
110 | /// The app specific Identifier provided by HockeyApp.
111 | /// The app secret used for authenticating users.
112 | /// Auth type used for authentication: Anonymous, email, email& password, or check if user was explicitly added to use this app.
113 | /// True, if user should be notified about newer versions of the app.
114 | /// True, app should send user and session information.
115 | /// True, if crashes should be sent without asking the user for approval.
116 | protected void StartCrashManager (string urlString, string appID, string secret, int authType, bool updateManagerEnabled, bool userMetricsEnabled, bool autoSendEnabled)
117 | {
118 | #if (UNITY_ANDROID && !UNITY_EDITOR)
119 | using (var unityPlayer = new AndroidJavaClass(JAVA_UNITYPLAYER_CLASS))
120 | using (var pluginClass = new AndroidJavaClass(JAVA_HOCKEYUNITYPLUGIN_CLASS))
121 | {
122 | var currentActivity = unityPlayer.GetStatic("currentActivity");
123 | pluginClass.CallStatic("startHockeyAppManager", currentActivity, urlString, appID, secret, authType, updateManagerEnabled, userMetricsEnabled, autoSendEnabled);
124 | }
125 | instance = this;
126 | #endif
127 | }
128 |
129 | ///
130 | /// This method allows to track an event that happened in your app.
131 | /// Remember to choose meaningful event names to have the best experience when diagnosing your app
132 | /// in the web portal.
133 | ///
134 | /// The name of the event, which should be tracked.
135 | public static void TrackEvent(string eventName)
136 | {
137 | #if (UNITY_ANDROID && !UNITY_EDITOR)
138 | if (instance != null)
139 | {
140 | using (var pluginClass = new AndroidJavaClass(JAVA_HOCKEYUNITYPLUGIN_CLASS))
141 | {
142 | pluginClass.CallStatic("trackEvent", eventName);
143 | }
144 | }
145 | else
146 | {
147 | Debug.Log("Failed to track event. SDK has not been initialized, yet.");
148 | }
149 | #endif
150 | }
151 |
152 | ///
153 | /// This method allows to track an event that happened in your app.
154 | /// Remember to choose meaningful event names to have the best experience when diagnosing your app
155 | /// in the web portal.
156 | ///
157 | /// The name of the event, which should be tracked.
158 | /// Key value pairs, which contain custom metrics.
159 | public static void TrackEvent(string eventName, IDictionary properties)
160 | {
161 | #if (UNITY_ANDROID && !UNITY_EDITOR)
162 | if (instance != null)
163 | {
164 | using (var pluginClass = new AndroidJavaClass(JAVA_HOCKEYUNITYPLUGIN_CLASS))
165 | {
166 | pluginClass.CallStatic("trackEvent", eventName,
167 | DictainaryToJavaMap(properties, "java.lang.String", "java.lang.String"));
168 | }
169 | }
170 | else
171 | {
172 | Debug.Log("Failed to track event. SDK has not been initialized, yet.");
173 | }
174 | #endif
175 | }
176 |
177 | ///
178 | /// This method allows to track an event that happened in your app.
179 | /// Remember to choose meaningful event names to have the best experience when diagnosing your app
180 | /// in the web portal.
181 | ///
182 | /// The name of the event, which should be tracked.
183 | /// Key value pairs with additional info about the event.
184 | /// Key value pairs, which contain custom metrics.
185 | public static void TrackEvent(string eventName, IDictionary properties, IDictionary measurements)
186 | {
187 | #if (UNITY_ANDROID && !UNITY_EDITOR)
188 | if (instance != null)
189 | {
190 | using (var pluginClass = new AndroidJavaClass(JAVA_HOCKEYUNITYPLUGIN_CLASS))
191 | {
192 | pluginClass.CallStatic("trackEvent", eventName,
193 | DictainaryToJavaMap(properties, "java.lang.String", "java.lang.String"),
194 | DictainaryToJavaMap(measurements, "java.lang.String", "java.lang.Double"));
195 | }
196 | }
197 | else
198 | {
199 | Debug.Log("Failed to track event. SDK has not been initialized, yet.");
200 | }
201 | #endif
202 | }
203 |
204 | ///
205 | /// Performs user authentication.
206 | ///
207 | public static void PerformAuthentication()
208 | {
209 | #if (UNITY_ANDROID && !UNITY_EDITOR)
210 | using (var unityPlayer = new AndroidJavaClass(JAVA_UNITYPLAYER_CLASS))
211 | using (var pluginClass = new AndroidJavaClass(JAVA_HOCKEYUNITYPLUGIN_CLASS))
212 | {
213 | var currentActivity = unityPlayer.GetStatic("currentActivity");
214 | pluginClass.CallStatic("performAuthentication", currentActivity);
215 | }
216 | #endif
217 | }
218 |
219 | ///
220 | /// Check for version update and present alert if newer version is available.
221 | ///
222 | public static void CheckForUpdate()
223 | {
224 | #if (UNITY_ANDROID && !UNITY_EDITOR)
225 | if (instance != null)
226 | {
227 | using (var unityPlayer = new AndroidJavaClass(JAVA_UNITYPLAYER_CLASS))
228 | using (var pluginClass = new AndroidJavaClass(JAVA_HOCKEYUNITYPLUGIN_CLASS))
229 | {
230 | var currentActivity = unityPlayer.GetStatic("currentActivity");
231 | pluginClass.CallStatic("checkForUpdate", currentActivity, instance.serverURL, instance.appID);
232 | }
233 | }
234 | else
235 | {
236 | Debug.Log("Failed to check for update. SDK has not been initialized, yet.");
237 | }
238 | #endif
239 | }
240 |
241 | ///
242 | /// Display a feedback form.
243 | ///
244 | public static void ShowFeedbackForm()
245 | {
246 | #if (UNITY_ANDROID && !UNITY_EDITOR)
247 | if (instance != null)
248 | {
249 | using (var unityPlayer = new AndroidJavaClass(JAVA_UNITYPLAYER_CLASS))
250 | using (var pluginClass = new AndroidJavaClass(JAVA_HOCKEYUNITYPLUGIN_CLASS))
251 | {
252 | var currentActivity = unityPlayer.GetStatic("currentActivity");
253 | pluginClass.CallStatic("startFeedbackForm", currentActivity);
254 | }
255 | }
256 | else
257 | {
258 | Debug.Log("Failed to present feedback form. SDK has not been initialized, yet.");
259 | }
260 | #endif
261 | }
262 |
263 | ///
264 | /// Collect all header fields for the custom exception report.
265 | ///
266 | /// A list which contains the header fields for a log file.
267 | protected virtual List GetLogHeaders ()
268 | {
269 | List list = new List ();
270 |
271 | #if (UNITY_ANDROID && !UNITY_EDITOR)
272 | using (var pluginClass = new AndroidJavaClass(JAVA_HOCKEYUNITYPLUGIN_CLASS))
273 | {
274 | var versionCode = pluginClass.CallStatic("getVersionCode");
275 | var versionName = pluginClass.CallStatic("getVersionName");
276 | var manufacturer = pluginClass.CallStatic("getManufacturer");
277 | var model = pluginClass.CallStatic("getModel");
278 | var deviceIdentifier = pluginClass.CallStatic("getDeviceIdentifier");
279 |
280 | list.Add("Package: " + packageID);
281 | list.Add("Version Code: " + versionCode);
282 | list.Add("Version Name: " + versionName);
283 |
284 | var versionComponents = SystemInfo.operatingSystem.Split('/');
285 | var osVersion = "Android: " + versionComponents[0].Replace("Android OS ", "");
286 | list.Add (osVersion);
287 |
288 | list.Add("Manufacturer: " + manufacturer);
289 | list.Add("Model: " + model);
290 | list.Add("CrashReporter Key: " + deviceIdentifier);
291 | list.Add("Date: " + DateTime.UtcNow.ToString("ddd MMM dd HH:mm:ss {}zzzz yyyy").Replace("{}", "GMT"));
292 | }
293 | #endif
294 |
295 | return list;
296 | }
297 |
298 | ///
299 | /// Create the form data for a single exception report.
300 | ///
301 | /// A string that contains information about the exception.
302 | /// The form data for the current crash report.
303 | protected virtual WWWForm CreateForm (string log)
304 | {
305 | WWWForm form = new WWWForm ();
306 |
307 | #if (UNITY_ANDROID && !UNITY_EDITOR)
308 | byte[] bytes = null;
309 | using(FileStream fs = File.OpenRead(log)){
310 |
311 | if (fs.Length > MAX_CHARS) {
312 | string resizedLog = null;
313 |
314 | using(StreamReader reader = new StreamReader(fs)) {
315 |
316 | reader.BaseStream.Seek( fs.Length - MAX_CHARS, SeekOrigin.Begin );
317 | resizedLog = reader.ReadToEnd();
318 | }
319 |
320 | List logHeaders = GetLogHeaders();
321 | string logHeader = "";
322 |
323 | foreach (string header in logHeaders) {
324 | logHeader += header + "\n";
325 | }
326 | resizedLog = logHeader + "\n" + "[...]" + resizedLog;
327 |
328 | try {
329 | bytes = System.Text.Encoding.Default.GetBytes(resizedLog);
330 | } catch(ArgumentException ae) {
331 | if (Debug.isDebugBuild) {
332 | Debug.Log("Failed to read bytes of log file: " + ae);
333 | }
334 | }
335 | } else {
336 | try {
337 | bytes = File.ReadAllBytes(log);
338 | } catch(SystemException se) {
339 | if (Debug.isDebugBuild) {
340 | Debug.Log("Failed to read bytes of log file: " + se);
341 | }
342 | }
343 | }
344 | }
345 |
346 | if(bytes != null) {
347 | form.AddBinaryData("log", bytes, log, "text/plain");
348 | }
349 |
350 | #endif
351 |
352 | return form;
353 | }
354 |
355 | ///
356 | /// Create the log directory if needed.
357 | ///
358 | protected virtual void CreateLogDirectory ()
359 | {
360 | #if (UNITY_ANDROID && !UNITY_EDITOR)
361 | string logsDirectoryPath = Application.persistentDataPath + LOG_FILE_DIR;
362 |
363 | try {
364 | Directory.CreateDirectory (logsDirectoryPath);
365 | } catch (Exception e) {
366 | if (Debug.isDebugBuild) Debug.Log ("Failed to create log directory at " + logsDirectoryPath + ": " + e);
367 | }
368 | #endif
369 | }
370 |
371 | ///
372 | /// Get a list of all existing exception reports.
373 | ///
374 | /// A list which contains the filenames of the log files.
375 | protected virtual List GetLogFiles ()
376 | {
377 | List logs = new List ();
378 |
379 | #if (UNITY_ANDROID && !UNITY_EDITOR)
380 | string logsDirectoryPath = Application.persistentDataPath + LOG_FILE_DIR;
381 |
382 | try {
383 | DirectoryInfo info = new DirectoryInfo(logsDirectoryPath);
384 | FileInfo[] files = info.GetFiles();
385 |
386 | if (files.Length > 0) {
387 | foreach (FileInfo file in files) {
388 | if (file.Extension == ".log") {
389 | logs.Add(file.FullName);
390 | } else {
391 | File.Delete(file.FullName);
392 | }
393 | }
394 | }
395 | } catch(Exception e) {
396 | if (Debug.isDebugBuild) {
397 | Debug.Log("Failed to write exception log to file: " + e);
398 | }
399 | }
400 | #endif
401 |
402 | return logs;
403 | }
404 |
405 | ///
406 | /// Upload existing reports to HockeyApp and delete delete them locally.
407 | ///
408 | protected virtual IEnumerator SendLogs (List logs)
409 | {
410 | string crashPath = HOCKEYAPP_CRASHESPATH;
411 | string url = GetBaseURL () + crashPath.Replace ("[APPID]", appID);
412 |
413 | #if (UNITY_ANDROID && !UNITY_EDITOR)
414 | using (var pluginClass = new AndroidJavaClass(JAVA_HOCKEYUNITYPLUGIN_CLASS))
415 | {
416 | var sdkName = pluginClass.CallStatic("getSdkName");
417 | if (sdkName != null) {
418 | #if UNITY_2017_1_OR_NEWER
419 | url += "?sdk=" + UnityWebRequest.EscapeURL(sdkName);
420 | #else
421 | url += "?sdk=" + WWW.EscapeURL(sdkName);
422 | #endif
423 |
424 | }
425 | }
426 | #endif
427 |
428 | foreach (string log in logs) {
429 | WWWForm postForm = CreateForm (log);
430 | string lContent = postForm.headers ["Content-Type"].ToString ();
431 | lContent = lContent.Replace ("\"", "");
432 |
433 | #if UNITY_2017_1_OR_NEWER
434 | UnityWebRequest postRequest = new UnityWebRequest(url, "POST");
435 | postRequest.SetRequestHeader("Content-Type", lContent);
436 | postRequest.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
437 | postRequest.uploadHandler = (UploadHandler)new UploadHandlerRaw(postForm.data);
438 |
439 | yield return postRequest.SendWebRequest();
440 |
441 | if (!postRequest.isNetworkError) {
442 | #else
443 | Dictionary headers = new Dictionary();
444 | headers.Add("Content-Type", lContent);
445 | WWW www = new WWW(url, postForm.data, headers);
446 | yield return www;
447 |
448 | if (String.IsNullOrEmpty(www.error)) {
449 | #endif
450 | try {
451 | File.Delete (log);
452 | } catch (Exception e) {
453 | if (Debug.isDebugBuild)
454 | Debug.Log ("Failed to delete exception log: " + e);
455 | }
456 | } else {
457 | if (Debug.isDebugBuild)
458 | #if UNITY_2017_1_OR_NEWER
459 | Debug.Log ("Crash sending error: " + postRequest.error);
460 | #else
461 | Debug.Log("Crash sending error: " + www.error);
462 | #endif
463 | }
464 | }
465 | }
466 |
467 | ///
468 | /// Write a single exception report to disk.
469 | ///
470 | /// A string that contains the reason for the exception.
471 | /// The stacktrace for the exception.
472 | protected virtual void WriteLogToDisk (string logString, string stackTrace)
473 | {
474 | #if (UNITY_ANDROID && !UNITY_EDITOR)
475 | string logSession = DateTime.Now.ToString("yyyy-MM-dd-HH_mm_ss_fff");
476 | string log = logString.Replace("\n", " ");
477 | string[]stacktraceLines = stackTrace.Split('\n');
478 |
479 | log = "\n" + log + "\n";
480 | foreach (string line in stacktraceLines) {
481 | if(line.Length > 0) {
482 | log +=" at " + line + "\n";
483 | }
484 | }
485 |
486 | List logHeaders = GetLogHeaders();
487 | using (StreamWriter file = new StreamWriter(Application.persistentDataPath + LOG_FILE_DIR + "LogFile_" + logSession + ".log", true)) {
488 | foreach (string header in logHeaders) {
489 | file.WriteLine(header);
490 | }
491 | file.WriteLine(log);
492 | }
493 | #endif
494 | }
495 |
496 | ///
497 | /// Get the base url used for custom exception reports.
498 | ///
499 | /// A formatted base url.
500 | protected virtual string GetBaseURL ()
501 | {
502 | string baseURL = "";
503 |
504 | #if (UNITY_ANDROID && !UNITY_EDITOR)
505 |
506 | string urlString = serverURL.Trim();
507 | if(urlString.Length > 0 && urlString != SERVER_URL_PLACEHOLDER) {
508 | baseURL = urlString;
509 |
510 | if(baseURL[baseURL.Length -1].Equals("/") != true) {
511 | baseURL += "/";
512 | }
513 | } else {
514 | baseURL = HOCKEYAPP_BASEURL;
515 | }
516 | #endif
517 |
518 | return baseURL;
519 | }
520 |
521 | ///
522 | /// Checks whether internet is reachable
523 | ///
524 | protected virtual bool IsConnected ()
525 | {
526 | bool connected = false;
527 |
528 | #if (UNITY_ANDROID && !UNITY_EDITOR)
529 |
530 | if (Application.internetReachability == NetworkReachability.ReachableViaLocalAreaNetwork ||
531 | (Application.internetReachability == NetworkReachability.ReachableViaCarrierDataNetwork)) {
532 | connected = true;
533 | }
534 | #endif
535 |
536 | return connected;
537 | }
538 |
539 | ///
540 | /// Handle a single exception. By default the exception and its stacktrace gets written to disk.
541 | ///
542 | /// A string that contains the reason for the exception.
543 | /// The stacktrace for the exception.
544 | protected virtual void HandleException (string logString, string stackTrace)
545 | {
546 |
547 | #if (UNITY_ANDROID && !UNITY_EDITOR)
548 | try
549 | {
550 | WriteLogToDisk(logString, stackTrace);
551 | }
552 | catch (Exception e)
553 | {
554 | AndroidLog(e.ToString());
555 | }
556 | #endif
557 | }
558 |
559 | ///
560 | /// Callback for handling log messages.
561 | ///
562 | /// A string that contains the reason for the exception.
563 | /// The stacktrace for the exception.
564 | /// The type of the log message.
565 | public void OnHandleLogCallback (string logString, string stackTrace, LogType type)
566 | {
567 | #if (UNITY_ANDROID && !UNITY_EDITOR)
568 | if(LogType.Assert == type || LogType.Exception == type || LogType.Error == type) {
569 | HandleException(logString, stackTrace);
570 | }
571 | #endif
572 | }
573 |
574 | ///
575 | /// Callback for handling unresolved exceptions.
576 | ///
577 | public void OnHandleUnresolvedException (object sender, System.UnhandledExceptionEventArgs args)
578 | {
579 | #if (UNITY_ANDROID && !UNITY_EDITOR)
580 | if(args == null || args.ExceptionObject == null) {
581 | return;
582 | }
583 |
584 | if(args.ExceptionObject.GetType() == typeof(System.Exception)) {
585 | System.Exception e = (System.Exception)args.ExceptionObject;
586 | HandleException(e.Source, e.StackTrace);
587 | }
588 | #endif
589 | }
590 |
591 | #region Android Binding Helpers
592 | #if (UNITY_ANDROID && !UNITY_EDITOR)
593 |
594 | private static AndroidJavaObject DictainaryToJavaMap(IDictionary parameters, string javaKeyClass, string javaValueClass)
595 | {
596 | if (parameters == null)
597 | {
598 | return null;
599 | }
600 | var javaMap = new AndroidJavaObject("java.util.HashMap");
601 | var putMethod = AndroidJNIHelper.GetMethodID(javaMap.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
602 | foreach (var kvp in parameters)
603 | {
604 | AndroidJNI.CallObjectMethod(javaMap.GetRawObject(), putMethod, AndroidJNIHelper.CreateJNIArgArray(new object[]
605 | {
606 | new AndroidJavaObject(javaKeyClass, kvp.Key),
607 | new AndroidJavaObject(javaValueClass, kvp.Value)
608 | }));
609 | }
610 | return javaMap;
611 | }
612 |
613 | private static void AndroidLog(string message)
614 | {
615 | var logClass = new AndroidJavaObject("android.util.Log");
616 | logClass.CallStatic("d", "HockeyApp", message);
617 | }
618 |
619 | #endif
620 | #endregion
621 | }
622 |
--------------------------------------------------------------------------------
/Plugins/HockeyAppUnityAndroid/HockeySDK-5.2.0.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitstadium/HockeySDK-Unity-Android/eabf07dd7786de4dfb2b9be6b04f75eb6cdb66cc/Plugins/HockeyAppUnityAndroid/HockeySDK-5.2.0.aar
--------------------------------------------------------------------------------
/Plugins/HockeyAppUnityAndroid/README.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitstadium/HockeySDK-Unity-Android/eabf07dd7786de4dfb2b9be6b04f75eb6cdb66cc/Plugins/HockeyAppUnityAndroid/README.pdf
--------------------------------------------------------------------------------
/Plugins/HockeyAppUnityAndroid/hockeysdk-unity-5.2.0.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitstadium/HockeySDK-Unity-Android/eabf07dd7786de4dfb2b9be6b04f75eb6cdb66cc/Plugins/HockeyAppUnityAndroid/hockeysdk-unity-5.2.0.aar
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Version 5.2.0
2 |
3 | ## Introduction
4 |
5 | The HockeyAppUnity-Android plugin implements support for using HockeyApp in your Unity-Android builds.
6 |
7 | The following features are currently supported:
8 |
9 | 1. **Collect crash reports:** If your app crashes, a crash log is written to the device's storage. If the user starts the app again, they will be asked asked to submit the crash report to HockeyApp. This works for both beta and live apps, i.e. those submitted to Google Play or other app stores. Crash logs contain viable information for you to help resolve the issue.
10 |
11 | 2. **Collect exceptions** The HockeySDK-Unity-Android can automatically report uncaught managed exceptions coming from your C# code. Just like crashes, those exceptions will be sent on the next app start and are displayed on HockeyApp.
12 |
13 | 2. **User metrics:** Understand user behavior to improve your app. Track usage through daily and monthly active users. Monitor crash impacted users. Measure customer engagement through session count.
14 |
15 | 3. **Update alpha/beta apps:** The app will check with HockeyApp if a new version for your alpha/beta build is available. If yes, it will show a dialog to users and let them see the release notes, the version history and start the installation process right away. You can even force the installation of certain updates.
16 |
17 | 4. **Feedback:** Besides crash reports, collecting feedback from your users from within your app is a great option to help with improving your app. You act on and answer feedback directly from the HockeyApp backend.
18 |
19 | 5. **Authenticate:** To help you stay in control of closed tester groups, you can identify and authenticate users against your registered testers with the HockeyApp backend. The authentication feature supports several ways of authentication.
20 |
21 | This document contains the following sections:
22 |
23 | 1. [Requirements](#1)
24 | 2. [Installation & Setup](#2)
25 | 3. [Examples](#3)
26 | 4. [Troubleshooting](#4)
27 | 5. [Code of Conduct](#5)
28 | 6. [Contributor License](#6)
29 | 7. [Licenses](#7)
30 |
31 | ## Requirements
32 |
33 | * [Changelog](Documentation/Changelog.md)
34 | * Unity 5.0 or newer (SDK versions with Unity 4 support can be found at the [Unity Asset Store](https://www.assetstore.unity3d.com/en/?gclid=CO) or by switching to the 1.0.3 tag on GitHub).
35 | * Android API level 16 or later.
36 |
37 | ## Installation & Setup
38 |
39 | The following steps illustrate how to integrate the HockeyAppUnity-Android plugin:
40 |
41 | ### 1) Import plugin
42 | You can either import the plugin [from the Asset Store](https://www.assetstore.unity3d.com/en/#!/content/17759) or download the *.unitypackage* from our [GitHub releases page](https://github.com/bitstadium/HockeySDK-Unity-Android/releases) and install it by double-clicking the file. That's it!
43 |
44 | **Note:** In case you've cloned the repo, simply copy the **HockeyAppUnityAndroid** folder into the **Assets** directory of your Unity project.
45 |
46 | 
47 |
48 | ### 2) Modify AndroidManifest.xml
49 | Change the value for **package** inside the AndroidManifest.xml (*Assets/HockeyAppUnityAndroid*) to the package identifier of your project.
50 |
51 | 
52 |
53 | ### 3) Create plugin-GameObject
54 | Create an empty game object (*GameObject -> Create Empty*) and add the **HockeyAppAndroid.cs** as one of its components.
55 |
56 | 
57 |
58 | Select the game object in the **Hierarchy** pane and fill in some additional informations inside the Inspector window.
59 |
60 | * **App ID** - the app ID provided by HockeyApp
61 | * **Package ID** equals the package name of your HockeyApp app
62 | * **Server URL** - if you have your own server instance, please type in its url. In most cases this field should be left blank.
63 | * **Authenticator Type** - an authentication type (see [Authenticating Users on Android](http://hockeyapp.net/help/sdk/android/4.0.0-beta.1/net/hockeyapp/android/LoginManager.html)). By default **BITAuthenticatorIdentificationTypeAnonymous** will be used.
64 | * **Secret** - the secret provided by HockeyApp (only for authentication using email address)
65 | * **Auto Upload Crashes** - this option defines if the crash reporting feature should send crash reports automatically without asking the user on the next app start.
66 | * **Exception Logging** - by checking this option you will get more precise information about exceptions in your Unity scripts
67 | * **Update Alert** - check this option if users should be informed about app updates from inside your app
68 | * **User Metrics** - activating this feature will automatically usage data such as daily/monthly unique users and number of sessions per day
69 |
70 | 
71 |
72 | ### 4) Configure build settings
73 | You are now ready to build the project: Select **File -> Build Settings...** and switch to **Android** in the platform section. Check **Development Build** (see Build Settings section).
74 |
75 | 
76 |
77 | That's it: Build your app / Android project as usual.
78 |
79 | Your app will now send crash reports and user metrics (e.g. daily/monthly unique users, # of sessions per day) to the server without doing any additional work. To see those statistics just visit your app on the portal.
80 |
81 | 
82 |
83 | ## Build Settings ##
84 |
85 | The **Development Build** option affects the exception handling in C#. You will get a crash report in any case, but the data quality differs. It is recommend to enable it for alpha and beta builds, but to disable this option for production.
86 |
87 | **Disabled Development Build**:
88 |
89 | IndexOutOfRangeException: Array index is out of range.
90 | at (wrapper stelemref) object:stelemref (object,intptr,object)
91 | at TestUI.OnGUI ()
92 |
93 | **Enabled Development Build**:
94 |
95 | IndexOutOfRangeException: Array index is out of range.
96 | at (wrapper stelemref) object:stelemref (object,intptr,object)
97 | at TestUI.OnGUI () (at /Users/name/Documents/Workspace/HockeyAppUnity-Android/ExampleGame/Assets/TestUI/TestUI.cs:67)
98 |
99 | ## Examples
100 |
101 | ### Feedback Form
102 |
103 | In order to provide your users with a feedback form, just call the following static method:
104 |
105 | HockeyAppAndroid.ShowFeedbackForm();
106 |
107 | ### Explicitly check for updates
108 |
109 | Usually, the update check happens everytime the app enters the foreground. If you'd like to explicitly trigger this check, please add the following to your code:
110 |
111 | HockeyAppAndroid.CheckForUpdate();
112 |
113 | ## Troubleshooting
114 |
115 | If you have any problems with compiling or running the Unity Android project, please check the following points:
116 |
117 | ### Crash: Unable to find explicit activity class (UpdateActivity/FeedbackActivity)
118 |
119 | If you get an exception with the following reason
120 |
121 | Unable to find explicit activity class {net.hockeyapp.ExampleGame/net.hockeyapp.android.UpdateActivity}
122 |
123 | it is most likely caused by a corrupted manifest file merge. To fix that issue, please check the **Google Android Project** box inside the Android Build Settings and click the **Export** button.
124 |
125 | 
126 |
127 | Next, open the Android Studio project and define the missing activities inside the manifest file:
128 |
129 | ```xml
130 |
131 | ...
132 |
133 |
134 |
135 | ```
136 |
137 | Build and run the project inside Android Studio.
138 |
139 | ## Code of Conduct
140 |
141 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
142 |
143 | ## Contributor License
144 |
145 | You must sign a [Contributor License Agreement](https://cla.microsoft.com/) before submitting your pull request. To complete the Contributor License Agreement (CLA), you will need to submit a request via the [form](https://cla.microsoft.com/) and then electronically sign the CLA when you receive the email containing the link to the document. You need to sign the CLA only once to cover submission to any Microsoft OSS project.
146 |
147 | ## Licenses
148 |
149 | The Hockey SDK is provided under the following license:
150 |
151 | Copyright (c) Microsoft Corporation. All rights reserved.
152 |
153 | Permission is hereby granted, free of charge, to any person
154 | obtaining a copy of this software and associated documentation
155 | files (the "Software"), to deal in the Software without
156 | restriction, including without limitation the rights to use,
157 | copy, modify, merge, publish, distribute, sublicense, and/or sell
158 | copies of the Software, and to permit persons to whom the
159 | Software is furnished to do so, subject to the following
160 | conditions:
161 |
162 | The above copyright notice and this permission notice shall be
163 | included in all copies or substantial portions of the Software.
164 |
165 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
166 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
167 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
168 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
169 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
170 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
171 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
172 | OTHER DEALINGS IN THE SOFTWARE.
173 |
174 | The following classes are based on code from the project
175 | android-remote-stacktrace:
176 |
177 | + Constants
178 | + CrashManager
179 | + ExceptionHandler
180 |
181 | Source: http://code.google.com/p/android-remote-stacktrace/
182 |
183 | The original license of these classes is:
184 |
185 | Copyright (c) 2009 nullwire aps
186 |
187 | Permission is hereby granted, free of charge, to any person
188 | obtaining a copy of this software and associated documentation
189 | files (the "Software"), to deal in the Software without
190 | restriction, including without limitation the rights to use,
191 | copy, modify, merge, publish, distribute, sublicense, and/or sell
192 | copies of the Software, and to permit persons to whom the
193 | Software is furnished to do so, subject to the following
194 | conditions:
195 |
196 | The above copyright notice and this permission notice shall be
197 | included in all copies or substantial portions of the Software.
198 |
199 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
200 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
201 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
202 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
203 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
204 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
205 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
206 | OTHER DEALINGS IN THE SOFTWARE.
207 |
208 | Contributors:
209 | + Mads Kristiansen, mads.kristiansen@nullwire.com
210 | + Glen Humphrey
211 | + Evan Charlton
212 | + Peter Hewitt
213 |
214 | The following class is based on code from the Android Open Source Project
215 |
216 | Base64
217 |
218 | Copyright (C) 2010 The Android Open Source Project
219 |
220 | Licensed under the Apache License, Version 2.0 (the "License");
221 | you may not use this file except in compliance with the License.
222 | You may obtain a copy of the License at
223 |
224 | http://www.apache.org/licenses/LICENSE-2.0
225 |
226 | Unless required by applicable law or agreed to in writing, software
227 | distributed under the License is distributed on an "AS IS" BASIS,
228 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
229 | See the License for the specific language governing permissions and
230 | limitations under the License.
231 |
--------------------------------------------------------------------------------