Ad fixes and appsflyer
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ddc06781290bc42b480134ac73d6a269
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,32 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Darkmatter.Core.Contracts.Services.LogRocket
|
||||
{
|
||||
public interface ILogRocketService
|
||||
{
|
||||
bool IsReady { get; }
|
||||
|
||||
void Identify(string userId);
|
||||
void Identify(string userId, IReadOnlyDictionary<string, object> traits);
|
||||
|
||||
void Track(string eventName);
|
||||
void Track(string eventName, string propName, string propValue);
|
||||
void Track(string eventName, IReadOnlyDictionary<string, object> properties);
|
||||
|
||||
void Log(string message, LogRocketSeverity severity = LogRocketSeverity.Info);
|
||||
void LogException(string message, string stackTrace);
|
||||
|
||||
void StartSessionReplay();
|
||||
void StopSessionReplay();
|
||||
|
||||
string SessionUrl { get; }
|
||||
}
|
||||
|
||||
public enum LogRocketSeverity
|
||||
{
|
||||
Debug,
|
||||
Info,
|
||||
Warn,
|
||||
Error,
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5a44c903b7fed4e889c9fc91430e4b71
|
||||
@@ -103,6 +103,10 @@ public class ColorbookFlowController : IAsyncStartable, IDisposable
|
||||
|
||||
await ShowRewardedAdAsync(ct);
|
||||
|
||||
// Ad SDKs can resume the continuation on a background thread; the scene load below
|
||||
// must run on the Unity main thread. No-op when already there.
|
||||
await UniTask.SwitchToMainThread(ct);
|
||||
|
||||
var progress = new Progress<float>(p => _loadingScreen.SetProgress(p * 0.5f));
|
||||
var mappedProgress = new Progress<float>(p => _loadingScreen.SetProgress(0.5f + p * 0.25f));
|
||||
await _progression.SetLastOpenedAsync(templateId);
|
||||
|
||||
@@ -76,6 +76,13 @@ namespace Darkmatter.Services.Ads
|
||||
#if GOOGLE_MOBILE_ADS
|
||||
ApplyRequestConfiguration();
|
||||
|
||||
// AdMob raises ad callbacks (OnAdFullScreenContentClosed, etc.) on a background
|
||||
// thread by default. UniTask continuations then resume off the main thread, so the
|
||||
// scene load that runs after a rewarded ad closes calls SceneManager/Addressables
|
||||
// from a background thread and throws — leaving the loading screen stuck at 0%.
|
||||
// Force all ad events onto the Unity main thread.
|
||||
MobileAds.RaiseAdEventsOnUnityMainThread = true;
|
||||
|
||||
var tcs = new UniTaskCompletionSource<bool>();
|
||||
MobileAds.Initialize(_ => tcs.TrySetResult(true));
|
||||
|
||||
|
||||
8
Assets/Darkmatter/Code/Services/LogRocket.meta
Normal file
8
Assets/Darkmatter/Code/Services/LogRocket.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c6df39d33cdd84ce1ab71ee4e5026682
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8eef8a073e91748a09d25cf48e413e05
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,39 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace Darkmatter.Services.LogRocket.Configuration
|
||||
{
|
||||
[CreateAssetMenu(menuName = "Darkmatter/Services/LogRocket Config", fileName = "LogRocketConfig")]
|
||||
public sealed class LogRocketConfig : ScriptableObject
|
||||
{
|
||||
[Header("Project")]
|
||||
[Tooltip("LogRocket application ID, e.g. \"yourorg/yourapp\".")]
|
||||
public string AppId;
|
||||
|
||||
[Header("Logs")]
|
||||
[Tooltip("Forward Unity Debug.Log / exceptions to LogRocket.")]
|
||||
public bool ForwardUnityLogs = true;
|
||||
|
||||
[Tooltip("Minimum Unity log type forwarded.")]
|
||||
public LogType MinimumLogType = LogType.Warning;
|
||||
|
||||
[Header("Session Replay")]
|
||||
[Tooltip("Periodically capture a screenshot and upload it as a replay frame.")]
|
||||
public bool EnableSessionReplay = true;
|
||||
|
||||
[Tooltip("Seconds between captured frames. Lower interval = larger payload.")]
|
||||
[Range(0.25f, 10f)] public float CaptureIntervalSeconds = 2f;
|
||||
|
||||
[Tooltip("Max width in pixels for captured frames. Frames downscale to fit.")]
|
||||
[Range(128, 2048)] public int MaxFrameWidth = 720;
|
||||
|
||||
[Tooltip("JPEG quality (1-100) used when encoding replay frames.")]
|
||||
[Range(10, 100)] public int JpegQuality = 60;
|
||||
|
||||
[Header("Behaviour")]
|
||||
[Tooltip("Disable LogRocket entirely in the editor.")]
|
||||
public bool DisableInEditor = true;
|
||||
|
||||
[Tooltip("Auto-start session on service init.")]
|
||||
public bool AutoStart = true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e20e49adf823a4918b4b7823d203a28b
|
||||
8
Assets/Darkmatter/Code/Services/LogRocket/Editor.meta
Normal file
8
Assets/Darkmatter/Code/Services/LogRocket/Editor.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c7656001fcf7748289669ff7f1bba786
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
External Dependency Manager (EDM4U) dependency spec for the LogRocket SDK.
|
||||
EDM injects these into the generated iOS Podfile / Android Gradle on build.
|
||||
|
||||
Verify the versions against the current LogRocket release before shipping:
|
||||
iOS pod: https://cocoapods.org/pods/LogRocket (ObjC class: LROSDK)
|
||||
Android Maven: confirm group/artifact + the bridge's reflected class name
|
||||
in LogRocketUnityBridge.java (com.logrocket.core.LogRocket is
|
||||
an UNVERIFIED guess).
|
||||
-->
|
||||
<dependencies>
|
||||
<iosPods>
|
||||
<iosPod name="LogRocket" version="~> 1.47" addToAllTargets="false">
|
||||
<sources>
|
||||
<source>https://github.com/CocoaPods/Specs</source>
|
||||
</sources>
|
||||
</iosPod>
|
||||
</iosPods>
|
||||
<androidPackages>
|
||||
<!-- TODO: confirm the real Maven coordinate. Placeholder commented out so it
|
||||
does not break Android resolution until verified.
|
||||
<androidPackage spec="com.logrocket:logrocket:+" />
|
||||
-->
|
||||
</androidPackages>
|
||||
</dependencies>
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e2806d88a0ebc4aaeb06d2fd098c7555
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2d3c637029058429a8ea92a186cba06f
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,28 @@
|
||||
using Darkmatter.Core.Contracts.Services.LogRocket;
|
||||
using Darkmatter.Libs.Installers;
|
||||
using Darkmatter.Services.LogRocket.Configuration;
|
||||
using Darkmatter.Services.LogRocket.Systems;
|
||||
using UnityEngine;
|
||||
using VContainer;
|
||||
using VContainer.Unity;
|
||||
|
||||
namespace Darkmatter.Services.LogRocket.Installers
|
||||
{
|
||||
public sealed class LogRocketModule : MonoBehaviour, IModule
|
||||
{
|
||||
[SerializeField] private LogRocketConfig _config;
|
||||
|
||||
public void Register(IContainerBuilder builder)
|
||||
{
|
||||
var config = _config;
|
||||
if (config == null)
|
||||
{
|
||||
Debug.LogWarning("[LogRocket] LogRocketModule has no config assigned. Service will be disabled.");
|
||||
config = ScriptableObject.CreateInstance<LogRocketConfig>();
|
||||
}
|
||||
|
||||
builder.RegisterInstance(config);
|
||||
builder.RegisterEntryPoint<LogRocketSystem>().As<ILogRocketService>();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f78e90a5f08704f62b3624ff47ebf66c
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"name": "Services.LogRocket",
|
||||
"rootNamespace": "Darkmatter.Services.LogRocket",
|
||||
"references": [
|
||||
"GUID:6a0a834eb41764f12ba55c3fb04a40cb",
|
||||
"GUID:c1c03c0e5b2f4412b9f2be1c20d6a9b1",
|
||||
"GUID:b0214a6008ed146ff8f122a6a9c2f6cc",
|
||||
"GUID:f51ebe6a0ceec4240a699833d6309b23"
|
||||
],
|
||||
"includePlatforms": [],
|
||||
"excludePlatforms": [],
|
||||
"allowUnsafeCode": false,
|
||||
"overrideReferences": false,
|
||||
"precompiledReferences": [],
|
||||
"autoReferenced": true,
|
||||
"defineConstraints": [],
|
||||
"versionDefines": [],
|
||||
"noEngineReferences": false
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5a1957cf2cabd413bad46969b408df0e
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/Darkmatter/Code/Services/LogRocket/Systems.meta
Normal file
8
Assets/Darkmatter/Code/Services/LogRocket/Systems.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 491835b65b47144db979541bb7e37499
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,18 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Darkmatter.Services.LogRocket.Systems
|
||||
{
|
||||
internal interface ILogRocketNative
|
||||
{
|
||||
bool IsAvailable { get; }
|
||||
string SessionUrl { get; }
|
||||
void Init(string appId);
|
||||
void Identify(string userId, IReadOnlyDictionary<string, object> traits);
|
||||
void Track(string eventName, IReadOnlyDictionary<string, object> properties);
|
||||
void Log(string severity, string message);
|
||||
void LogException(string message, string stackTrace);
|
||||
void CaptureFrame(byte[] jpegBytes, int width, int height);
|
||||
void StartReplay();
|
||||
void StopReplay();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 14484983d15d0451ebe505bb8f93f447
|
||||
@@ -0,0 +1,142 @@
|
||||
#if UNITY_ANDROID && !UNITY_EDITOR
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Darkmatter.Services.LogRocket.Systems
|
||||
{
|
||||
internal sealed class LogRocketNativeAndroid : ILogRocketNative
|
||||
{
|
||||
private const string BridgeClass = "com.darkmatter.logrocket.LogRocketUnityBridge";
|
||||
|
||||
private AndroidJavaObject _bridge;
|
||||
public bool IsAvailable => _bridge != null;
|
||||
public string SessionUrl => SafeCall<string>("getSessionUrl");
|
||||
|
||||
public void Init(string appId)
|
||||
{
|
||||
try
|
||||
{
|
||||
using var bridgeClass = new AndroidJavaClass(BridgeClass);
|
||||
using var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
|
||||
using var activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
|
||||
_bridge = bridgeClass.CallStatic<AndroidJavaObject>("getInstance");
|
||||
_bridge.Call("init", activity, appId ?? string.Empty);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.LogError($"[LogRocket] Android init failed: {e}");
|
||||
_bridge = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void Identify(string userId, IReadOnlyDictionary<string, object> traits)
|
||||
{
|
||||
if (_bridge == null) return;
|
||||
try { _bridge.Call("identify", userId ?? string.Empty, MapToJson(traits)); }
|
||||
catch (Exception e) { Debug.LogError($"[LogRocket] identify failed: {e}"); }
|
||||
}
|
||||
|
||||
public void Track(string eventName, IReadOnlyDictionary<string, object> properties)
|
||||
{
|
||||
if (_bridge == null) return;
|
||||
try { _bridge.Call("track", eventName ?? string.Empty, MapToJson(properties)); }
|
||||
catch (Exception e) { Debug.LogError($"[LogRocket] track failed: {e}"); }
|
||||
}
|
||||
|
||||
public void Log(string severity, string message)
|
||||
{
|
||||
if (_bridge == null) return;
|
||||
try { _bridge.Call("log", severity ?? "info", message ?? string.Empty); }
|
||||
catch (Exception e) { Debug.LogError($"[LogRocket] log failed: {e}"); }
|
||||
}
|
||||
|
||||
public void LogException(string message, string stackTrace)
|
||||
{
|
||||
if (_bridge == null) return;
|
||||
try { _bridge.Call("logException", message ?? string.Empty, stackTrace ?? string.Empty); }
|
||||
catch (Exception e) { Debug.LogError($"[LogRocket] logException failed: {e}"); }
|
||||
}
|
||||
|
||||
public void CaptureFrame(byte[] jpeg, int width, int height)
|
||||
{
|
||||
if (_bridge == null || jpeg == null || jpeg.Length == 0) return;
|
||||
try { _bridge.Call("captureFrame", jpeg, width, height); }
|
||||
catch (Exception e) { Debug.LogError($"[LogRocket] captureFrame failed: {e}"); }
|
||||
}
|
||||
|
||||
public void StartReplay()
|
||||
{
|
||||
if (_bridge == null) return;
|
||||
try { _bridge.Call("startReplay"); }
|
||||
catch (Exception e) { Debug.LogError($"[LogRocket] startReplay failed: {e}"); }
|
||||
}
|
||||
|
||||
public void StopReplay()
|
||||
{
|
||||
if (_bridge == null) return;
|
||||
try { _bridge.Call("stopReplay"); }
|
||||
catch (Exception e) { Debug.LogError($"[LogRocket] stopReplay failed: {e}"); }
|
||||
}
|
||||
|
||||
private T SafeCall<T>(string method)
|
||||
{
|
||||
if (_bridge == null) return default;
|
||||
try { return _bridge.Call<T>(method); }
|
||||
catch { return default; }
|
||||
}
|
||||
|
||||
private static string MapToJson(IReadOnlyDictionary<string, object> map)
|
||||
{
|
||||
if (map == null || map.Count == 0) return "{}";
|
||||
var sb = new System.Text.StringBuilder(64);
|
||||
sb.Append('{');
|
||||
bool first = true;
|
||||
foreach (var kv in map)
|
||||
{
|
||||
if (!first) sb.Append(',');
|
||||
first = false;
|
||||
AppendJsonString(sb, kv.Key);
|
||||
sb.Append(':');
|
||||
AppendJsonValue(sb, kv.Value);
|
||||
}
|
||||
sb.Append('}');
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
private static void AppendJsonValue(System.Text.StringBuilder sb, object v)
|
||||
{
|
||||
switch (v)
|
||||
{
|
||||
case null: sb.Append("null"); break;
|
||||
case bool b: sb.Append(b ? "true" : "false"); break;
|
||||
case int or long or float or double or decimal:
|
||||
sb.Append(Convert.ToString(v, System.Globalization.CultureInfo.InvariantCulture));
|
||||
break;
|
||||
default: AppendJsonString(sb, v.ToString()); break;
|
||||
}
|
||||
}
|
||||
|
||||
private static void AppendJsonString(System.Text.StringBuilder sb, string s)
|
||||
{
|
||||
sb.Append('"');
|
||||
foreach (var c in s ?? string.Empty)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case '"': sb.Append("\\\""); break;
|
||||
case '\\': sb.Append("\\\\"); break;
|
||||
case '\n': sb.Append("\\n"); break;
|
||||
case '\r': sb.Append("\\r"); break;
|
||||
case '\t': sb.Append("\\t"); break;
|
||||
default:
|
||||
if (c < 0x20) sb.AppendFormat("\\u{0:X4}", (int)c);
|
||||
else sb.Append(c);
|
||||
break;
|
||||
}
|
||||
}
|
||||
sb.Append('"');
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e384b24344c8e4899be0036dd9edc333
|
||||
@@ -0,0 +1,145 @@
|
||||
#if UNITY_IOS && !UNITY_EDITOR
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.InteropServices;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Darkmatter.Services.LogRocket.Systems
|
||||
{
|
||||
internal sealed class LogRocketNativeIOS : ILogRocketNative
|
||||
{
|
||||
[DllImport("__Internal")] private static extern void _lr_init(string appId);
|
||||
[DllImport("__Internal")] private static extern void _lr_identify(string userId, string traitsJson);
|
||||
[DllImport("__Internal")] private static extern void _lr_track(string eventName, string propsJson);
|
||||
[DllImport("__Internal")] private static extern void _lr_log(string severity, string message);
|
||||
[DllImport("__Internal")] private static extern void _lr_logException(string message, string stack);
|
||||
[DllImport("__Internal")] private static extern void _lr_captureFrame(IntPtr bytes, int length, int width, int height);
|
||||
[DllImport("__Internal")] private static extern void _lr_startReplay();
|
||||
[DllImport("__Internal")] private static extern void _lr_stopReplay();
|
||||
[DllImport("__Internal")] private static extern IntPtr _lr_sessionUrl();
|
||||
|
||||
private bool _initialised;
|
||||
public bool IsAvailable => _initialised;
|
||||
|
||||
public string SessionUrl
|
||||
{
|
||||
get
|
||||
{
|
||||
try
|
||||
{
|
||||
var ptr = _lr_sessionUrl();
|
||||
return ptr == IntPtr.Zero ? null : Marshal.PtrToStringAuto(ptr);
|
||||
}
|
||||
catch { return null; }
|
||||
}
|
||||
}
|
||||
|
||||
public void Init(string appId)
|
||||
{
|
||||
try { _lr_init(appId ?? string.Empty); _initialised = true; }
|
||||
catch (Exception e) { Debug.LogError($"[LogRocket] iOS init failed: {e}"); _initialised = false; }
|
||||
}
|
||||
|
||||
public void Identify(string userId, IReadOnlyDictionary<string, object> traits)
|
||||
{
|
||||
if (!_initialised) return;
|
||||
try { _lr_identify(userId ?? string.Empty, MapToJson(traits)); }
|
||||
catch (Exception e) { Debug.LogError($"[LogRocket] identify failed: {e}"); }
|
||||
}
|
||||
|
||||
public void Track(string eventName, IReadOnlyDictionary<string, object> properties)
|
||||
{
|
||||
if (!_initialised) return;
|
||||
try { _lr_track(eventName ?? string.Empty, MapToJson(properties)); }
|
||||
catch (Exception e) { Debug.LogError($"[LogRocket] track failed: {e}"); }
|
||||
}
|
||||
|
||||
public void Log(string severity, string message)
|
||||
{
|
||||
if (!_initialised) return;
|
||||
try { _lr_log(severity ?? "info", message ?? string.Empty); }
|
||||
catch (Exception e) { Debug.LogError($"[LogRocket] log failed: {e}"); }
|
||||
}
|
||||
|
||||
public void LogException(string message, string stack)
|
||||
{
|
||||
if (!_initialised) return;
|
||||
try { _lr_logException(message ?? string.Empty, stack ?? string.Empty); }
|
||||
catch (Exception e) { Debug.LogError($"[LogRocket] logException failed: {e}"); }
|
||||
}
|
||||
|
||||
public void CaptureFrame(byte[] jpeg, int width, int height)
|
||||
{
|
||||
if (!_initialised || jpeg == null || jpeg.Length == 0) return;
|
||||
var handle = GCHandle.Alloc(jpeg, GCHandleType.Pinned);
|
||||
try { _lr_captureFrame(handle.AddrOfPinnedObject(), jpeg.Length, width, height); }
|
||||
catch (Exception e) { Debug.LogError($"[LogRocket] captureFrame failed: {e}"); }
|
||||
finally { handle.Free(); }
|
||||
}
|
||||
|
||||
public void StartReplay()
|
||||
{
|
||||
if (!_initialised) return;
|
||||
try { _lr_startReplay(); } catch (Exception e) { Debug.LogError($"[LogRocket] startReplay failed: {e}"); }
|
||||
}
|
||||
|
||||
public void StopReplay()
|
||||
{
|
||||
if (!_initialised) return;
|
||||
try { _lr_stopReplay(); } catch (Exception e) { Debug.LogError($"[LogRocket] stopReplay failed: {e}"); }
|
||||
}
|
||||
|
||||
private static string MapToJson(IReadOnlyDictionary<string, object> map)
|
||||
{
|
||||
if (map == null || map.Count == 0) return "{}";
|
||||
var sb = new System.Text.StringBuilder(64);
|
||||
sb.Append('{');
|
||||
bool first = true;
|
||||
foreach (var kv in map)
|
||||
{
|
||||
if (!first) sb.Append(',');
|
||||
first = false;
|
||||
AppendJsonString(sb, kv.Key);
|
||||
sb.Append(':');
|
||||
AppendJsonValue(sb, kv.Value);
|
||||
}
|
||||
sb.Append('}');
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
private static void AppendJsonValue(System.Text.StringBuilder sb, object v)
|
||||
{
|
||||
switch (v)
|
||||
{
|
||||
case null: sb.Append("null"); break;
|
||||
case bool b: sb.Append(b ? "true" : "false"); break;
|
||||
case int or long or float or double or decimal:
|
||||
sb.Append(Convert.ToString(v, System.Globalization.CultureInfo.InvariantCulture));
|
||||
break;
|
||||
default: AppendJsonString(sb, v.ToString()); break;
|
||||
}
|
||||
}
|
||||
|
||||
private static void AppendJsonString(System.Text.StringBuilder sb, string s)
|
||||
{
|
||||
sb.Append('"');
|
||||
foreach (var c in s ?? string.Empty)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case '"': sb.Append("\\\""); break;
|
||||
case '\\': sb.Append("\\\\"); break;
|
||||
case '\n': sb.Append("\\n"); break;
|
||||
case '\r': sb.Append("\\r"); break;
|
||||
case '\t': sb.Append("\\t"); break;
|
||||
default:
|
||||
if (c < 0x20) sb.AppendFormat("\\u{0:X4}", (int)c);
|
||||
else sb.Append(c);
|
||||
break;
|
||||
}
|
||||
}
|
||||
sb.Append('"');
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bd81dfea0269d4dec8e97e8756b80801
|
||||
@@ -0,0 +1,34 @@
|
||||
#if UNITY_EDITOR || (!UNITY_IOS && !UNITY_ANDROID)
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Darkmatter.Services.LogRocket.Systems
|
||||
{
|
||||
internal sealed class LogRocketNativeNoop : ILogRocketNative
|
||||
{
|
||||
public bool IsAvailable => true;
|
||||
public string SessionUrl => null;
|
||||
|
||||
public void Init(string appId) =>
|
||||
Debug.Log($"[LogRocket] Editor/standalone stub init (appId='{appId}'). No native upload.");
|
||||
|
||||
public void Identify(string userId, IReadOnlyDictionary<string, object> traits) =>
|
||||
Debug.Log($"[LogRocket] Identify '{userId}' traits={Count(traits)}");
|
||||
|
||||
public void Track(string eventName, IReadOnlyDictionary<string, object> properties) =>
|
||||
Debug.Log($"[LogRocket] Track '{eventName}' props={Count(properties)}");
|
||||
|
||||
public void Log(string severity, string message) =>
|
||||
Debug.Log($"[LogRocket:{severity}] {message}");
|
||||
|
||||
public void LogException(string message, string stackTrace) =>
|
||||
Debug.Log($"[LogRocket:exception] {message}\n{stackTrace}");
|
||||
|
||||
public void CaptureFrame(byte[] jpeg, int w, int h) { }
|
||||
public void StartReplay() => Debug.Log("[LogRocket] StartReplay (noop)");
|
||||
public void StopReplay() => Debug.Log("[LogRocket] StopReplay (noop)");
|
||||
|
||||
private static int Count(IReadOnlyDictionary<string, object> map) => map?.Count ?? 0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 545348daa325e4c809265a9f76584f19
|
||||
@@ -0,0 +1,170 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using Darkmatter.Core.Contracts.Services.LogRocket;
|
||||
using Darkmatter.Services.LogRocket.Configuration;
|
||||
using UnityEngine;
|
||||
using VContainer.Unity;
|
||||
|
||||
namespace Darkmatter.Services.LogRocket.Systems
|
||||
{
|
||||
public sealed class LogRocketSystem : ILogRocketService, IAsyncStartable, IDisposable
|
||||
{
|
||||
private readonly LogRocketConfig _config;
|
||||
private readonly ILogRocketNative _native;
|
||||
private readonly Queue<Action> _pending = new();
|
||||
|
||||
private UnityLogForwarder _logForwarder;
|
||||
private SessionReplayCapture _replay;
|
||||
private bool _ready;
|
||||
private bool _disabled;
|
||||
|
||||
public LogRocketSystem(LogRocketConfig config)
|
||||
{
|
||||
_config = config;
|
||||
_native = CreateNative();
|
||||
}
|
||||
|
||||
public bool IsReady => _ready;
|
||||
public string SessionUrl => _native?.SessionUrl;
|
||||
|
||||
public async UniTask StartAsync(CancellationToken cancellation = default)
|
||||
{
|
||||
if (_config == null)
|
||||
{
|
||||
Debug.LogWarning("[LogRocket] No config assigned. Service disabled.");
|
||||
_disabled = true;
|
||||
return;
|
||||
}
|
||||
|
||||
#if UNITY_EDITOR
|
||||
if (_config.DisableInEditor) { _disabled = true; return; }
|
||||
#endif
|
||||
if (string.IsNullOrWhiteSpace(_config.AppId))
|
||||
{
|
||||
Debug.LogWarning("[LogRocket] AppId empty. Service disabled.");
|
||||
_disabled = true;
|
||||
return;
|
||||
}
|
||||
|
||||
await UniTask.SwitchToMainThread(cancellation);
|
||||
_native.Init(_config.AppId);
|
||||
|
||||
if (_config.ForwardUnityLogs)
|
||||
{
|
||||
_logForwarder = new UnityLogForwarder(_native, _config.MinimumLogType);
|
||||
_logForwarder.Enable();
|
||||
}
|
||||
|
||||
if (_config.EnableSessionReplay && _config.AutoStart)
|
||||
StartSessionReplay();
|
||||
|
||||
_ready = true;
|
||||
FlushPending();
|
||||
}
|
||||
|
||||
public void Identify(string userId) => Identify(userId, null);
|
||||
|
||||
public void Identify(string userId, IReadOnlyDictionary<string, object> traits)
|
||||
{
|
||||
Run(() => _native.Identify(userId, traits));
|
||||
}
|
||||
|
||||
public void Track(string eventName)
|
||||
{
|
||||
Run(() => _native.Track(eventName, null));
|
||||
}
|
||||
|
||||
public void Track(string eventName, string propName, string propValue)
|
||||
{
|
||||
var dict = new Dictionary<string, object>(1) { [propName] = propValue };
|
||||
Run(() => _native.Track(eventName, dict));
|
||||
}
|
||||
|
||||
public void Track(string eventName, IReadOnlyDictionary<string, object> properties)
|
||||
{
|
||||
Run(() => _native.Track(eventName, properties));
|
||||
}
|
||||
|
||||
public void Log(string message, LogRocketSeverity severity = LogRocketSeverity.Info)
|
||||
{
|
||||
Run(() => _native.Log(SeverityString(severity), message));
|
||||
}
|
||||
|
||||
public void LogException(string message, string stackTrace)
|
||||
{
|
||||
Run(() => _native.LogException(message, stackTrace));
|
||||
}
|
||||
|
||||
public void StartSessionReplay()
|
||||
{
|
||||
Run(() =>
|
||||
{
|
||||
_native.StartReplay();
|
||||
if (_replay == null)
|
||||
_replay = new SessionReplayCapture(_native, _config);
|
||||
_replay.Start();
|
||||
});
|
||||
}
|
||||
|
||||
public void StopSessionReplay()
|
||||
{
|
||||
Run(() =>
|
||||
{
|
||||
_replay?.Stop();
|
||||
_native.StopReplay();
|
||||
});
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_logForwarder?.Disable();
|
||||
_logForwarder = null;
|
||||
_replay?.Dispose();
|
||||
_replay = null;
|
||||
_pending.Clear();
|
||||
}
|
||||
|
||||
private void Run(Action action)
|
||||
{
|
||||
if (_disabled) return;
|
||||
if (_ready)
|
||||
{
|
||||
try { action(); }
|
||||
catch (Exception e) { Debug.LogError($"[LogRocket] op failed: {e}"); }
|
||||
}
|
||||
else _pending.Enqueue(action);
|
||||
}
|
||||
|
||||
private void FlushPending()
|
||||
{
|
||||
while (_pending.Count > 0)
|
||||
{
|
||||
try { _pending.Dequeue().Invoke(); }
|
||||
catch (Exception e) { Debug.LogError($"[LogRocket] queued op failed: {e}"); }
|
||||
}
|
||||
}
|
||||
|
||||
private static string SeverityString(LogRocketSeverity s) => s switch
|
||||
{
|
||||
LogRocketSeverity.Debug => "debug",
|
||||
LogRocketSeverity.Warn => "warn",
|
||||
LogRocketSeverity.Error => "error",
|
||||
_ => "info",
|
||||
};
|
||||
|
||||
private static ILogRocketNative CreateNative()
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
return new LogRocketNativeNoop();
|
||||
#elif UNITY_ANDROID
|
||||
return new LogRocketNativeAndroid();
|
||||
#elif UNITY_IOS
|
||||
return new LogRocketNativeIOS();
|
||||
#else
|
||||
return new LogRocketNativeNoop();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d5c8a2c56a83847a3b480e4a13fba63d
|
||||
@@ -0,0 +1,110 @@
|
||||
using System;
|
||||
using System.Threading;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using Darkmatter.Services.LogRocket.Configuration;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Darkmatter.Services.LogRocket.Systems
|
||||
{
|
||||
internal sealed class SessionReplayCapture : IDisposable
|
||||
{
|
||||
private readonly ILogRocketNative _native;
|
||||
private readonly LogRocketConfig _config;
|
||||
private CancellationTokenSource _cts;
|
||||
private bool _running;
|
||||
|
||||
public SessionReplayCapture(ILogRocketNative native, LogRocketConfig config)
|
||||
{
|
||||
_native = native;
|
||||
_config = config;
|
||||
}
|
||||
|
||||
public void Start()
|
||||
{
|
||||
if (_running) return;
|
||||
_running = true;
|
||||
_cts = new CancellationTokenSource();
|
||||
Loop(_cts.Token).Forget();
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
if (!_running) return;
|
||||
_running = false;
|
||||
_cts?.Cancel();
|
||||
_cts?.Dispose();
|
||||
_cts = null;
|
||||
}
|
||||
|
||||
public void Dispose() => Stop();
|
||||
|
||||
private async UniTaskVoid Loop(CancellationToken ct)
|
||||
{
|
||||
float interval = Mathf.Max(0.25f, _config.CaptureIntervalSeconds);
|
||||
while (!ct.IsCancellationRequested && _running)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Must be true end-of-frame: ScreenCapture reads the backbuffer after
|
||||
// rendering completes. LastPostLateUpdate fires before render finish and
|
||||
// makes CaptureScreenshotAsTexture return an invalid texture.
|
||||
await UniTask.WaitForEndOfFrame(ct);
|
||||
if (ct.IsCancellationRequested) break;
|
||||
CaptureOnce();
|
||||
}
|
||||
catch (OperationCanceledException) { break; }
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.LogError($"[LogRocket] replay capture failed: {e}");
|
||||
}
|
||||
|
||||
try { await UniTask.Delay(TimeSpan.FromSeconds(interval), cancellationToken: ct); }
|
||||
catch (OperationCanceledException) { break; }
|
||||
}
|
||||
}
|
||||
|
||||
private void CaptureOnce()
|
||||
{
|
||||
var src = ScreenCapture.CaptureScreenshotAsTexture();
|
||||
if (src == null) return;
|
||||
|
||||
Texture2D scaled = null;
|
||||
try
|
||||
{
|
||||
int targetW = Mathf.Min(_config.MaxFrameWidth, src.width);
|
||||
int targetH = Mathf.RoundToInt(src.height * (targetW / (float)src.width));
|
||||
scaled = targetW == src.width && targetH == src.height ? src : Resize(src, targetW, targetH);
|
||||
|
||||
var jpeg = scaled.EncodeToJPG(Mathf.Clamp(_config.JpegQuality, 10, 100));
|
||||
_native.CaptureFrame(jpeg, scaled.width, scaled.height);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (scaled != null && scaled != src) UnityEngine.Object.Destroy(scaled);
|
||||
UnityEngine.Object.Destroy(src);
|
||||
}
|
||||
}
|
||||
|
||||
private static Texture2D Resize(Texture2D src, int w, int h)
|
||||
{
|
||||
var rt = RenderTexture.GetTemporary(w, h, 0, RenderTextureFormat.ARGB32);
|
||||
var prev = RenderTexture.active;
|
||||
try
|
||||
{
|
||||
RenderTexture.active = rt;
|
||||
GL.Clear(false, true, Color.clear);
|
||||
Graphics.Blit(src, rt);
|
||||
var dst = new Texture2D(w, h, TextureFormat.RGBA32, false);
|
||||
dst.ReadPixels(new Rect(0, 0, w, h), 0, 0);
|
||||
dst.Apply();
|
||||
return dst;
|
||||
}
|
||||
finally
|
||||
{
|
||||
RenderTexture.active = prev;
|
||||
RenderTexture.ReleaseTemporary(rt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1aae6350f04254f3dabfb7a552a50cb4
|
||||
@@ -0,0 +1,81 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Darkmatter.Services.LogRocket.Systems
|
||||
{
|
||||
internal sealed class UnityLogForwarder
|
||||
{
|
||||
// Prefix every LogRocket diagnostic carries. Used to drop our own chatter so it
|
||||
// never round-trips back into the session as user telemetry.
|
||||
private const string SelfPrefix = "[LogRocket";
|
||||
|
||||
private readonly ILogRocketNative _native;
|
||||
private readonly LogType _min;
|
||||
private bool _enabled;
|
||||
|
||||
// Guards against a native Log/LogException call that itself emits a Unity log on the
|
||||
// same thread, which would otherwise recurse through OnLog.
|
||||
[ThreadStatic] private static bool _dispatching;
|
||||
|
||||
public UnityLogForwarder(ILogRocketNative native, LogType min)
|
||||
{
|
||||
_native = native;
|
||||
_min = min;
|
||||
}
|
||||
|
||||
public void Enable()
|
||||
{
|
||||
if (_enabled) return;
|
||||
Application.logMessageReceivedThreaded += OnLog;
|
||||
_enabled = true;
|
||||
}
|
||||
|
||||
public void Disable()
|
||||
{
|
||||
if (!_enabled) return;
|
||||
Application.logMessageReceivedThreaded -= OnLog;
|
||||
_enabled = false;
|
||||
}
|
||||
|
||||
private void OnLog(string condition, string stack, LogType type)
|
||||
{
|
||||
if (_dispatching) return;
|
||||
if (!ShouldForward(type)) return;
|
||||
if (condition != null && condition.StartsWith(SelfPrefix, StringComparison.Ordinal)) return;
|
||||
|
||||
_dispatching = true;
|
||||
try
|
||||
{
|
||||
if (type == LogType.Exception)
|
||||
_native.LogException(condition, stack);
|
||||
else
|
||||
_native.Log(Severity(type), condition);
|
||||
}
|
||||
finally
|
||||
{
|
||||
_dispatching = false;
|
||||
}
|
||||
}
|
||||
|
||||
private bool ShouldForward(LogType actual) => Rank(actual) >= Rank(_min);
|
||||
|
||||
private static int Rank(LogType t) => t switch
|
||||
{
|
||||
LogType.Log => 0,
|
||||
LogType.Warning => 1,
|
||||
LogType.Error => 2,
|
||||
LogType.Assert => 2,
|
||||
LogType.Exception => 3,
|
||||
_ => 0,
|
||||
};
|
||||
|
||||
private static string Severity(LogType t) => t switch
|
||||
{
|
||||
LogType.Warning => "warn",
|
||||
LogType.Error => "error",
|
||||
LogType.Assert => "error",
|
||||
LogType.Exception => "error",
|
||||
_ => "info",
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dc803059ceea74ae19a6e02ba5292d3e
|
||||
@@ -132,6 +132,19 @@ TextureImporter:
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
|
||||
@@ -132,6 +132,19 @@ TextureImporter:
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
|
||||
@@ -132,6 +132,19 @@ TextureImporter:
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
|
||||
@@ -132,6 +132,19 @@ TextureImporter:
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
|
||||
@@ -132,6 +132,19 @@ TextureImporter:
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
|
||||
@@ -132,6 +132,19 @@ TextureImporter:
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
|
||||
@@ -132,6 +132,19 @@ TextureImporter:
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
|
||||
@@ -132,6 +132,19 @@ TextureImporter:
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
|
||||
@@ -132,6 +132,19 @@ TextureImporter:
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
|
||||
@@ -132,6 +132,19 @@ TextureImporter:
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
|
||||
@@ -132,6 +132,19 @@ TextureImporter:
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
|
||||
@@ -132,6 +132,19 @@ TextureImporter:
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
|
||||
@@ -132,6 +132,19 @@ TextureImporter:
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
|
||||
@@ -132,6 +132,19 @@ TextureImporter:
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
|
||||
@@ -132,6 +132,19 @@ TextureImporter:
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
|
||||
@@ -190,7 +190,6 @@ GameObject:
|
||||
m_Component:
|
||||
- component: {fileID: 8491537762459218466}
|
||||
- component: {fileID: 1250119535610353713}
|
||||
- component: {fileID: 3115883605324534662}
|
||||
m_Layer: 5
|
||||
m_Name: DogColoring
|
||||
m_TagString: Untagged
|
||||
@@ -229,36 +228,6 @@ CanvasRenderer:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5797023492298654107}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &3115883605324534662
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5797023492298654107}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 0}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &8346443913795904020
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
|
||||
@@ -59,7 +59,7 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 0.4433962, g: 0.4433962, b: 0.4433962, a: 1}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
@@ -149,7 +149,7 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 0.4433962, g: 0.4433962, b: 0.4433962, a: 1}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
|
||||
@@ -130,6 +130,18 @@ PrefabInstance:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 3764323147721730535}
|
||||
m_Modifications:
|
||||
- target: {fileID: 1825175764228994942, guid: ed3abc5b1c6bc43938850705ab3e4d4b, type: 3}
|
||||
propertyPath: m_Color.b
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1825175764228994942, guid: ed3abc5b1c6bc43938850705ab3e4d4b, type: 3}
|
||||
propertyPath: m_Color.g
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1825175764228994942, guid: ed3abc5b1c6bc43938850705ab3e4d4b, type: 3}
|
||||
propertyPath: m_Color.r
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3648889831887995107, guid: ed3abc5b1c6bc43938850705ab3e4d4b, type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
value: 0.5
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
8
Assets/Darkmatter/Data/LogRocket.meta
Normal file
8
Assets/Darkmatter/Data/LogRocket.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7d584da7b1c8440fe8ff30960aada7be
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
23
Assets/Darkmatter/Data/LogRocket/LogRocketConfig.asset
Normal file
23
Assets/Darkmatter/Data/LogRocket/LogRocketConfig.asset
Normal file
@@ -0,0 +1,23 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: e20e49adf823a4918b4b7823d203a28b, type: 3}
|
||||
m_Name: LogRocketConfig
|
||||
m_EditorClassIdentifier: Services.LogRocket::Darkmatter.Services.LogRocket.Configuration.LogRocketConfig
|
||||
AppId: kzvc7x/colorbook
|
||||
ForwardUnityLogs: 1
|
||||
MinimumLogType: 2
|
||||
EnableSessionReplay: 1
|
||||
CaptureIntervalSeconds: 2
|
||||
MaxFrameWidth: 720
|
||||
JpegQuality: 60
|
||||
DisableInEditor: 0
|
||||
AutoStart: 1
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 871929be2f34749828c97ad3f04b1ef9
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1004,6 +1004,51 @@ CanvasRenderer:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 336045569}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!1 &341339037
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 341339038}
|
||||
- component: {fileID: 341339039}
|
||||
m_Layer: 0
|
||||
m_Name: LogRocketModule
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &341339038
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 341339037}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1050564725}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &341339039
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 341339037}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f78e90a5f08704f62b3624ff47ebf66c, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Services.LogRocket::Darkmatter.Services.LogRocket.Installers.LogRocketModule
|
||||
_config: {fileID: 11400000, guid: 871929be2f34749828c97ad3f04b1ef9, type: 2}
|
||||
--- !u!1 &355949970
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -1386,6 +1431,63 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: aa578cd62ad074dbf91b5228c3ac667e, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Features.DrawingTemplates::Darkmatter.Features.DrawingTemplates.DrawingTemplateFeatureModule
|
||||
--- !u!1001 &673724413
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 0}
|
||||
m_Modifications:
|
||||
- target: {fileID: 6207133488976360133, guid: 0bfe3b149145747cc92dc53bb4df4e9b, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 1021.8063
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6207133488976360133, guid: 0bfe3b149145747cc92dc53bb4df4e9b, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 101.14081
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6207133488976360133, guid: 0bfe3b149145747cc92dc53bb4df4e9b, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6207133488976360133, guid: 0bfe3b149145747cc92dc53bb4df4e9b, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6207133488976360133, guid: 0bfe3b149145747cc92dc53bb4df4e9b, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6207133488976360133, guid: 0bfe3b149145747cc92dc53bb4df4e9b, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6207133488976360133, guid: 0bfe3b149145747cc92dc53bb4df4e9b, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6207133488976360133, guid: 0bfe3b149145747cc92dc53bb4df4e9b, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6207133488976360133, guid: 0bfe3b149145747cc92dc53bb4df4e9b, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6207133488976360133, guid: 0bfe3b149145747cc92dc53bb4df4e9b, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7315102894599890749, guid: 0bfe3b149145747cc92dc53bb4df4e9b, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: AppsFlyerObject
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects: []
|
||||
m_AddedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: 0bfe3b149145747cc92dc53bb4df4e9b, type: 3}
|
||||
--- !u!1 &752713006
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -1628,6 +1730,7 @@ Transform:
|
||||
- {fileID: 361052051}
|
||||
- {fileID: 1707278033}
|
||||
- {fileID: 164240470}
|
||||
- {fileID: 341339038}
|
||||
m_Father: {fileID: 1798580248}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &1156238479
|
||||
@@ -2211,6 +2314,7 @@ MonoBehaviour:
|
||||
- {fileID: 361052052}
|
||||
- {fileID: 1707278034}
|
||||
- {fileID: 164240471}
|
||||
- {fileID: 341339039}
|
||||
--- !u!1 &1890425864
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -2442,4 +2546,5 @@ SceneRoots:
|
||||
- {fileID: 109717503}
|
||||
- {fileID: 1424266587}
|
||||
- {fileID: 196669903}
|
||||
- {fileID: 673724413}
|
||||
- {fileID: 1156238481}
|
||||
|
||||
@@ -119,143 +119,6 @@ NavMeshSettings:
|
||||
debug:
|
||||
m_Flags: 0
|
||||
m_NavMeshData: {fileID: 0}
|
||||
--- !u!1 &131698920
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 131698921}
|
||||
- component: {fileID: 131698923}
|
||||
- component: {fileID: 131698922}
|
||||
m_Layer: 5
|
||||
m_Name: Text (TMP)
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &131698921
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 131698920}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 202036418}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &131698922
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 131698920}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: 1
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: dde468a43b0440f4a9d121fb1d8f290e, type: 2}
|
||||
m_sharedMaterial: {fileID: -1548830327015913602, guid: dde468a43b0440f4a9d121fb1d8f290e, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_fontColorGradientPreset: {fileID: 0}
|
||||
m_spriteAsset: {fileID: 0}
|
||||
m_tintAllSprites: 0
|
||||
m_StyleSheet: {fileID: 0}
|
||||
m_TextStyleHashCode: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 32
|
||||
m_fontSizeBase: 32
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 2
|
||||
m_VerticalAlignment: 512
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_characterHorizontalScale: 1
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
m_lineSpacingMax: 0
|
||||
m_paragraphSpacing: 0
|
||||
m_charWidthMaxAdj: 0
|
||||
m_TextWrappingMode: 1
|
||||
m_wordWrappingRatios: 0.4
|
||||
m_overflowMode: 0
|
||||
m_linkedTextComponent: {fileID: 0}
|
||||
parentLinkedComponent: {fileID: 0}
|
||||
m_enableKerning: 0
|
||||
m_ActiveFontFeatures: 6e72656b
|
||||
m_enableExtraPadding: 0
|
||||
checkPaddingRequired: 0
|
||||
m_isRichText: 1
|
||||
m_EmojiFallbackSupport: 1
|
||||
m_parseCtrlCharacters: 1
|
||||
m_isOrthographic: 1
|
||||
m_isCullingEnabled: 0
|
||||
m_horizontalMapping: 0
|
||||
m_verticalMapping: 0
|
||||
m_uvLineOffset: 0
|
||||
m_geometrySortingOrder: 0
|
||||
m_IsTextObjectScaleStatic: 0
|
||||
m_VertexBufferAutoSizeReduction: 0
|
||||
m_useMaxVisibleDescender: 1
|
||||
m_pageToDisplay: 1
|
||||
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_baseMaterial: {fileID: 0}
|
||||
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||
--- !u!222 &131698923
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 131698920}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!1001 &147491941
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -373,127 +236,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: d635629f252db53479e66347a37c4f0b, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Features.Artbook::Darkmatter.Features.Artbook.ArtbookView
|
||||
--- !u!1 &202036417
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 202036418}
|
||||
- component: {fileID: 202036421}
|
||||
- component: {fileID: 202036420}
|
||||
- component: {fileID: 202036419}
|
||||
m_Layer: 5
|
||||
m_Name: Page
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &202036418
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 202036417}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 131698921}
|
||||
m_Father: {fileID: 1731001029}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 313.3512, y: -34.1445}
|
||||
m_SizeDelta: {x: 60, y: 60}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &202036419
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 202036417}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Button
|
||||
m_Navigation:
|
||||
m_Mode: 3
|
||||
m_WrapAround: 0
|
||||
m_SelectOnUp: {fileID: 0}
|
||||
m_SelectOnDown: {fileID: 0}
|
||||
m_SelectOnLeft: {fileID: 0}
|
||||
m_SelectOnRight: {fileID: 0}
|
||||
m_Transition: 1
|
||||
m_Colors:
|
||||
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
|
||||
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
|
||||
m_ColorMultiplier: 1
|
||||
m_FadeDuration: 0.1
|
||||
m_SpriteState:
|
||||
m_HighlightedSprite: {fileID: 0}
|
||||
m_PressedSprite: {fileID: 0}
|
||||
m_SelectedSprite: {fileID: 0}
|
||||
m_DisabledSprite: {fileID: 0}
|
||||
m_AnimationTriggers:
|
||||
m_NormalTrigger: Normal
|
||||
m_HighlightedTrigger: Highlighted
|
||||
m_PressedTrigger: Pressed
|
||||
m_SelectedTrigger: Selected
|
||||
m_DisabledTrigger: Disabled
|
||||
m_Interactable: 1
|
||||
m_TargetGraphic: {fileID: 202036420}
|
||||
m_OnClick:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
--- !u!114 &202036420
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 202036417}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 21300000, guid: 091e267540bec4946a781d62b879d527, type: 3}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 1
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!222 &202036421
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 202036417}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!1 &526134094
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -524,9 +266,9 @@ RectTransform:
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 669480396}
|
||||
- {fileID: 897161407}
|
||||
- {fileID: 2123251731}
|
||||
- {fileID: 669480396}
|
||||
m_Father: {fileID: 2009173633}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
@@ -607,143 +349,6 @@ RectTransform:
|
||||
m_AnchoredPosition: {x: 1.1312256, y: -66.99341}
|
||||
m_SizeDelta: {x: 1861.6653, y: 148}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1 &549774899
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 549774900}
|
||||
- component: {fileID: 549774902}
|
||||
- component: {fileID: 549774901}
|
||||
m_Layer: 5
|
||||
m_Name: Text (TMP)
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &549774900
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 549774899}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1053034917}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &549774901
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 549774899}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: 2
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: dde468a43b0440f4a9d121fb1d8f290e, type: 2}
|
||||
m_sharedMaterial: {fileID: -1548830327015913602, guid: dde468a43b0440f4a9d121fb1d8f290e, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_fontColorGradientPreset: {fileID: 0}
|
||||
m_spriteAsset: {fileID: 0}
|
||||
m_tintAllSprites: 0
|
||||
m_StyleSheet: {fileID: 0}
|
||||
m_TextStyleHashCode: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 32
|
||||
m_fontSizeBase: 32
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 2
|
||||
m_VerticalAlignment: 512
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_characterHorizontalScale: 1
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
m_lineSpacingMax: 0
|
||||
m_paragraphSpacing: 0
|
||||
m_charWidthMaxAdj: 0
|
||||
m_TextWrappingMode: 1
|
||||
m_wordWrappingRatios: 0.4
|
||||
m_overflowMode: 0
|
||||
m_linkedTextComponent: {fileID: 0}
|
||||
parentLinkedComponent: {fileID: 0}
|
||||
m_enableKerning: 0
|
||||
m_ActiveFontFeatures: 6e72656b
|
||||
m_enableExtraPadding: 0
|
||||
checkPaddingRequired: 0
|
||||
m_isRichText: 1
|
||||
m_EmojiFallbackSupport: 1
|
||||
m_parseCtrlCharacters: 1
|
||||
m_isOrthographic: 1
|
||||
m_isCullingEnabled: 0
|
||||
m_horizontalMapping: 0
|
||||
m_verticalMapping: 0
|
||||
m_uvLineOffset: 0
|
||||
m_geometrySortingOrder: 0
|
||||
m_IsTextObjectScaleStatic: 0
|
||||
m_VertexBufferAutoSizeReduction: 0
|
||||
m_useMaxVisibleDescender: 1
|
||||
m_pageToDisplay: 1
|
||||
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_baseMaterial: {fileID: 0}
|
||||
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||
--- !u!222 &549774902
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 549774899}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!1 &669480395
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -1198,127 +803,6 @@ CanvasRenderer:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 897161406}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!1 &1053034916
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1053034917}
|
||||
- component: {fileID: 1053034920}
|
||||
- component: {fileID: 1053034919}
|
||||
- component: {fileID: 1053034918}
|
||||
m_Layer: 5
|
||||
m_Name: Page
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &1053034917
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1053034916}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 549774900}
|
||||
m_Father: {fileID: 1731001029}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 393.3512, y: -34.1445}
|
||||
m_SizeDelta: {x: 60, y: 60}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &1053034918
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1053034916}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Button
|
||||
m_Navigation:
|
||||
m_Mode: 3
|
||||
m_WrapAround: 0
|
||||
m_SelectOnUp: {fileID: 0}
|
||||
m_SelectOnDown: {fileID: 0}
|
||||
m_SelectOnLeft: {fileID: 0}
|
||||
m_SelectOnRight: {fileID: 0}
|
||||
m_Transition: 1
|
||||
m_Colors:
|
||||
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
|
||||
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
|
||||
m_ColorMultiplier: 1
|
||||
m_FadeDuration: 0.1
|
||||
m_SpriteState:
|
||||
m_HighlightedSprite: {fileID: 0}
|
||||
m_PressedSprite: {fileID: 0}
|
||||
m_SelectedSprite: {fileID: 0}
|
||||
m_DisabledSprite: {fileID: 0}
|
||||
m_AnimationTriggers:
|
||||
m_NormalTrigger: Normal
|
||||
m_HighlightedTrigger: Highlighted
|
||||
m_PressedTrigger: Pressed
|
||||
m_SelectedTrigger: Selected
|
||||
m_DisabledTrigger: Disabled
|
||||
m_Interactable: 1
|
||||
m_TargetGraphic: {fileID: 1053034919}
|
||||
m_OnClick:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
--- !u!114 &1053034919
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1053034916}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 21300000, guid: 091e267540bec4946a781d62b879d527, type: 3}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 1
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!222 &1053034920
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1053034916}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!1 &1095289318
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -1380,6 +864,8 @@ MonoBehaviour:
|
||||
scrollRect: {fileID: 669480397}
|
||||
leftPageButton: {fileID: 897161408}
|
||||
rightPageButton: {fileID: 2123251732}
|
||||
pageNumberContainer: {fileID: 1731001029}
|
||||
pageNumberPrefab: {fileID: 3226564519879755199, guid: 55932c52c9d698a4384b59169abe3488, type: 3}
|
||||
--- !u!1 &1139509438
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -1487,7 +973,6 @@ RectTransform:
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 1811707691}
|
||||
- {fileID: 1731001029}
|
||||
m_Father: {fileID: 669480396}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
@@ -2164,7 +1649,7 @@ GameObject:
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &1731001029
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -2172,18 +1657,16 @@ RectTransform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1731001028}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 202036418}
|
||||
- {fileID: 1053034917}
|
||||
m_Father: {fileID: 1157581243}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 2009173633}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 7.6782227, y: -367.36002}
|
||||
m_AnchorMin: {x: 0.5, y: 0}
|
||||
m_AnchorMax: {x: 0.5, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 77}
|
||||
m_SizeDelta: {x: 706.7024, y: 68.289}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &1731001030
|
||||
@@ -2269,8 +1752,8 @@ MonoBehaviour:
|
||||
m_StartAxis: 0
|
||||
m_CellSize: {x: 355, y: 310}
|
||||
m_Spacing: {x: 30, y: 25}
|
||||
m_Constraint: 1
|
||||
m_ConstraintCount: 4
|
||||
m_Constraint: 2
|
||||
m_ConstraintCount: 2
|
||||
--- !u!114 &1811707693
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -2528,6 +2011,7 @@ RectTransform:
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 526134095}
|
||||
- {fileID: 1731001029}
|
||||
m_Father: {fileID: 1095289319}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
|
||||
Reference in New Issue
Block a user