Tutorial done

This commit is contained in:
Savya Bikram Shah
2026-06-03 10:53:45 +05:45
parent f81a17e1f5
commit 0bfcfa3038
68 changed files with 9023 additions and 5926 deletions

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: d63726aaa9398f341a1a923bc039c446
guid: fac6898f446df4a8e994fa47eed10068
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@@ -0,0 +1,14 @@
namespace Darkmatter.Core.Contracts.Features.Tutorial
{
/// <summary>
/// Decides whether the one-time tutorial should run, and records that it has been completed.
/// </summary>
public interface ITutorialGate
{
/// <summary>True only for a genuine first-time player who has not finished the tutorial.</summary>
bool ShouldRun { get; }
/// <summary>Persist that the tutorial is done so it never runs again.</summary>
void MarkCompleted();
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: e7c2fc9f6a9354a068fdc7d9ed5aa4ad

View File

@@ -0,0 +1,36 @@
using System.Threading;
using Cysharp.Threading.Tasks;
using UnityEngine;
namespace Darkmatter.Core.Contracts.Features.Tutorial
{
/// <summary>
/// Full-screen guidance overlay: a dim frame with a cut-out "hole" over a target element,
/// an animated hand + halo, and an instruction bubble. Lives on a persistent root-scoped
/// Canvas so it survives scene swaps (mirrors the loading screen).
/// </summary>
public interface ITutorialOverlay
{
/// <summary>True once the view is initialised and safe to drive.</summary>
bool IsReady { get; }
/// <summary>
/// Spotlight a single tap target. When <paramref name="target"/> is null the dim/hole are
/// skipped and only a centered bubble is shown (a non-blocking hint).
/// When <paramref name="blockInput"/> is true every touch outside the hole is swallowed.
/// </summary>
void ShowTap(RectTransform target, string message, bool blockInput);
/// <summary>
/// Spotlight a drag gesture from <paramref name="from"/> to <paramref name="to"/>. Input is
/// never blocked here, so the dragged piece can render above the dim.
/// </summary>
void ShowDrag(RectTransform from, RectTransform to, string message);
/// <summary>Hide everything immediately (used across scene swaps).</summary>
void HideInstant();
/// <summary>Show a centered celebratory bubble for a short beat, then hide.</summary>
UniTask ShowToastAsync(string message, CancellationToken ct);
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 1fae7a22d89c64857af91268a55bd564

View File

@@ -0,0 +1,6 @@
using UnityEngine;
namespace Darkmatter.Core.Data.Signals.Features.Coloring
{
public record struct ColorSelectedSignal(int Index, Color Color);
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: df1823d5d5df7469781b42466c308ecc

View File

@@ -0,0 +1,6 @@
namespace Darkmatter.Core
{
// Published by the catalog presenter once the drawing grid is populated and on screen.
// Namespace matches the sibling OpenColorBookSignal so existing catalog code needs no new using.
public record struct DrawingCatalogReadySignal;
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: e71fd9bc94a644ced8b0a141f058291b

View File

@@ -1,5 +1,6 @@
fileFormatVersion: 2
guid: 3509e33d6780510448b1f27a6ad6b84f
guid: 3aee861659cfe43c4b48d513479c2d7d
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:

View File

@@ -0,0 +1,4 @@
namespace Darkmatter.Core.Data.Signals.Features.Tutorial
{
public record struct TutorialCompletedSignal;
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: e3b50d1afc8134a0f8ae92b6c0590bdb

View File

@@ -0,0 +1,4 @@
namespace Darkmatter.Core.Data.Signals.Features.Tutorial
{
public record struct TutorialStartedSignal;
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 3aeb975bb1d6a45aca5c86ddf72bee22

View File

@@ -0,0 +1,4 @@
namespace Darkmatter.Core.Data.Signals.Features.Tutorial
{
public record struct TutorialStepCompletedSignal(string StepId, int StepIndex);
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 11b2e1b23836f4664be3a84389c1c364

View File

@@ -1,5 +1,6 @@
fileFormatVersion: 2
guid: 147272ca7efe70f41b90c3b9abf1597e
guid: 1cda3e3840cbd4eccbe7ad810dee920d
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:

View File

@@ -0,0 +1,43 @@
using UnityEngine;
namespace Darkmatter.Core.Data.Static.Features.Tutorial
{
/// <summary>
/// Designer-tunable copy and timing for the one-time onboarding tutorial. The step *sequence*
/// is fixed in TutorialDirector; only the wording, the spotlight padding and the per-step
/// watchdog timeout live here.
/// </summary>
[CreateAssetMenu(fileName = "TutorialStepsConfig",
menuName = "Darkmatter/Tutorial/Steps Config")]
public sealed class TutorialStepsConfig : ScriptableObject
{
[Header("Step copy (kept short for young readers)")]
[SerializeField] private string pickText = "Pick a picture to start!";
[SerializeField] private string dragText = "Drag the piece to its spot!";
[SerializeField] private string finishText = "Now finish the puzzle!";
[SerializeField] private string colorText = "Choose a color!";
[SerializeField] private string paintText = "Tap the picture to color it!";
[SerializeField] private string nextText = "Tap Next when you're done!";
[SerializeField] private string doneText = "Yay! You did it!";
[Header("Watchdog")]
[Tooltip("Timeout (s) while waiting for a SYSTEM precondition (scene/catalog/regions ready). If it " +
"doesn't arrive the tutorial fails open so the player is never trapped.")]
[SerializeField] private float stepTimeoutSeconds = 45f;
[Tooltip("Timeout (s) while waiting for the CHILD's own action (drag/tap/paint). 0 = no timeout: " +
"the hint stays until they do it. Set a large value if you want a safety net instead.")]
[SerializeField] private float actionTimeoutSeconds;
public string PickText => pickText;
public string DragText => dragText;
public string FinishText => finishText;
public string ColorText => colorText;
public string PaintText => paintText;
public string NextText => nextText;
public string DoneText => doneText;
public float StepTimeoutSeconds => stepTimeoutSeconds;
public float ActionTimeoutSeconds => actionTimeoutSeconds;
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 5c513430cc85f4357b3df1da019bf554

View File

@@ -1,11 +1,20 @@
using System;
using Darkmatter.Core.Contracts.Features.Coloring;
using Darkmatter.Core.Data.Signals.Features.Coloring;
using Darkmatter.Libs.Observer;
using UnityEngine;
namespace Darkmatter.Features.Coloring.Systems;
public class ColoringStateRepository
{
private readonly IEventBus _bus;
public ColoringStateRepository(IEventBus bus)
{
_bus = bus;
}
public IColorPalette SelectedPalette { get; private set; }
public int SelectedIndex { get; private set; }
public Color SelectedColor =>
@@ -29,5 +38,9 @@ public class ColoringStateRepository
if (idx < 0) return;
SelectedIndex = idx;
SelectedIndexChanged?.Invoke();
// Surface the user's colour pick on the bus so the tutorial (a root-scoped service that
// can't reach this scene-scoped repository directly) can detect it. Only fires on an actual
// SelectColor — not on the default selection made in SetPalette.
_bus.Publish(new ColorSelectedSignal(idx, color));
}
}

View File

@@ -122,6 +122,9 @@ namespace Darkmatter.Features.DrawingCatalog
// Unblock InitializeAsync: items are now on screen, so the loading screen can hide.
_controller.NotifyPopulated();
// Cue the first-run tutorial that the catalog grid is on screen and tappable.
_eventBus.Publish(new DrawingCatalogReadySignal());
}
public void Dispose()

View File

@@ -1,5 +1,6 @@
fileFormatVersion: 2
guid: 8f948c844c48b42479fbc2aea5142bc1
guid: 5913ea683733a4597b3cf6b3903811a0
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: d69b43c419c8d4f13b930f1dc30359ff
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,31 @@
#if UNITY_EDITOR
using Darkmatter.Features.Tutorial.Systems;
using Darkmatter.Libs.PlayerPrefs;
using UnityEditor;
using UnityEngine;
namespace Darkmatter.Features.Tutorial.Editor
{
/// <summary>
/// QA helpers for the forced-once tutorial (editor only — stripped from player builds).
/// </summary>
public static class TutorialDebugMenu
{
[MenuItem("Tools/Darkmatter/Tutorial/Reset (run again next launch)")]
public static void Reset()
{
ProtectedPlayerPrefs.SetBool(TutorialGateService.CompletedKey, false);
ProtectedPlayerPrefs.Save();
Debug.Log("[Tutorial] Reset. Note: it also requires zero completed drawings to run.");
}
[MenuItem("Tools/Darkmatter/Tutorial/Mark Completed (skip)")]
public static void MarkCompleted()
{
ProtectedPlayerPrefs.SetBool(TutorialGateService.CompletedKey, true);
ProtectedPlayerPrefs.Save();
Debug.Log("[Tutorial] Marked completed — it will not run.");
}
}
}
#endif

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 9a54326b3914a43ffa206b427980908e

View File

@@ -0,0 +1,27 @@
{
"name": "Features.Tutorial",
"rootNamespace": "Darkmatter.Features.Tutorial",
"references": [
"GUID:6a0a834eb41764f12ba55c3fb04a40cb",
"GUID:b4c9f7fbf1e144933a1797dc208ece5f",
"GUID:c1c03c0e5b2f4412b9f2be1c20d6a9b1",
"GUID:564d11c0820a9455c8821cd85e9d0fd1",
"GUID:2ca8c3a66565544118d3d52d3922933b",
"GUID:4cede189a43c349069c614e305683720",
"GUID:eb9b7ee4936ff42bebd83ca110182103",
"GUID:995166e584dda4ff98501f62b07aa9cb",
"GUID:b0214a6008ed146ff8f122a6a9c2f6cc",
"GUID:f51ebe6a0ceec4240a699833d6309b23",
"GUID:80ecb87cae9c44d19824e70ea7229748",
"GUID:6055be8ebefd69e48b49212b09b47b2f"
],
"includePlatforms": [],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: a6beea6626ba14397b6be37b16032fb5
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: ed3d9a0f27b0a486ab8dfe44d39ce2f9
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,34 @@
using Darkmatter.Core.Contracts.Features.Tutorial;
using Darkmatter.Core.Data.Static.Features.Tutorial;
using Darkmatter.Features.Tutorial.Systems;
using Darkmatter.Features.Tutorial.UI;
using Darkmatter.Libs.Installers;
using UnityEngine;
using VContainer;
using VContainer.Unity;
namespace Darkmatter.Features.Tutorial.Installers
{
/// <summary>
/// Registers the tutorial in the Boot scene's RootLifetimeScope so the director, overlay and
/// gate are single instances that survive every Colorbook -> Gameplay scene swap (same pattern
/// as the loading screen). Drop this component on a GameObject in the Boot scene and add it to
/// RootLifetimeScope.serviceModules.
/// </summary>
public class TutorialFeatureModule : MonoBehaviour, IModule
{
[SerializeField] private TutorialOverlayView overlayView;
[SerializeField] private TutorialStepsConfig config;
public void Register(IContainerBuilder builder)
{
if (overlayView != null)
builder.RegisterComponent<ITutorialOverlay>(overlayView);
if (config != null)
builder.RegisterInstance(config);
builder.Register<ITutorialGate, TutorialGateService>(Lifetime.Singleton);
builder.RegisterEntryPoint<TutorialDirector>();
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 97ce2c486cc8541d1ab1d83fda7f8eda

View File

@@ -0,0 +1,69 @@
# Tutorial — Unity Editor setup
All C# is in place. These steps are the GUI wiring the code can't do. The tutorial is **forced
once**: a first-time player (no completed drawings, flag unset) is guided through pick → drag →
finish → pick colour → paint → Next, with a watchdog that fails open if anything stalls.
## 1. Create the config asset
- Project window → right-click → **Create ▸ Darkmatter ▸ Tutorial ▸ Steps Config**.
- Save as `Assets/Darkmatter/Data/Settings/Tutorial/TutorialStepsConfig.asset`.
- Edit the step copy / watchdog timeout if desired.
## 2. Overlay prefab — single-image circular cutout
`Assets/Darkmatter/Content/Colorbook UI/Prefabs/UI/TutorialOverlayCanvas.prefab`. Target hierarchy:
```
TutorialOverlayCanvas Canvas (Overlay, Sort Order 5000) + CanvasScaler + GraphicRaycaster
+ CanvasGroup + TutorialFeatureModule (overlayView + config assigned)
Area full-stretch RectTransform (pivot 0.5) + TutorialOverlayView
Dim ONE full-stretch black Image, raycast ON, + TutorialCutoutDim component
Halo ring sprite, raycast OFF
Hand hand sprite, raycast OFF
BubbleRoot
BubbleBg bubble sprite, raycast OFF
Text TMP_Text (Fredoka SemiBold), raycast OFF
```
The dim is a **single full-screen Image**; the `TutorialCutoutDim` component drives the
`Darkmatter/TutorialCutout` shader to punch a soft **circular hole** over the target, and acts as a
raycast filter so taps inside the hole reach the real button while everything else is blocked.
`TutorialCutoutDim` fields: **Cutout Shader** = `Darkmatter/TutorialCutout`, **Dim Image** = the
Dim's own Image. (It builds a material instance at runtime — no material asset needed.)
`TutorialOverlayView` fields: Canvas, RootGroup (root CanvasGroup), **Cutout** (the Dim's
TutorialCutoutDim), Halo, Hand, BubbleRoot, BubbleText.
Sprites (optional polish) under `Assets/Darkmatter/Content/Colorbook UI/Sprites/Tutorial/`:
ring for Halo, finger for Hand (turn **Preserve Aspect** on), bubble for BubbleBg.
## 3. Put it in the Boot scene
Open `Assets/Darkmatter/Scenes/Boot.unity`:
1. Drag the **TutorialOverlayCanvas** prefab into the scene (persistent — Boot is never unloaded,
like the loading screen).
2. Make sure its `TutorialFeatureModule` **Config** field points at `TutorialStepsConfig.asset`.
3. Select the **RootLifetimeScope** GameObject and add the prefab's root (it carries the
`TutorialFeatureModule`) to the **Service Modules** array — same as every other root module.
That's the whole wiring: assign config + drop in Boot + add to serviceModules.
## 4. (Optional) register the prefs key for documentation
The flag is stored via `ProtectedPlayerPrefs` under the key `Tutorial.Completed` (hashed, no
registry validation — it already works). To list it in the editor for clarity, add it via
**Tools ▸ Darkmatter ▸ PlayerPrefs Editor** (type Bool).
## 5. Test
- **Tools ▸ Darkmatter ▸ Tutorial ▸ Reset**, and clear progression (so there are no completed
drawings), then Play from **Boot**.
- After the intro you should be guided through the whole loop. Relaunch → it must NOT reappear.
- See the verification checklist in `/Users/darkmatter/.claude/plans/help-me-design-a-splendid-hearth.md`.
## How it hooks in (no gameplay prefab changes needed)
- The director (root singleton) arms on `IntroCompletedSignal`, then awaits existing gameplay
signals one per step. Spawned targets (catalog cell, piece, colour button, region, Next) are
found at runtime with `FindObjectsByType`, so no scene wiring of targets is required.
- Two tiny signals were added for things Find can't observe: `DrawingCatalogReadySignal`
(catalog presenter) and `ColorSelectedSignal` (coloring state repository).
- Input gating is the overlay CanvasGroup's `blocksRaycasts`: ON for blocking tap steps (dim
swallows touches, the empty hole passes through to the real button), OFF for the drag step so the
piece stays visible and draggable.

View File

@@ -1,6 +1,6 @@
fileFormatVersion: 2
guid: 95b36b0e05811724fa9ff82f0e1b72ed
DefaultImporter:
guid: c9fcf6edd0d00433bb41f63ff3b4b1b7
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: bc34be257ded14eacbf3059d20b0c758
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,374 @@
using System;
using System.Collections.Generic;
using System.Threading;
using Cysharp.Threading.Tasks;
using Darkmatter.Core; // DrawingCatalogReadySignal, OpenArtBook/ColorBook, ReturnToMainMenu
using Darkmatter.Core.Contracts.Features.Tutorial;
using Darkmatter.Core.Data.Signals.Features.AppBoot; // IntroCompletedSignal
using Darkmatter.Core.Data.Signals.Features.Coloring; // ColorApplied/ColorSelected/RegionsInitialized
using Darkmatter.Core.Data.Signals.Features.Drawing; // DrawingSelectedSignal
using Darkmatter.Core.Data.Signals.Features.GameplayFlow; // DrawingCompletedSignal
using Darkmatter.Core.Data.Signals.Features.ShapeBuilder; // ShapeBuilderStarted/PieceSnapped/ShapeAssembled
using Darkmatter.Core.Data.Signals.Features.Tutorial;
using Darkmatter.Core.Data.Static.Features.Tutorial;
using Darkmatter.Features.Coloring.UI; // ColorButton, ColorRegionView
using Darkmatter.Features.DrawingCatalog; // DrawingCatalogButton
using Darkmatter.Features.GameplayFlow.UI; // NextButtonView
using Darkmatter.Features.ShapeBuilder.UI; // ShapePiece, SlotMarker
using Darkmatter.Libs.Observer;
using UnityEngine;
using UnityEngine.UI;
using VContainer.Unity;
namespace Darkmatter.Features.Tutorial.Systems
{
/// <summary>
/// Drives the one-time, forced guided tutorial. A single root-scoped singleton that arms on
/// <see cref="IntroCompletedSignal"/> and walks a fixed, linear sequence by awaiting one gameplay
/// signal per step. Watchdog timeouts make every wait fail open so a child is never trapped.
///
/// Navigation is handled so the overlay never gets stranded: opening the ArtBook or leaving to
/// the menu hides it (and re-shows the current step on return), and going Back to the catalog
/// mid-gameplay restarts the tutorial from step 1. A generation counter keeps a restarted run
/// from racing the cancelled one. Targets are found at runtime via FindObjectsByType.
/// </summary>
public sealed class TutorialDirector : IStartable, IDisposable
{
private readonly IEventBus _bus;
private readonly ITutorialOverlay _overlay;
private readonly ITutorialGate _gate;
private readonly TutorialStepsConfig _config;
private IDisposable _introSub;
private readonly List<IDisposable> _navSubs = new();
private CancellationTokenSource _runCts;
private CancellationToken _ct;
private bool _completed;
private bool _suspended;
private Action _reshow;
private int _stepIndex;
private int _gen;
public TutorialDirector(IEventBus bus, ITutorialOverlay overlay, ITutorialGate gate, TutorialStepsConfig config)
{
_bus = bus;
_overlay = overlay;
_gate = gate;
_config = config;
}
public void Start()
{
_introSub = _bus.Subscribe<IntroCompletedSignal>(OnIntroCompleted);
}
private void OnIntroCompleted(IntroCompletedSignal _)
{
_introSub?.Dispose();
_introSub = null;
if (!_gate.ShouldRun) return;
// Run-lifetime navigation handling (persists across restarts).
_navSubs.Add(_bus.Subscribe<OpenArtBookSignal>(_ => Suspend()));
_navSubs.Add(_bus.Subscribe<ReturnToMainMenuSignal>(_ => Suspend()));
_navSubs.Add(_bus.Subscribe<OpenColorBookSignal>(_ => Resume()));
_navSubs.Add(_bus.Subscribe<DrawingCatalogReadySignal>(OnCatalogReadyGlobal));
StartRun(skipCatalogWait: false);
}
private void StartRun(bool skipCatalogWait)
{
_runCts?.Cancel();
_runCts?.Dispose();
_runCts = new CancellationTokenSource();
_ct = _runCts.Token;
_gen++;
_suspended = false;
_reshow = null;
_stepIndex = 0;
_overlay.HideInstant();
RunAsync(_gen, skipCatalogWait).Forget();
}
// Opening the ArtBook / leaving to menu: hide the overlay but keep awaiting the current step.
private void Suspend()
{
_suspended = true;
_overlay.HideInstant();
}
// Returning to the colour book (ArtBook closed): re-show the current step.
private void Resume()
{
if (!_suspended) return;
_suspended = false;
_reshow?.Invoke();
}
// The catalog re-appeared while we were mid-gameplay -> the player went Back. Restart from
// step 1 (the catalog is already on screen, so skip the wait). Excludes step 6+, whose own
// completion loads the catalog.
private void OnCatalogReadyGlobal(DrawingCatalogReadySignal _)
{
if (!_completed && _stepIndex >= 2 && _stepIndex <= 5)
StartRun(skipCatalogWait: true);
}
private void ShowStep(Action show)
{
_reshow = show;
if (!_suspended) show();
}
private async UniTaskVoid RunAsync(int gen, bool skipCatalogWait)
{
if (gen == _gen) _bus.Publish(new TutorialStartedSignal());
try
{
await StepsAsync(skipCatalogWait);
if (gen == _gen) Complete();
}
catch (OperationCanceledException)
{
// Cancelled by a restart or app shutdown — the newer run (if any) owns the overlay.
}
catch (Exception e)
{
Debug.LogError($"[Tutorial] Aborted with error, failing open: {e}");
if (gen == _gen) Complete();
}
finally
{
if (gen == _gen) _overlay.HideInstant();
}
}
private async UniTask StepsAsync(bool skipCatalogWait)
{
// Step 1 — pick a drawing (Colorbook scene).
_stepIndex = 1;
if (!skipCatalogWait)
{
if (!await WaitForSignalAsync<DrawingCatalogReadySignal>()) return;
}
await UniTask.NextFrame(_ct);
ShowStep(() => ShowBlockingTap(FindFirstCatalogCell(), _config.PickText));
if (!await WaitForActionAsync<DrawingSelectedSignal>()) return;
EndStep("pick", 1);
// Step 2 — drag the first piece (Gameplay scene).
_stepIndex = 2;
if (!await WaitForSignalAsync<ShapeBuilderStartedSignal>()) return;
await UniTask.NextFrame(_ct);
ShowStep(() =>
{
var (pieceRect, slotRect) = FindFirstPieceAndSlot();
if (pieceRect != null) _overlay.ShowDrag(pieceRect, slotRect, _config.DragText);
else Debug.LogWarning("[Tutorial] No draggable piece found for the drag step.");
});
if (!await WaitForActionAsync<PieceSnappedSignal>()) return; // any snap teaches the gesture
EndStep("drag", 2);
// Step 3 — finish the rest of the puzzle freely (non-blocking hint).
_stepIndex = 3;
ShowStep(() => _overlay.ShowTap(null, _config.FinishText, blockInput: false));
if (!await WaitForActionAsync<ShapeAssembledSignal>()) return;
EndStep("finish", 3);
// Step 4 — pick a colour.
_stepIndex = 4;
if (!await WaitForSignalAsync<RegionsInitializedSignal>()) return;
await UniTask.NextFrame(_ct);
ShowStep(() => ShowBlockingTap(FindFirstColorButton(), _config.ColorText));
if (!await WaitForActionAsync<ColorSelectedSignal>()) return;
EndStep("color", 4);
// Step 5 — paint a region.
_stepIndex = 5;
ShowStep(() => ShowBlockingTap(FindLargestRegion(), _config.PaintText));
if (!await WaitForActionAsync<ColorAppliedSignal>()) return;
EndStep("paint", 5);
// Step 6 — press Next.
_stepIndex = 6;
await UniTask.NextFrame(_ct);
ShowStep(() => ShowBlockingTap(FindNextButton(), _config.NextText));
if (!await WaitForActionAsync<DrawingCompletedSignal>()) return;
EndStep("next", 6);
// Step 7 — celebrate.
_stepIndex = 7;
await _overlay.ShowToastAsync(_config.DoneText, _ct);
}
private void ShowBlockingTap(RectTransform target, string message)
{
if (target == null) Debug.LogWarning($"[Tutorial] No target found for step: \"{message}\"");
_overlay.ShowTap(target, message, blockInput: target != null);
}
private void EndStep(string id, int index)
{
_reshow = null;
_bus.Publish(new TutorialStepCompletedSignal(id, index));
_overlay.HideInstant();
}
private void Complete()
{
if (_completed) return;
_completed = true;
_gate.MarkCompleted();
_bus.Publish(new TutorialCompletedSignal());
DisposeNav();
}
// Preconditions (a system/scene must become ready): time out so a stalled load fails open.
private UniTask<bool> WaitForSignalAsync<T>(Func<T, bool> predicate = null) where T : struct =>
WaitCoreAsync(_config.StepTimeoutSeconds, predicate);
// The child's own action (drag/tap/paint): defaults to no timeout (ActionTimeoutSeconds = 0) so
// the hint stays put until they do it; a positive value re-enables a safety net.
private UniTask<bool> WaitForActionAsync<T>(Func<T, bool> predicate = null) where T : struct =>
WaitCoreAsync(_config.ActionTimeoutSeconds, predicate);
private async UniTask<bool> WaitCoreAsync<T>(float timeoutSeconds, Func<T, bool> predicate) where T : struct
{
using var timeoutCts = CancellationTokenSource.CreateLinkedTokenSource(_ct);
var tcs = new UniTaskCompletionSource<bool>();
var sub = _bus.Subscribe<T>(evt =>
{
if (predicate == null || predicate(evt)) tcs.TrySetResult(true);
});
if (timeoutSeconds > 0f) TimeoutAsync(timeoutSeconds, timeoutCts.Token, tcs).Forget();
try
{
using (_ct.Register(() => tcs.TrySetCanceled(_ct)))
return await tcs.Task;
}
finally
{
sub.Dispose();
timeoutCts.Cancel();
}
}
private async UniTaskVoid TimeoutAsync(float seconds, CancellationToken ct, UniTaskCompletionSource<bool> tcs)
{
try
{
await UniTask.Delay(TimeSpan.FromSeconds(seconds), DelayType.UnscaledDeltaTime, cancellationToken: ct);
}
catch (OperationCanceledException)
{
return;
}
tcs.TrySetResult(false);
}
// ── Runtime target discovery ─────────────────────────────────────────
private static RectTransform FindFirstCatalogCell()
{
var buttons = UnityEngine.Object.FindObjectsByType<DrawingCatalogButton>(FindObjectsSortMode.None);
var cell = LowestSiblingActive(buttons);
ScrollToStart(cell); // catalog may be on another page — bring the first item into view
return cell;
}
private static (RectTransform piece, RectTransform slot) FindFirstPieceAndSlot()
{
var pieces = UnityEngine.Object.FindObjectsByType<ShapePiece>(FindObjectsSortMode.None);
ShapePiece piece = null;
foreach (var p in pieces)
{
if (p == null || p.IsLocked || !p.gameObject.activeInHierarchy) continue;
piece = p;
break;
}
if (piece == null) return (null, null);
RectTransform slotRect = null;
var slots = UnityEngine.Object.FindObjectsByType<SlotMarker>(FindObjectsSortMode.None);
foreach (var s in slots)
{
if (s == null || s.IsOccupied) continue;
if (s.SlotId == piece.PieceId) { slotRect = s.RectTransform; break; }
}
return (piece.RectTransform, slotRect);
}
private static RectTransform FindFirstColorButton()
{
var buttons = UnityEngine.Object.FindObjectsByType<ColorButton>(FindObjectsSortMode.None);
return LowestSiblingActive(buttons);
}
private static RectTransform FindLargestRegion()
{
var regions = UnityEngine.Object.FindObjectsByType<ColorRegionView>(FindObjectsSortMode.None);
ColorRegionView best = null;
float bestArea = -1f;
foreach (var r in regions)
{
if (r == null || !r.gameObject.activeInHierarchy) continue;
var size = ((RectTransform)r.transform).rect.size;
var area = Mathf.Abs(size.x * size.y);
if (area > bestArea) { bestArea = area; best = r; }
}
return best != null ? (RectTransform)best.transform : null;
}
private static RectTransform FindNextButton()
{
var view = UnityEngine.Object.FindFirstObjectByType<NextButtonView>();
return view != null ? (RectTransform)view.transform : null;
}
// The first item = lowest sibling index. Cells are instantiated in data order under a layout
// group, so sibling 0 is the leftmost/first; visibility is handled by scrolling it into view.
private static RectTransform LowestSiblingActive<T>(T[] components) where T : Component
{
T best = null;
var bestIndex = int.MaxValue;
foreach (var c in components)
{
if (c == null || !c.gameObject.activeInHierarchy) continue;
var index = c.transform.GetSiblingIndex();
if (index < bestIndex) { bestIndex = index; best = c; }
}
return best != null ? (RectTransform)best.transform : null;
}
// Scrolls the target's ScrollRect to the start so a paged-off first item becomes visible.
private static void ScrollToStart(RectTransform cell)
{
if (cell == null) return;
var scroll = cell.GetComponentInParent<ScrollRect>();
if (scroll == null) return;
scroll.StopMovement();
if (scroll.horizontal) scroll.horizontalNormalizedPosition = 0f;
if (scroll.vertical) scroll.verticalNormalizedPosition = 1f;
}
private void DisposeNav()
{
foreach (var s in _navSubs) s?.Dispose();
_navSubs.Clear();
}
public void Dispose()
{
_introSub?.Dispose();
DisposeNav();
_runCts?.Cancel();
_runCts?.Dispose();
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: d96038ffc4ea74bca8143d84655e8b4a

View File

@@ -0,0 +1,33 @@
using Darkmatter.Core.Contracts.Features.Progression;
using Darkmatter.Core.Contracts.Features.Tutorial;
using Darkmatter.Libs.PlayerPrefs;
namespace Darkmatter.Features.Tutorial.Systems
{
public sealed class TutorialGateService : ITutorialGate
{
// Stored through ProtectedPlayerPrefs (keys are hashed, not validated against the registry,
// so a local constant is safe). Optionally register it in Tools > Darkmatter > PlayerPrefs
// Editor for documentation.
public const string CompletedKey = "Tutorial.Completed";
private readonly IProgressionSystem _progression;
public TutorialGateService(IProgressionSystem progression)
{
_progression = progression;
}
// Belt-and-suspenders: a player who cleared prefs but already has finished drawings is not a
// first-timer, so don't re-tutorialize them.
public bool ShouldRun =>
!ProtectedPlayerPrefs.GetBool(CompletedKey, false)
&& _progression.CompletedTemplateIds.Count == 0;
public void MarkCompleted()
{
ProtectedPlayerPrefs.SetBool(CompletedKey, true);
ProtectedPlayerPrefs.Save();
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 3ee1f88d72ddf4d99bf5669a36cc52bc

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 98ae3bd636ac84b648d602de444dbf89
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,72 @@
using UnityEngine;
using UnityEngine.UI;
namespace Darkmatter.Features.Tutorial.UI
{
/// <summary>
/// A single full-screen dim Image with a soft circular hole driven by the TutorialCutout shader.
/// Also an <see cref="ICanvasRaycastFilter"/>: when the dim is blocking, taps inside the hole
/// fall through to the real button underneath, taps outside are swallowed.
/// </summary>
[RequireComponent(typeof(Image))]
public sealed class TutorialCutoutDim : MonoBehaviour, ICanvasRaycastFilter
{
[SerializeField] private Shader cutoutShader;
[SerializeField] private Image dimImage;
private Material _material;
private Vector2 _centerScreen;
private float _radiusScreen;
private bool _holeActive;
private static readonly int CenterId = Shader.PropertyToID("_Center");
private static readonly int RadiusId = Shader.PropertyToID("_Radius");
private static readonly int AspectId = Shader.PropertyToID("_Aspect");
private static readonly int SoftnessId = Shader.PropertyToID("_Softness");
private void Awake()
{
if (dimImage == null) dimImage = GetComponent<Image>();
if (cutoutShader != null && dimImage != null)
{
_material = new Material(cutoutShader); // instance — never mutate the asset
dimImage.material = _material;
}
SetVisible(false);
}
/// <summary>Show/hide the dim. Hidden = the Graphic is disabled, so it neither draws nor blocks.</summary>
public void SetVisible(bool visible)
{
if (dimImage != null) dimImage.enabled = visible;
if (!visible) ClearHole();
}
public void SetHole(Vector2 centerScreen, float radiusScreen, float screenWidth, float screenHeight)
{
_centerScreen = centerScreen;
_radiusScreen = radiusScreen;
_holeActive = radiusScreen > 0f && screenHeight > 0f;
if (_material == null || screenHeight <= 0f) return;
_material.SetVector(CenterId, new Vector4(centerScreen.x / screenWidth, centerScreen.y / screenHeight, 0f, 0f));
_material.SetFloat(RadiusId, radiusScreen / screenHeight);
_material.SetFloat(AspectId, screenWidth / screenHeight);
_material.SetFloat(SoftnessId, 0.004f);
}
public void ClearHole()
{
_holeActive = false;
if (_material != null) _material.SetFloat(RadiusId, 0f);
}
// Consulted only when the graphic actually participates in raycasting (parent CanvasGroup
// blocksRaycasts == true). Outside the hole -> block; inside -> pass to whatever's beneath.
public bool IsRaycastLocationValid(Vector2 screenPoint, Camera eventCamera)
{
if (!_holeActive) return true;
return Vector2.Distance(screenPoint, _centerScreen) > _radiusScreen;
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 29c836b3d2ed343e6a810f6e7548f487

View File

@@ -0,0 +1,449 @@
using System;
using System.Threading;
using Cysharp.Threading.Tasks;
using Darkmatter.Core.Contracts.Features.Tutorial;
using PrimeTween;
using TMPro;
using UnityEngine;
namespace Darkmatter.Features.Tutorial.UI
{
/// <summary>
/// Persistent guidance overlay. A single full-screen dim with a soft circular hole (see
/// <see cref="TutorialCutoutDim"/>) spotlights the target; an animated hand + halo point at it
/// and an instruction bubble sits above/below. Lives on a high-sortingOrder Canvas in the Boot
/// scene so it renders over — and outlives — every additive gameplay scene.
///
/// Input gating is the whole-overlay CanvasGroup.blocksRaycasts master switch: ON for blocking
/// tap steps; OFF for drag steps, hints and toasts. All targets are tracked live in LateUpdate
/// (catalog cells scroll, pieces are dragged); if a target is destroyed (scene swap) the overlay
/// hides itself. All animation uses unscaled time.
/// </summary>
[RequireComponent(typeof(CanvasGroup))]
public sealed class TutorialOverlayView : MonoBehaviour, ITutorialOverlay
{
private enum Mode { Hidden, Tap, Drag, Centered }
[Header("Canvas")]
[SerializeField] private Canvas canvas;
[SerializeField] private CanvasGroup rootGroup;
[Header("Dim (single image + circular cutout)")]
[SerializeField] private TutorialCutoutDim cutout;
[Header("Pointer")]
[SerializeField] private RectTransform halo;
[SerializeField] private RectTransform hand;
[Header("Bubble")]
[SerializeField] private RectTransform bubbleRoot;
[SerializeField] private TMP_Text bubbleText;
[Header("Tuning")]
[Tooltip("Extra screen pixels added to the spotlight circle radius around the target.")]
[SerializeField] private float holePadding = 44f;
[SerializeField] private float fadeDuration = 0.25f;
[SerializeField] private float toastSeconds = 1.6f;
[SerializeField] private float bubbleGap = 60f;
[SerializeField] private float haloPulseScale = 1.18f;
[SerializeField] private float pulseDuration = 0.6f;
[SerializeField] private float dragHandDuration = 1.1f;
[Header("Drag step")]
[Tooltip("Offset (px) from the hand's pivot to its visible fingertip. The tip is placed on the target so it points accurately; a positive Y drops the hand body below the spot.")]
[SerializeField] private Vector2 dragHandTipOffset = new(0f, 70f);
[Tooltip("Pin the drag bubble to the top (true) or bottom (false) edge so it never covers the play area.")]
[SerializeField] private bool dragBubbleAtTop = true;
[Tooltip("Margin (px) from that edge for the drag bubble.")]
[SerializeField] private float dragBubbleEdgeMargin = 150f;
private RectTransform _area;
private Camera _overlayCam;
private Mode _mode = Mode.Hidden;
private RectTransform _target; // tap target
private RectTransform _dragFrom; // the piece (drag start)
private RectTransform _dragTo; // the slot (drag destination)
private float _dragT;
private Sequence _haloSeq;
private Sequence _handSeq;
private readonly Vector3[] _corners = new Vector3[4];
private bool _ready;
public bool IsReady => _ready && this != null;
private void Awake()
{
CacheRefs();
ApplyHiddenState();
}
private void CacheRefs()
{
if (_ready) return;
_area = (RectTransform)transform;
if (canvas == null) canvas = GetComponentInParent<Canvas>();
if (rootGroup == null) rootGroup = GetComponent<CanvasGroup>();
_overlayCam = canvas != null && canvas.renderMode != RenderMode.ScreenSpaceOverlay
? canvas.worldCamera
: null;
_ready = true;
}
// ── ITutorialOverlay ─────────────────────────────────────────────────
public void ShowTap(RectTransform target, string message, bool blockInput)
{
CacheRefs();
KillAnims();
SetText(message);
_dragFrom = null;
_dragTo = null;
if (target != null)
{
_mode = Mode.Tap;
_target = target;
if (cutout != null) cutout.SetVisible(true);
SetPointerVisible(true);
rootGroup.blocksRaycasts = blockInput;
StartHaloPulse();
StartHandTap();
}
else
{
_mode = Mode.Centered;
_target = null;
if (cutout != null) cutout.SetVisible(false);
SetPointerVisible(false);
rootGroup.blocksRaycasts = false;
}
LayoutNow();
FadeInQuick();
}
public void ShowDrag(RectTransform from, RectTransform to, string message)
{
CacheRefs();
KillAnims();
SetText(message);
// No dim and no blocking — the piece lives under the overlay and must stay visible and
// draggable. Halo + hand travel together along the piece -> slot path, recomputed live.
if (cutout != null) cutout.SetVisible(false);
rootGroup.blocksRaycasts = false;
_target = null;
_dragFrom = from;
_dragTo = to;
_dragT = 0f;
if (from != null)
{
_mode = Mode.Drag;
SetPointerVisible(true);
StartHaloPulse();
}
else
{
_mode = Mode.Centered;
SetPointerVisible(false);
}
LayoutNow();
FadeInQuick();
}
public async UniTask ShowToastAsync(string message, CancellationToken ct)
{
CacheRefs();
KillAnims();
SetText(message);
_mode = Mode.Centered;
_target = null;
_dragFrom = null;
_dragTo = null;
if (cutout != null) cutout.SetVisible(false);
SetPointerVisible(false);
rootGroup.blocksRaycasts = false;
LayoutNow();
await FadeAsync(0f, 1f, fadeDuration, ct);
try
{
await UniTask.Delay(TimeSpan.FromSeconds(toastSeconds), DelayType.UnscaledDeltaTime, cancellationToken: ct);
}
catch (OperationCanceledException)
{
HideInstant();
throw;
}
await FadeAsync(1f, 0f, fadeDuration, CancellationToken.None);
HideInstant();
}
public void HideInstant()
{
CacheRefs();
KillAnims();
ApplyHiddenState();
}
// ── Per-frame layout ─────────────────────────────────────────────────
private void LateUpdate()
{
if (_mode == Mode.Hidden) return;
LayoutNow();
}
private void LayoutNow()
{
switch (_mode)
{
case Mode.Tap:
if (_target == null) { HideInstant(); return; } // destroyed (scene swap) -> self-hide
PlaceSpotlight(_target);
break;
case Mode.Drag:
if (_dragFrom == null) { HideInstant(); return; }
LayoutDrag();
break;
default:
LayoutCentered();
break;
}
}
// Tap: cutout + halo + resting hand + bubble around a static target.
private void PlaceSpotlight(RectTransform target)
{
if (!TryToScreenBounds(target, out var min, out var max)) return;
var centerScreen = (min + max) * 0.5f;
var radiusScreen = (max - min).magnitude * 0.5f + holePadding;
if (cutout != null) cutout.SetHole(centerScreen, radiusScreen, Screen.width, Screen.height);
if (!ScreenToLocal(centerScreen, out var centerLocal)) return;
float scale = Screen.height > 0 ? _area.rect.height / Screen.height : 1f;
float radiusLocal = radiusScreen * scale;
if (halo != null)
{
halo.anchoredPosition = centerLocal;
halo.sizeDelta = Vector2.one * (radiusLocal * 2f);
}
if (hand != null)
hand.anchoredPosition = centerLocal + new Vector2(0f, -radiusLocal * 0.5f);
PositionBubble(centerLocal.y, centerLocal.y + radiusLocal, centerLocal.y - radiusLocal,
_area.rect.height * 0.5f);
}
// Drag: halo + hand glide piece -> slot, recomputed live so it tracks the real positions.
private void LayoutDrag()
{
if (!TryToLocalCenter(_dragFrom, out var a)) return;
Vector2 b = _dragTo != null && TryToLocalCenter(_dragTo, out var bc) ? bc : a;
const float pressT = 0.25f;
const float holdT = 0.5f;
float move = Mathf.Max(0.3f, dragHandDuration);
float period = pressT + move + holdT;
_dragT += Time.unscaledDeltaTime;
if (_dragT >= period) _dragT -= period;
float frac, pressScale;
if (_dragT < pressT) { frac = 0f; pressScale = Mathf.Lerp(1f, 0.8f, _dragT / pressT); }
else if (_dragT < pressT + move) { frac = Mathf.SmoothStep(0f, 1f, (_dragT - pressT) / move); pressScale = 0.8f; }
else { frac = 1f; pressScale = Mathf.Lerp(0.8f, 1f, (_dragT - pressT - move) / holdT); }
Vector2 pos = Vector2.Lerp(a, b, frac);
float scale = Screen.height > 0 ? _area.rect.height / Screen.height : 1f;
float radiusScreen = 120f;
if (TryToScreenBounds(_dragFrom, out var min, out var max))
radiusScreen = (max - min).magnitude * 0.5f + holePadding;
float radiusLocal = radiusScreen * scale;
if (halo != null)
{
halo.anchoredPosition = pos;
halo.sizeDelta = Vector2.one * (radiusLocal * 2f);
}
if (hand != null)
{
// Put the visible fingertip on the target point (halo centre) so it points accurately,
// with the hand body hanging below it.
hand.anchoredPosition = pos - dragHandTipOffset;
hand.localScale = Vector3.one * pressScale;
}
// The drag path spans the play area, so pin the bubble to a screen edge instead of hugging
// the piece — keeps it off the shapes.
PositionBubbleAtEdge(dragBubbleAtTop, dragBubbleEdgeMargin);
}
private void LayoutCentered()
{
if (bubbleRoot == null) return;
float halfH = _area.rect.height * 0.5f;
float bubbleHalf = bubbleRoot.rect.height * 0.5f;
bubbleRoot.anchoredPosition =
new Vector2(0f, Mathf.Clamp(halfH * 0.45f, -halfH + bubbleHalf, halfH - bubbleHalf));
}
private void PositionBubble(float holeCenterY, float holeTopY, float holeBottomY, float halfH)
{
if (bubbleRoot == null) return;
float bubbleHalf = bubbleRoot.rect.height * 0.5f;
float y = holeCenterY <= 0f
? holeTopY + bubbleGap + bubbleHalf
: holeBottomY - bubbleGap - bubbleHalf;
y = Mathf.Clamp(y, -halfH + bubbleHalf, halfH - bubbleHalf);
bubbleRoot.anchoredPosition = new Vector2(0f, y);
}
// Pins the bubble to the top or bottom edge (used for the drag step, whose target spans the
// play area). Centred horizontally so it clears the shapes.
private void PositionBubbleAtEdge(bool top, float margin)
{
if (bubbleRoot == null) return;
float halfH = _area.rect.height * 0.5f;
float bubbleHalf = bubbleRoot.rect.height * 0.5f;
float y = top ? halfH - bubbleHalf - margin : -halfH + bubbleHalf + margin;
y = Mathf.Clamp(y, -halfH + bubbleHalf, halfH - bubbleHalf);
bubbleRoot.anchoredPosition = new Vector2(0f, y);
}
// ── Coordinate conversion (camera-agnostic) ──────────────────────────
private bool TryToScreenBounds(RectTransform target, out Vector2 min, out Vector2 max)
{
min = new Vector2(float.MaxValue, float.MaxValue);
max = new Vector2(float.MinValue, float.MinValue);
if (target == null) return false;
var cam = ResolveCamera(target);
target.GetWorldCorners(_corners);
for (int i = 0; i < 4; i++)
{
var sp = RectTransformUtility.WorldToScreenPoint(cam, _corners[i]);
min = Vector2.Min(min, sp);
max = Vector2.Max(max, sp);
}
return true;
}
private bool TryToLocalCenter(RectTransform target, out Vector2 local)
{
local = default;
if (!TryToScreenBounds(target, out var min, out var max)) return false;
return ScreenToLocal((min + max) * 0.5f, out local);
}
private bool ScreenToLocal(Vector2 screen, out Vector2 local) =>
RectTransformUtility.ScreenPointToLocalPointInRectangle(_area, screen, _overlayCam, out local);
private static Camera ResolveCamera(RectTransform target)
{
var c = target.GetComponentInParent<Canvas>();
if (c == null) return null;
c = c.rootCanvas;
return c.renderMode == RenderMode.ScreenSpaceOverlay ? null : c.worldCamera;
}
// ── Animation ────────────────────────────────────────────────────────
private void StartHaloPulse()
{
if (halo == null) return;
halo.localScale = Vector3.one;
_haloSeq = Sequence.Create(useUnscaledTime: true, cycles: -1)
.Chain(Tween.Scale(halo, Vector3.one * haloPulseScale, pulseDuration, Ease.InOutSine))
.Chain(Tween.Scale(halo, Vector3.one, pulseDuration, Ease.InOutSine));
}
private void StartHandTap()
{
if (hand == null) return;
hand.localScale = Vector3.one;
_handSeq = Sequence.Create(useUnscaledTime: true, cycles: -1)
.Chain(Tween.Scale(hand, Vector3.one * 0.82f, 0.35f, Ease.OutQuad))
.Chain(Tween.Scale(hand, Vector3.one, 0.35f, Ease.OutQuad))
.ChainDelay(0.35f);
}
private void FadeInQuick()
{
if (rootGroup == null) return;
Tween.StopAll(onTarget: rootGroup);
rootGroup.alpha = 0f;
Sequence.Create(useUnscaledTime: true).Chain(Tween.Alpha(rootGroup, 1f, fadeDuration, Ease.OutQuad));
}
private async UniTask FadeAsync(float from, float to, float duration, CancellationToken ct)
{
if (rootGroup == null) return;
Tween.StopAll(onTarget: rootGroup);
rootGroup.alpha = from;
float t = 0f;
while (t < duration)
{
ct.ThrowIfCancellationRequested();
t += Time.unscaledDeltaTime;
rootGroup.alpha = Mathf.Lerp(from, to, duration > 0f ? t / duration : 1f);
await UniTask.Yield(PlayerLoopTiming.Update);
}
rootGroup.alpha = to;
}
// ── State helpers ────────────────────────────────────────────────────
private void ApplyHiddenState()
{
_mode = Mode.Hidden;
_target = null;
_dragFrom = null;
_dragTo = null;
if (cutout != null) cutout.SetVisible(false);
if (rootGroup != null)
{
rootGroup.alpha = 0f;
rootGroup.blocksRaycasts = false;
rootGroup.interactable = false;
}
SetPointerVisible(false);
}
private void SetText(string message)
{
if (bubbleText != null) bubbleText.text = message;
if (bubbleRoot != null) bubbleRoot.gameObject.SetActive(!string.IsNullOrEmpty(message));
}
private void SetPointerVisible(bool visible)
{
if (halo != null) halo.gameObject.SetActive(visible);
if (hand != null) hand.gameObject.SetActive(visible);
}
private void KillAnims()
{
if (_haloSeq.isAlive) _haloSeq.Stop();
if (_handSeq.isAlive) _handSeq.Stop();
_haloSeq = default;
_handSeq = default;
if (halo != null) { Tween.StopAll(onTarget: halo); halo.localScale = Vector3.one; }
if (hand != null) { Tween.StopAll(onTarget: hand); hand.localScale = Vector3.one; }
if (rootGroup != null) Tween.StopAll(onTarget: rootGroup);
}
private void OnDisable()
{
KillAnims();
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 4ecf127118699405ebcd0e0712d7373d

View File

@@ -8,6 +8,7 @@ using Darkmatter.Core.Data.Signals.Features.Drawing;
using Darkmatter.Core.Data.Signals.Features.GameplayFlow;
using Darkmatter.Core.Data.Signals.Features.MainMenu;
using Darkmatter.Core.Data.Signals.Features.ShapeBuilder;
using Darkmatter.Core.Data.Signals.Features.Tutorial;
using Darkmatter.Libs.Observer;
using VContainer.Unity;
@@ -52,6 +53,15 @@ namespace Darkmatter.Services.Analytics
_subs.Add(_bus.Subscribe<GallerySaveStartedSignal>(_ => _analytics.LogEvent("gallery_save_started")));
_subs.Add(_bus.Subscribe<GallerySaveCompletedSignal>(s =>
_analytics.LogEvent("gallery_save_completed", "success", s.Success ? "true" : "false")));
_subs.Add(_bus.Subscribe<TutorialStartedSignal>(_ => _analytics.LogEvent("tutorial_started")));
_subs.Add(_bus.Subscribe<TutorialStepCompletedSignal>(s => _analytics.LogEvent("tutorial_step_completed",
new Dictionary<string, object>
{
["step_id"] = s.StepId,
["step_index"] = s.StepIndex,
})));
_subs.Add(_bus.Subscribe<TutorialCompletedSignal>(_ => _analytics.LogEvent("tutorial_completed")));
}
public void Dispose()

View File

@@ -0,0 +1,761 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &100100
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 100101}
- component: {fileID: 100102}
- component: {fileID: 100103}
- component: {fileID: 100104}
- component: {fileID: 100105}
- component: {fileID: 100107}
m_Layer: 5
m_Name: TutorialOverlayCanvas
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &100101
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100100}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0, y: 0, z: 0}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 100111}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 0}
--- !u!223 &100102
Canvas:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100100}
m_Enabled: 1
serializedVersion: 3
m_RenderMode: 0
m_Camera: {fileID: 0}
m_PlaneDistance: 100
m_PixelPerfect: 0
m_ReceivesEvents: 1
m_OverrideSorting: 0
m_OverridePixelPerfect: 0
m_SortingBucketNormalizedSize: 0
m_VertexColorAlwaysGammaSpace: 1
m_UseReflectionProbes: 0
m_AdditionalShaderChannelsFlag: 25
m_UpdateRectTransformForStandalone: 0
m_SortingLayerID: 0
m_SortingOrder: 5000
m_TargetDisplay: 0
--- !u!114 &100103
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100100}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
m_Name:
m_EditorClassIdentifier:
m_UiScaleMode: 1
m_ReferencePixelsPerUnit: 100
m_ScaleFactor: 1
m_ReferenceResolution: {x: 1080, y: 1920}
m_ScreenMatchMode: 0
m_MatchWidthOrHeight: 0.5
m_PhysicalUnit: 3
m_FallbackScreenDPI: 96
m_DefaultSpriteDPI: 96
m_DynamicPixelsPerUnit: 1
m_PresetInfoIsWorld: 0
--- !u!114 &100104
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100100}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreReversedGraphics: 1
m_BlockingObjects: 0
m_BlockingMask:
serializedVersion: 2
m_Bits: 4294967295
--- !u!225 &100105
CanvasGroup:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100100}
m_Enabled: 1
m_Alpha: 0
m_Interactable: 0
m_BlocksRaycasts: 0
m_IgnoreParentGroups: 0
--- !u!114 &100107
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100100}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 97ce2c486cc8541d1ab1d83fda7f8eda, type: 3}
m_Name:
m_EditorClassIdentifier:
overlayView: {fileID: 100106}
config: {fileID: 11400000, guid: 71357eb1222bb4151ab4e5697a1decd3, type: 2}
--- !u!1 &100110
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 100111}
- component: {fileID: 100106}
- component: {fileID: 6008915593776814208}
m_Layer: 5
m_Name: Area
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &100111
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100110}
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: 100201}
- {fileID: 100601}
- {fileID: 100701}
- {fileID: 100801}
m_Father: {fileID: 100101}
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 &100106
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100110}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4ecf127118699405ebcd0e0712d7373d, type: 3}
m_Name:
m_EditorClassIdentifier:
canvas: {fileID: 100102}
rootGroup: {fileID: 100105}
cutout: {fileID: 100204}
halo: {fileID: 100601}
hand: {fileID: 100701}
bubbleRoot: {fileID: 100801}
bubbleText: {fileID: 101003}
holePadding: 44
fadeDuration: 0.25
toastSeconds: 1.6
bubbleGap: 60
haloPulseScale: 1.18
pulseDuration: 0.6
dragHandDuration: 1.1
--- !u!225 &6008915593776814208
CanvasGroup:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100110}
m_Enabled: 1
m_Alpha: 1
m_Interactable: 1
m_BlocksRaycasts: 1
m_IgnoreParentGroups: 0
--- !u!1 &100200
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 100201}
- component: {fileID: 100202}
- component: {fileID: 100203}
- component: {fileID: 100204}
m_Layer: 5
m_Name: Dim
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &100201
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100200}
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: 100111}
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!222 &100202
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100200}
m_CullTransparentMesh: 1
--- !u!114 &100203
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100200}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0, g: 0, b: 0, a: 0.72}
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!114 &100204
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100200}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 29c836b3d2ed343e6a810f6e7548f487, type: 3}
m_Name:
m_EditorClassIdentifier:
cutoutShader: {fileID: 4800000, guid: 57d1ed1c62afa45db97a7c8e9ace795c, type: 3}
dimImage: {fileID: 100203}
--- !u!1 &100600
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 100601}
- component: {fileID: 100602}
- component: {fileID: 100603}
m_Layer: 5
m_Name: Halo
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &100601
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100600}
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: 100111}
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: 0, y: 0}
m_SizeDelta: {x: 240, y: 240}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &100602
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100600}
m_CullTransparentMesh: 1
--- !u!114 &100603
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100600}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 0.9}
m_RaycastTarget: 0
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: 17078a4ce7e7d450e85816637b6b6bbe, 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!1 &100700
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 100701}
- component: {fileID: 100702}
- component: {fileID: 100703}
m_Layer: 5
m_Name: Hand
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &100701
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100700}
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: 100111}
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: 0, y: 0}
m_SizeDelta: {x: 130, y: 130}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &100702
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100700}
m_CullTransparentMesh: 1
--- !u!114 &100703
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100700}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 0
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 5357005990035746724, guid: edf2d0d62497c37488be3b7304708f09, 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!1 &100800
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 100801}
m_Layer: 5
m_Name: BubbleRoot
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &100801
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100800}
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: 100901}
m_Father: {fileID: 100111}
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: 0, y: 350}
m_SizeDelta: {x: 760, y: 180}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &100900
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 100901}
- component: {fileID: 100902}
- component: {fileID: 100903}
- component: {fileID: 6057957808347567821}
- component: {fileID: 3730188213376167672}
m_Layer: 5
m_Name: BubbleBg
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &100901
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100900}
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: 101001}
m_Father: {fileID: 100801}
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: 91}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &100902
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100900}
m_CullTransparentMesh: 1
--- !u!114 &100903
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100900}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 0.96}
m_RaycastTarget: 0
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: 392a0995832130344b5e8918edc0052f, type: 3}
m_Type: 1
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!114 &6057957808347567821
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100900}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.ContentSizeFitter
m_HorizontalFit: 2
m_VerticalFit: 0
--- !u!114 &3730188213376167672
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100900}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.VerticalLayoutGroup
m_Padding:
m_Left: 100
m_Right: 100
m_Top: -80
m_Bottom: 0
m_ChildAlignment: 3
m_Spacing: 0
m_ChildForceExpandWidth: 0
m_ChildForceExpandHeight: 0
m_ChildControlWidth: 0
m_ChildControlHeight: 0
m_ChildScaleWidth: 1
m_ChildScaleHeight: 1
m_ReverseArrangement: 0
--- !u!1 &101000
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 101001}
- component: {fileID: 101002}
- component: {fileID: 101003}
- component: {fileID: 8870904446750593947}
m_Layer: 5
m_Name: Text
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &101001
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 101000}
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: 100901}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 463.445, y: -95.50001}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &101002
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 101000}
m_CullTransparentMesh: 1
--- !u!114 &101003
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 101000}
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: 0
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: Tutorial
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: 4281542953
m_fontColor: {r: 0.16, g: 0.16, b: 0.2, 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: 60
m_fontSizeBase: 46
m_fontWeight: 400
m_enableAutoSizing: 1
m_fontSizeMin: 24
m_fontSizeMax: 60
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: 0
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!114 &8870904446750593947
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 101000}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3e37e2b5f1962004c8f10779a2fcf23a, type: 3}
m_Name:
m_EditorClassIdentifier: uLayout::Poke.UI.LayoutText
m_log: 0
m_ignoreLayout: 0
m_sizing:
x: 0
y: 0

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 4ea8eac2c3ee646718ebb2b13b40f661
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,102 @@
Shader "Darkmatter/TutorialCutout"
{
// Full-screen UI dim with a soft circular hole punched out. The hole centre/radius are driven
// from script in UV space (0..1 across the image, which covers the screen). Radius 0 = solid dim.
Properties
{
[PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
_Color ("Tint", Color) = (1,1,1,1)
_Center ("Hole Center (UV)", Vector) = (0.5, 0.5, 0, 0)
_Radius ("Hole Radius", Float) = 0
_Softness ("Edge Softness", Float) = 0.004
_Aspect ("Aspect (w/h)", Float) = 1
_StencilComp ("Stencil Comparison", Float) = 8
_Stencil ("Stencil ID", Float) = 0
_StencilOp ("Stencil Operation", Float) = 0
_StencilWriteMask ("Stencil Write Mask", Float) = 255
_StencilReadMask ("Stencil Read Mask", Float) = 255
_ColorMask ("Color Mask", Float) = 15
}
SubShader
{
Tags
{
"Queue"="Transparent"
"IgnoreProjector"="True"
"RenderType"="Transparent"
"PreviewType"="Plane"
"CanUseSpriteAtlas"="True"
}
Stencil
{
Ref [_Stencil]
Comp [_StencilComp]
Pass [_StencilOp]
ReadMask [_StencilReadMask]
WriteMask [_StencilWriteMask]
}
Cull Off
Lighting Off
ZWrite Off
ZTest [unity_GUIZTestMode]
Blend SrcAlpha OneMinusSrcAlpha
ColorMask [_ColorMask]
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata_t
{
float4 vertex : POSITION;
float4 color : COLOR;
float2 texcoord : TEXCOORD0;
};
struct v2f
{
float4 vertex : SV_POSITION;
fixed4 color : COLOR;
float2 texcoord : TEXCOORD0;
};
sampler2D _MainTex;
fixed4 _Color;
float4 _Center;
float _Radius;
float _Softness;
float _Aspect;
v2f vert(appdata_t v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.texcoord = v.texcoord;
o.color = v.color * _Color;
return o;
}
fixed4 frag(v2f i) : SV_Target
{
fixed4 col = tex2D(_MainTex, i.texcoord) * i.color;
float2 d = i.texcoord - _Center.xy;
d.x *= _Aspect; // keep the hole round on non-square screens
float dist = length(d);
// 0 inside the hole -> fully transparent, 1 outside -> full dim.
float cut = smoothstep(_Radius - _Softness, _Radius + _Softness, dist);
col.a *= cut;
return col;
}
ENDCG
}
}
}

View File

@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 57d1ed1c62afa45db97a7c8e9ace795c
ShaderImporter:
externalObjects: {}
defaultTextures: []
nonModifiableTextures: []
userData:
assetBundleName:
assetBundleVariant:

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

View File

@@ -49,7 +49,7 @@ TextureImporter:
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteBorder: {x: 270, y: 191, z: 255, w: 110}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
@@ -119,6 +119,19 @@ TextureImporter:
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: iOS
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: []
@@ -127,7 +140,7 @@ TextureImporter:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
internalID: 1537655665
vertices: []
indices:
edges: []

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: bf4c00fda65d94d4da204b00409759ed
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,22 @@
%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: 5c513430cc85f4357b3df1da019bf554, type: 3}
m_Name: TutorialStepsConfig
m_EditorClassIdentifier: Core::Darkmatter.Core.Data.Static.Features.Tutorial.TutorialStepsConfig
pickText: Pick a picture to start!
dragText: Drag the piece to its spot!
finishText: Now finish the puzzle!
colorText: Choose a color!
paintText: Tap the picture to color it!
nextText: Tap Next when you're done!
doneText: Yay! You did it!
stepTimeoutSeconds: 45

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 71357eb1222bb4151ab4e5697a1decd3
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1526,8 +1526,55 @@ Transform:
- {fileID: 1043308346}
- {fileID: 610419919}
- {fileID: 789049882}
- {fileID: 777749261}
m_Father: {fileID: 1798580248}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &777749260
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 777749261}
- component: {fileID: 777749262}
m_Layer: 0
m_Name: Tutorial Feature Module
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &777749261
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 777749260}
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: 752713007}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &777749262
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 777749260}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 97ce2c486cc8541d1ab1d83fda7f8eda, type: 3}
m_Name:
m_EditorClassIdentifier: Features.Tutorial::Darkmatter.Features.Tutorial.Installers.TutorialFeatureModule
overlayView: {fileID: 1976259501}
config: {fileID: 11400000, guid: 71357eb1222bb4151ab4e5697a1decd3, type: 2}
--- !u!1 &789049881
GameObject:
m_ObjectHideFlags: 0
@@ -2319,6 +2366,7 @@ MonoBehaviour:
- {fileID: 361052052}
- {fileID: 1707278034}
- {fileID: 164240471}
- {fileID: 777749262}
--- !u!1 &1890425864
GameObject:
m_ObjectHideFlags: 0
@@ -2365,6 +2413,158 @@ MonoBehaviour:
m_EditorClassIdentifier: Features.AppBoot::Darkmatter.Features.AppBoot.SceneRefs.AppBootSceneRefs
<IntroVideoPlayer>k__BackingField: {fileID: 2122267604}
<IntroCanvas>k__BackingField: {fileID: 2133561494}
--- !u!1001 &1976259500
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 100100, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_Name
value: TutorialOverlayCanvas
objectReference: {fileID: 0}
- target: {fileID: 100101, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_Pivot.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 100101, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_Pivot.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 100101, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_AnchorMax.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 100101, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_AnchorMax.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 100101, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_AnchorMin.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 100101, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_AnchorMin.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 100101, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_SizeDelta.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 100101, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_SizeDelta.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 100101, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 100101, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 100101, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 100101, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 100101, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 100101, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 100101, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 100101, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_AnchoredPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 100101, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_AnchoredPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 100101, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 100101, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 100101, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 100603, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_Enabled
value: 0
objectReference: {fileID: 0}
- target: {fileID: 100701, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_SizeDelta.x
value: 200
objectReference: {fileID: 0}
- target: {fileID: 100701, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_SizeDelta.y
value: 200
objectReference: {fileID: 0}
- target: {fileID: 100901, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_SizeDelta.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 101001, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_AnchorMax.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 101001, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_AnchorMin.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 101001, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_SizeDelta.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 101001, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_SizeDelta.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 101001, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_AnchoredPosition.x
value: 207.45999
objectReference: {fileID: 0}
- target: {fileID: 101001, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_AnchoredPosition.y
value: -95.50001
objectReference: {fileID: 0}
- target: {fileID: 101003, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
propertyPath: m_fontSize
value: 60
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
--- !u!114 &1976259501 stripped
MonoBehaviour:
m_CorrespondingSourceObject: {fileID: 100106, guid: 7d10b17c0a1e4e7d9b2f8c6a5d4e3f22, type: 3}
m_PrefabInstance: {fileID: 1976259500}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4ecf127118699405ebcd0e0712d7373d, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &2122267603
GameObject:
m_ObjectHideFlags: 0
@@ -2553,3 +2753,4 @@ SceneRoots:
- {fileID: 673724413}
- {fileID: 1156238481}
- {fileID: 680382929}
- {fileID: 1976259500}

View File

@@ -1 +1 @@
<?xml version="1.0" encoding="utf-8"?><resources><string name="com.crashlytics.android.build_id" translatable="false">b73866f8-08b2-41b7-a729-b72bb53d5a2f</string></resources>
<?xml version="1.0" encoding="utf-8"?><resources><string name="com.crashlytics.android.build_id" translatable="false">a3e3b41e-7e4d-40b0-9858-ba70bd40fbe7</string></resources>

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 4613829b993814f82807a717e97694a6
guid: d72ca3454dbb9431da2ed1bfa6d33ac1
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@@ -1,125 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!29 &1
OcclusionCullingSettings:
m_ObjectHideFlags: 0
serializedVersion: 2
m_OcclusionBakeSettings:
smallestOccluder: 5
smallestHole: 0.25
backfaceThreshold: 100
m_SceneGUID: 00000000000000000000000000000000
m_OcclusionCullingData: {fileID: 0}
--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
serializedVersion: 10
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3
m_FogDensity: 0.01
m_LinearFogStart: 0
m_LinearFogEnd: 300
m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
m_AmbientIntensity: 1
m_AmbientMode: 3
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
m_SkyboxMaterial: {fileID: 0}
m_HaloStrength: 0.5
m_FlareStrength: 1
m_FlareFadeSpeed: 3
m_HaloTexture: {fileID: 0}
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
m_DefaultReflectionMode: 0
m_DefaultReflectionResolution: 128
m_ReflectionBounces: 1
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 13
m_BakeOnSceneLoad: 0
m_GISettings:
serializedVersion: 2
m_BounceScale: 1
m_IndirectOutputScale: 1
m_AlbedoBoost: 1
m_EnvironmentLightingMode: 0
m_EnableBakedLightmaps: 0
m_EnableRealtimeLightmaps: 0
m_LightmapEditorSettings:
serializedVersion: 12
m_Resolution: 2
m_BakeResolution: 40
m_AtlasSize: 1024
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_ExtractAmbientOcclusion: 0
m_Padding: 2
m_LightmapParameters: {fileID: 0}
m_LightmapsBakeMode: 1
m_TextureCompression: 1
m_ReflectionCompression: 2
m_MixedBakeMode: 2
m_BakeBackend: 2
m_PVRSampling: 1
m_PVRDirectSampleCount: 32
m_PVRSampleCount: 512
m_PVRBounces: 2
m_PVREnvironmentSampleCount: 256
m_PVREnvironmentReferencePointCount: 2048
m_PVRFilteringMode: 1
m_PVRDenoiserTypeDirect: 1
m_PVRDenoiserTypeIndirect: 1
m_PVRDenoiserTypeAO: 1
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVREnvironmentMIS: 1
m_PVRCulling: 1
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 1
m_PVRFilteringGaussRadiusAO: 1
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_ExportTrainingData: 0
m_TrainingDataDestination: TrainingData
m_LightProbeSampleCountMultiplier: 4
m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0}
m_LightingSettings: {fileID: 0}
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2
m_ObjectHideFlags: 0
m_BuildSettings:
serializedVersion: 3
agentTypeID: 0
agentRadius: 0.5
agentHeight: 2
agentSlope: 45
agentClimb: 0.4
ledgeDropHeight: 0
maxJumpAcrossDistance: 0
minRegionArea: 2
manualCellSize: 0
cellSize: 0.16666667
manualTileSize: 0
tileSize: 256
buildHeightMesh: 0
maxJobWorkers: 0
preserveTilesOutsideBounds: 0
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1660057539 &9223372036854775807
SceneRoots:
m_ObjectHideFlags: 0
m_Roots: []

File diff suppressed because it is too large Load Diff

View File

@@ -1,971 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!29 &1
OcclusionCullingSettings:
m_ObjectHideFlags: 0
serializedVersion: 2
m_OcclusionBakeSettings:
smallestOccluder: 5
smallestHole: 0.25
backfaceThreshold: 100
m_SceneGUID: 00000000000000000000000000000000
m_OcclusionCullingData: {fileID: 0}
--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
serializedVersion: 10
m_Fog: 1
m_FogColor: {r: 0.14619377, g: 0.15394942, b: 0.19117647, a: 1}
m_FogMode: 3
m_FogDensity: 0.01
m_LinearFogStart: 0
m_LinearFogEnd: 300
m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
m_AmbientIntensity: 1
m_AmbientMode: 0
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
m_HaloStrength: 0.5
m_FlareStrength: 1
m_FlareFadeSpeed: 3
m_HaloTexture: {fileID: 0}
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
m_DefaultReflectionMode: 0
m_DefaultReflectionResolution: 128
m_ReflectionBounces: 1
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 1470152279}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 13
m_BakeOnSceneLoad: 0
m_GISettings:
serializedVersion: 2
m_BounceScale: 1
m_IndirectOutputScale: 1
m_AlbedoBoost: 1
m_EnvironmentLightingMode: 0
m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 0
m_LightmapEditorSettings:
serializedVersion: 12
m_Resolution: 2
m_BakeResolution: 40
m_AtlasSize: 512
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_ExtractAmbientOcclusion: 0
m_Padding: 2
m_LightmapParameters: {fileID: 0}
m_LightmapsBakeMode: 1
m_TextureCompression: 0
m_ReflectionCompression: 2
m_MixedBakeMode: 2
m_BakeBackend: 0
m_PVRSampling: 1
m_PVRDirectSampleCount: 32
m_PVRSampleCount: 500
m_PVRBounces: 2
m_PVREnvironmentSampleCount: 500
m_PVREnvironmentReferencePointCount: 2048
m_PVRFilteringMode: 2
m_PVRDenoiserTypeDirect: 0
m_PVRDenoiserTypeIndirect: 0
m_PVRDenoiserTypeAO: 0
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVREnvironmentMIS: 0
m_PVRCulling: 1
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 5
m_PVRFilteringGaussRadiusAO: 2
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_ExportTrainingData: 0
m_TrainingDataDestination: TrainingData
m_LightProbeSampleCountMultiplier: 4
m_LightingDataAsset: {fileID: 112000000, guid: 7cf4f199eb5933d4b83c50d706f05b38, type: 2}
m_LightingSettings: {fileID: 342918266}
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2
m_ObjectHideFlags: 0
m_BuildSettings:
serializedVersion: 3
agentTypeID: 0
agentRadius: 0.5
agentHeight: 2
agentSlope: 45
agentClimb: 0.4
ledgeDropHeight: 0
maxJumpAcrossDistance: 0
minRegionArea: 2
manualCellSize: 0
cellSize: 0.16666667
manualTileSize: 0
tileSize: 256
buildHeightMesh: 0
maxJobWorkers: 0
preserveTilesOutsideBounds: 0
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &337736208
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 337736214}
- component: {fileID: 337736213}
- component: {fileID: 337736211}
- component: {fileID: 337736210}
- component: {fileID: 337736209}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &337736209
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 337736208}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a586cf93dc19b28488308d7488b8de20, type: 3}
m_Name:
m_EditorClassIdentifier:
Holder: {fileID: 1136332968}
cameraPos: {x: 0, y: 1, z: 0}
currDistance: 5
xRotate: 250
yRotate: 120
yMinLimit: -20
yMaxLimit: 80
prevDistance: 5
Prefabs:
- {fileID: 1128413885007942, guid: a4ef3ec7550e32341a1ff0551b941280, type: 3}
- {fileID: 6349788588035794697, guid: 4b10801c5461551479f92f3ff421d744, type: 3}
- {fileID: 1169687561629002887, guid: 241a65efbb9d5944281ec4d1c8e9a657, type: 3}
- {fileID: 2177907602152512982, guid: 1670a554b54ab5841ae9b1a0714cec62, type: 3}
- {fileID: 1917953600272551321, guid: 85c7794eca4986044be164f52851c086, type: 3}
- {fileID: 2138281632062121252, guid: 60b37154bfac85849a8ddc592d55e663, type: 3}
- {fileID: 1128413885007942, guid: e3c29f1bd6cb6d54e9a082165edb3287, type: 3}
- {fileID: 4052564747166353232, guid: 2fa905e1b2b2c1c409b091bb34135b36, type: 3}
- {fileID: 7954795162845220182, guid: f99069eead08b4241a6f8087e68ff624, type: 3}
- {fileID: 6835730187568792494, guid: e149d290a8e926541a4ee271f2bc3339, type: 3}
- {fileID: 5847527957534532185, guid: c0a4c8a7fad571e48bfe256b803b3a61, type: 3}
- {fileID: 484229770320713591, guid: a24b500f7034fa446869adabdb009a3f, type: 3}
- {fileID: 1128413885007942, guid: afe4c7f073247af4fb7ced743ad1d39b, type: 3}
- {fileID: 1128413885007942, guid: 432739c328520d441be9ed28bfbdad39, type: 3}
- {fileID: 2594730408127643657, guid: 97a4deaaf578a3749a3faf64b4bca31e, type: 3}
- {fileID: 1910226807272376183, guid: 5cda0b2c4e6173f4b9f5d7a5fb73daa8, type: 3}
- {fileID: 2574242144440115108, guid: 8ca84d98ac399ce4995b1eed60957150, type: 3}
- {fileID: 5807212295585326724, guid: 915e0bc2debf15349ac7d0fc4d9fdbdd, type: 3}
- {fileID: 1726283281479679969, guid: bafbf042a80d34a4392957fbdf636c38, type: 3}
- {fileID: 1128413885007942, guid: c4c4a483e458fad49ac498461505b71e, type: 3}
- {fileID: 1128413885007942, guid: dc160cc6dc26c094487d50394534839a, type: 3}
- {fileID: 1126043113942012, guid: 6e3f36c876024d94485d2bdb38454c0f, type: 3}
- {fileID: 1370975770900144, guid: 90ee6b42067374246977b4ad9a910b1a, type: 3}
- {fileID: 1128413885007942, guid: a535c1da58b9fe1469acf9c802a15d2b, type: 3}
- {fileID: 1128413885007942, guid: f20f5ad96ac2bd447b9e7b2764a16562, type: 3}
- {fileID: 1128413885007942, guid: aa0cf110926739d4899c2a10c1e4b7c4, type: 3}
- {fileID: 1128413885007942, guid: b8f4f156b4f9ec641a75f07ad7b6ad6c, type: 3}
- {fileID: 1128413885007942, guid: 6e1fb860104bd7449b97ac8f89c3131d, type: 3}
- {fileID: 1128413885007942, guid: 032ca2fa83c849948baca0aa9bc0b990, type: 3}
- {fileID: 1128413885007942, guid: e527a7159c739bd419dc48b7002837de, type: 3}
- {fileID: 1128413885007942, guid: 13f68d208195e4c4ebfca6524bca5095, type: 3}
- {fileID: 1128413885007942, guid: 8d95bf3fd05e8ba4abc7313c2defb5a6, type: 3}
- {fileID: 1128413885007942, guid: a0d50708b28574040846605e419f5a86, type: 3}
- {fileID: 1128413885007942, guid: 35eb7ac40f0399a45a37f03e34d720fc, type: 3}
- {fileID: 1128413885007942, guid: d6090b36c4f862e46837194e16423f80, type: 3}
- {fileID: 1128413885007942, guid: e98f0010f3b2fce44a4f7d6dcc95f239, type: 3}
- {fileID: 1128413885007942, guid: baa5d56c0dbb69b4b812f83f1db7b87a, type: 3}
- {fileID: 1128413885007942, guid: 13affb70456996b42b874973f546960d, type: 3}
- {fileID: 1128413885007942, guid: 3855fcdde23adf4468dd98eac7494ecb, type: 3}
- {fileID: 1128413885007942, guid: a3af1f71967e8874487fba5139eb2102, type: 3}
- {fileID: 1128413885007942, guid: 830d12f8baa9ba44e879ca6b42a1aedc, type: 3}
- {fileID: 1128413885007942, guid: 8f2a13cad5641e24ba4f3a0d9d4c41c2, type: 3}
- {fileID: 1128413885007942, guid: 5a47b1d2f5df8494ca69c8d9a6bc9339, type: 3}
- {fileID: 1128413885007942, guid: a0508e81d4545e14b8d435c9ff715cbf, type: 3}
- {fileID: 1128413885007942, guid: cb385adc29592f34bb0583a9fa1447d4, type: 3}
- {fileID: 1128413885007942, guid: 6bb51897cfdc8454ba3d4a5fa81ccfdf, type: 3}
- {fileID: 1128413885007942, guid: 8964c731dba7e4f4cbd201dae358321c, type: 3}
- {fileID: 1128413885007942, guid: 1a676e7ddc0187a49bade1ae51c8eefe, type: 3}
- {fileID: 1128413885007942, guid: 06d2793ba3945084fb2960dc5df2b6cd, type: 3}
- {fileID: 1934599479558842, guid: 36916f9cff84cf54c8162b4a335621f5, type: 3}
- {fileID: 1104841775206834, guid: 6d3310bb731f160419ccf76c7177917a, type: 3}
- {fileID: 1887443267475814, guid: fa50dc4371917fd4c95281f96ff70337, type: 3}
- {fileID: 1970879399845872, guid: 3e4a84ef383a9d541aa2bf1af7f1acc6, type: 3}
HueTexture: {fileID: 2800000, guid: d5f12de378a90064e8427946ec54d98c, type: 3}
--- !u!81 &337736210
AudioListener:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 337736208}
m_Enabled: 1
--- !u!124 &337736211
Behaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 337736208}
m_Enabled: 1
--- !u!20 &337736213
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 337736208}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 2
m_BackGroundColor: {r: 0.14117648, g: 0.14901961, b: 0.18823531, a: 0}
m_projectionMatrixMode: 1
m_GateFitMode: 2
m_FOVAxisMode: 0
m_Iso: 200
m_ShutterSpeed: 0.005
m_Aperture: 16
m_FocusDistance: 10
m_FocalLength: 50
m_BladeCount: 5
m_Curvature: {x: 2, y: 11}
m_BarrelClipping: 0.25
m_Anamorphism: 0
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 1000
field of view: 60
orthographic: 0
orthographic size: 5
m_Depth: -1
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingPath: 3
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 0
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!4 &337736214
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 337736208}
serializedVersion: 2
m_LocalRotation: {x: -0.08421808, y: 0.89374775, z: -0.18915693, w: -0.39792204}
m_LocalPosition: {x: 3.397115, y: 4.025708, z: 3.058777}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 32.9, y: -135, z: 0}
--- !u!850595691 &342918266
LightingSettings:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Settings.lighting
serializedVersion: 10
m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 0
m_RealtimeEnvironmentLighting: 1
m_BounceScale: 1
m_AlbedoBoost: 1
m_IndirectOutputScale: 1
m_UsingShadowmask: 1
m_BakeBackend: 1
m_LightmapMaxSize: 512
m_LightmapSizeFixed: 0
m_UseMipmapLimits: 1
m_BakeResolution: 40
m_Padding: 2
m_LightmapCompression: 0
m_LightmapPackingMode: 1
m_LightmapPackingMethod: 0
m_XAtlasPackingAttempts: 16384
m_XAtlasBruteForce: 0
m_XAtlasBlockAlign: 0
m_XAtlasRepackUnderutilizedLightmaps: 1
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_ExtractAO: 0
m_MixedBakeMode: 2
m_LightmapsBakeMode: 1
m_FilterMode: 1
m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0}
m_ExportTrainingData: 0
m_EnableWorkerProcessBaking: 1
m_TrainingDataDestination: TrainingData
m_RealtimeResolution: 2
m_ForceWhiteAlbedo: 0
m_ForceUpdates: 0
m_PVRCulling: 1
m_PVRSampling: 1
m_PVRDirectSampleCount: 32
m_PVRSampleCount: 512
m_PVREnvironmentSampleCount: 512
m_PVREnvironmentReferencePointCount: 2048
m_LightProbeSampleCountMultiplier: 4
m_PVRBounces: 2
m_PVRMinBounces: 2
m_PVREnvironmentImportanceSampling: 0
m_PVRFilteringMode: 2
m_PVRDenoiserTypeDirect: 0
m_PVRDenoiserTypeIndirect: 0
m_PVRDenoiserTypeAO: 0
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 5
m_PVRFilteringGaussRadiusAO: 2
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_RespectSceneVisibilityWhenBakingGI: 0
--- !u!1 &651888826
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 651888827}
- component: {fileID: 651888829}
- component: {fileID: 651888828}
m_Layer: 0
m_Name: New Text
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &651888827
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 651888826}
serializedVersion: 2
m_LocalRotation: {x: -0.082827814, y: 0.90198004, z: -0.19996414, w: -0.37361214}
m_LocalPosition: {x: -2, y: 2.52, z: -3.57}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1136332968}
m_LocalEulerAnglesHint: {x: 25, y: 225, z: 0}
--- !u!102 &651888828
TextMesh:
serializedVersion: 3
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 651888826}
m_Text: Please read "Readme"
m_OffsetZ: 0
m_CharacterSize: 0.03
m_LineSpacing: 1
m_Anchor: 0
m_Alignment: 0
m_TabSize: 4
m_FontSize: 100
m_FontStyle: 0
m_RichText: 1
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
m_Color:
serializedVersion: 2
rgba: 4294967295
--- !u!23 &651888829
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 651888826}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 0
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_ForceMeshLod: -1
m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 4294967295
m_RendererPriority: 0
m_Materials:
- {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_MaskInteraction: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!1 &1074541048
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1074541050}
- component: {fileID: 1074541049}
m_Layer: 0
m_Name: Reflection Probe
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!215 &1074541049
ReflectionProbe:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1074541048}
m_Enabled: 1
serializedVersion: 2
m_Type: 0
m_Mode: 0
m_RefreshMode: 0
m_TimeSlicingMode: 0
m_Resolution: 128
m_UpdateFrequency: 0
m_BoxSize: {x: 30, y: 10, z: 30}
m_BoxOffset: {x: 0, y: 0, z: 0}
m_NearClip: 0.3
m_FarClip: 1000
m_ShadowDistance: 100
m_ClearFlags: 1
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_IntensityMultiplier: 1
m_BlendDistance: 1
m_HDR: 1
m_BoxProjection: 0
m_RenderDynamicObjects: 0
m_UseOcclusionCulling: 1
m_Importance: 1
m_CustomBakedTexture: {fileID: 0}
--- !u!4 &1074541050
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1074541048}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 4, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1136332967
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1136332968}
m_Layer: 0
m_Name: CameraHolder
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1136332968
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1136332967}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 1, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1958247635}
- {fileID: 651888827}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1470152278
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1470152280}
- component: {fileID: 1470152279}
m_Layer: 0
m_Name: Directional Light
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!108 &1470152279
Light:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1470152278}
m_Enabled: 1
serializedVersion: 13
m_Type: 1
m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
m_Intensity: 0.2
m_Range: 10
m_SpotAngle: 30
m_InnerSpotAngle: 21.80208
m_CookieSize2D: {x: 10, y: 10}
m_Shadows:
m_Type: 2
m_Resolution: -1
m_CustomResolution: -1
m_Strength: 1
m_Bias: 0.05
m_NormalBias: 0.4
m_NearPlane: 0.2
m_CullingMatrixOverride:
e00: 1
e01: 0
e02: 0
e03: 0
e10: 0
e11: 1
e12: 0
e13: 0
e20: 0
e21: 0
e22: 1
e23: 0
e30: 0
e31: 0
e32: 0
e33: 1
m_UseCullingMatrixOverride: 0
m_Cookie: {fileID: 0}
m_DrawHalo: 0
m_Flare: {fileID: 0}
m_RenderMode: 0
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingLayerMask: 1
m_Lightmapping: 4
m_LightShadowCasterMode: 0
m_AreaSize: {x: 1, y: 1}
m_BounceIntensity: 1
m_ColorTemperature: 6570
m_UseColorTemperature: 0
m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
m_UseBoundingSphereOverride: 0
m_UseViewFrustumForShadowCasterCull: 1
m_ForceVisible: 0
m_ShapeRadius: 0
m_ShadowAngle: 0
m_LightUnit: 1
m_LuxAtDistance: 1
m_EnableSpotReflector: 1
--- !u!4 &1470152280
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1470152278}
serializedVersion: 2
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
m_LocalPosition: {x: 0, y: 30, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
--- !u!1 &1958247631
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1958247635}
- component: {fileID: 1958247634}
- component: {fileID: 1958247633}
- component: {fileID: 1958247632}
m_Layer: 0
m_Name: Cube
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 4294967295
m_IsActive: 1
--- !u!23 &1958247632
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1958247631}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_ForceMeshLod: -1
m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 4294967295
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: ca6fd35d7de69cb449d560ab9228d502, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_MaskInteraction: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!65 &1958247633
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1958247631}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Size: {x: 1, y: 1, z: 1}
m_Center: {x: 0, y: 0, z: 0}
--- !u!33 &1958247634
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1958247631}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!4 &1958247635
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1958247631}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: -6, z: 0}
m_LocalScale: {x: 30, y: 10, z: 30}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1136332968}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &2070696574
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2070696576}
- component: {fileID: 2070696575}
m_Layer: 0
m_Name: Light Probe Group
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!220 &2070696575
LightProbeGroup:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2070696574}
m_Enabled: 1
m_SourcePositions:
- {x: -5.3811216, y: -0.8076048, z: -5.457525}
- {x: -5.3811216, y: -0.8076048, z: -1}
- {x: -1, y: -0.8076048, z: -5.457525}
- {x: -1, y: -0.8076048, z: -1}
- {x: 1, y: -0.8076048, z: -5.457525}
- {x: 1, y: -0.8076048, z: -1}
- {x: 3.0041199, y: -0.8076048, z: -5.457525}
- {x: 3.0041199, y: -0.8076048, z: -1}
- {x: 5.2808022, y: -0.8076048, z: -5.457525}
- {x: 5.2808022, y: -0.8076048, z: -1}
- {x: -2.9761786, y: -0.8076048, z: -5.457525}
- {x: -2.9761786, y: -0.8076048, z: -1}
- {x: -5.3811216, y: -0.8076048, z: 1}
- {x: -1, y: -0.8076048, z: 1}
- {x: 1, y: -0.8076048, z: 1}
- {x: 3.0041199, y: -0.8076048, z: 1}
- {x: 5.2808022, y: -0.8076048, z: 1}
- {x: -2.9761786, y: -0.8076048, z: 1}
- {x: -5.3811216, y: -0.8076048, z: 2.9764745}
- {x: -1, y: -0.8076048, z: 2.9764745}
- {x: 1, y: -0.8076048, z: 2.9764745}
- {x: 3.0041199, y: -0.8076048, z: 2.9764745}
- {x: 5.2808022, y: -0.8076048, z: 2.9764745}
- {x: -2.9761786, y: -0.8076048, z: 2.9764745}
- {x: -5.3811216, y: -0.8076048, z: 5.302425}
- {x: -1, y: -0.8076048, z: 5.302425}
- {x: 1, y: -0.8076048, z: 5.302425}
- {x: 3.0041199, y: -0.8076048, z: 5.302425}
- {x: 5.2808022, y: -0.8076048, z: 5.302425}
- {x: -2.9761786, y: -0.8076048, z: 5.302425}
- {x: -5.3811216, y: -0.8076048, z: -2.9463658}
- {x: -1, y: -0.8076048, z: -2.9463658}
- {x: 1, y: -0.8076048, z: -2.9463658}
- {x: 3.0041199, y: -0.8076048, z: -2.9463658}
- {x: 5.2808022, y: -0.8076048, z: -2.9463658}
- {x: -2.9761786, y: -0.8076048, z: -2.9463658}
- {x: -5.3811216, y: 1, z: -5.457525}
- {x: -5.3811216, y: 1, z: -1}
- {x: -1, y: 1, z: -5.457525}
- {x: -1, y: 1, z: -1}
- {x: 1, y: 1, z: -5.457525}
- {x: 1, y: 1, z: -1}
- {x: 3.0041199, y: 1, z: -5.457525}
- {x: 3.0041199, y: 1, z: -1}
- {x: 5.2808022, y: 1, z: -5.457525}
- {x: 5.2808022, y: 1, z: -1}
- {x: -2.9761786, y: 1, z: -5.457525}
- {x: -2.9761786, y: 1, z: -1}
- {x: -5.3811216, y: 1, z: 1}
- {x: -1, y: 1, z: 1}
- {x: 1, y: 1, z: 1}
- {x: 3.0041199, y: 1, z: 1}
- {x: 5.2808022, y: 1, z: 1}
- {x: -2.9761786, y: 1, z: 1}
- {x: -5.3811216, y: 1, z: 2.9764745}
- {x: -1, y: 1, z: 2.9764745}
- {x: 1, y: 1, z: 2.9764745}
- {x: 3.0041199, y: 1, z: 2.9764745}
- {x: 5.2808022, y: 1, z: 2.9764745}
- {x: -2.9761786, y: 1, z: 2.9764745}
- {x: -5.3811216, y: 1, z: 5.302425}
- {x: -1, y: 1, z: 5.302425}
- {x: 1, y: 1, z: 5.302425}
- {x: 3.0041199, y: 1, z: 5.302425}
- {x: 5.2808022, y: 1, z: 5.302425}
- {x: -2.9761786, y: 1, z: 5.302425}
- {x: -5.3811216, y: 1, z: -2.9463658}
- {x: -1, y: 1, z: -2.9463658}
- {x: 1, y: 1, z: -2.9463658}
- {x: 3.0041199, y: 1, z: -2.9463658}
- {x: 5.2808022, y: 1, z: -2.9463658}
- {x: -2.9761786, y: 1, z: -2.9463658}
- {x: -5.3811216, y: -0.029626846, z: -5.457525}
- {x: -5.3811216, y: -0.029626846, z: -1}
- {x: -1, y: -0.029626846, z: -5.457525}
- {x: -1, y: -0.029626846, z: -1}
- {x: 1, y: -0.029626846, z: -5.457525}
- {x: 1, y: -0.029626846, z: -1}
- {x: 3.0041199, y: -0.029626846, z: -5.457525}
- {x: 3.0041199, y: -0.029626846, z: -1}
- {x: 5.2808022, y: -0.029626846, z: -5.457525}
- {x: 5.2808022, y: -0.029626846, z: -1}
- {x: -2.9761786, y: -0.029626846, z: -5.457525}
- {x: -2.9761786, y: -0.029626846, z: -1}
- {x: -5.3811216, y: -0.029626846, z: 1}
- {x: -1, y: -0.029626846, z: 1}
- {x: 1, y: -0.029626846, z: 1}
- {x: 3.0041199, y: -0.029626846, z: 1}
- {x: 5.2808022, y: -0.029626846, z: 1}
- {x: -2.9761786, y: -0.029626846, z: 1}
- {x: -5.3811216, y: -0.029626846, z: 2.9764745}
- {x: -1, y: -0.029626846, z: 2.9764745}
- {x: 1, y: -0.029626846, z: 2.9764745}
- {x: 3.0041199, y: -0.029626846, z: 2.9764745}
- {x: 5.2808022, y: -0.029626846, z: 2.9764745}
- {x: -2.9761786, y: -0.029626846, z: 2.9764745}
- {x: -5.3811216, y: -0.029626846, z: 5.302425}
- {x: -1, y: -0.029626846, z: 5.302425}
- {x: 1, y: -0.029626846, z: 5.302425}
- {x: 3.0041199, y: -0.029626846, z: 5.302425}
- {x: 5.2808022, y: -0.029626846, z: 5.302425}
- {x: -2.9761786, y: -0.029626846, z: 5.302425}
- {x: -5.3811216, y: -0.029626846, z: -2.9463658}
- {x: -1, y: -0.029626846, z: -2.9463658}
- {x: 1, y: -0.029626846, z: -2.9463658}
- {x: 3.0041199, y: -0.029626846, z: -2.9463658}
- {x: 5.2808022, y: -0.029626846, z: -2.9463658}
- {x: -2.9761786, y: -0.029626846, z: -2.9463658}
- {x: -5.3811216, y: 2.6029928, z: -5.457525}
- {x: -5.3811216, y: 2.6029928, z: -1}
- {x: -1, y: 2.6029928, z: -5.457525}
- {x: -1, y: 2.6029928, z: -1}
- {x: 1, y: 2.6029928, z: -5.457525}
- {x: 1, y: 2.6029928, z: -1}
- {x: 3.0041199, y: 2.6029928, z: -5.457525}
- {x: 3.0041199, y: 2.6029928, z: -1}
- {x: 5.2808022, y: 2.6029928, z: -5.457525}
- {x: 5.2808022, y: 2.6029928, z: -1}
- {x: -2.9761786, y: 2.6029928, z: -5.457525}
- {x: -2.9761786, y: 2.6029928, z: -1}
- {x: -5.3811216, y: 2.6029928, z: 1}
- {x: -1, y: 2.6029928, z: 1}
- {x: 1, y: 2.6029928, z: 1}
- {x: 3.0041199, y: 2.6029928, z: 1}
- {x: 5.2808022, y: 2.6029928, z: 1}
- {x: -2.9761786, y: 2.6029928, z: 1}
- {x: -5.3811216, y: 2.6029928, z: 2.9764745}
- {x: -1, y: 2.6029928, z: 2.9764745}
- {x: 1, y: 2.6029928, z: 2.9764745}
- {x: 3.0041199, y: 2.6029928, z: 2.9764745}
- {x: 5.2808022, y: 2.6029928, z: 2.9764745}
- {x: -2.9761786, y: 2.6029928, z: 2.9764745}
- {x: -5.3811216, y: 2.6029928, z: 5.302425}
- {x: -1, y: 2.6029928, z: 5.302425}
- {x: 1, y: 2.6029928, z: 5.302425}
- {x: 3.0041199, y: 2.6029928, z: 5.302425}
- {x: 5.2808022, y: 2.6029928, z: 5.302425}
- {x: -2.9761786, y: 2.6029928, z: 5.302425}
- {x: -5.3811216, y: 2.6029928, z: -2.9463658}
- {x: -1, y: 2.6029928, z: -2.9463658}
- {x: 1, y: 2.6029928, z: -2.9463658}
- {x: 3.0041199, y: 2.6029928, z: -2.9463658}
- {x: 5.2808022, y: 2.6029928, z: -2.9463658}
- {x: -2.9761786, y: 2.6029928, z: -2.9463658}
m_Dering: 1
--- !u!4 &2070696576
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2070696574}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 1, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1660057539 &9223372036854775807
SceneRoots:
m_ObjectHideFlags: 0
m_Roots:
- {fileID: 337736214}
- {fileID: 1136332968}
- {fileID: 1470152280}
- {fileID: 1074541050}
- {fileID: 2070696576}

View File

@@ -1,652 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!29 &1
OcclusionCullingSettings:
m_ObjectHideFlags: 0
serializedVersion: 2
m_OcclusionBakeSettings:
smallestOccluder: 5
smallestHole: 0.25
backfaceThreshold: 100
m_SceneGUID: 00000000000000000000000000000000
m_OcclusionCullingData: {fileID: 0}
--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
serializedVersion: 10
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3
m_FogDensity: 0.01
m_LinearFogStart: 0
m_LinearFogEnd: 300
m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
m_AmbientIntensity: 1
m_AmbientMode: 3
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
m_SkyboxMaterial: {fileID: 0}
m_HaloStrength: 0.5
m_FlareStrength: 1
m_FlareFadeSpeed: 3
m_HaloTexture: {fileID: 0}
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
m_DefaultReflectionMode: 0
m_DefaultReflectionResolution: 128
m_ReflectionBounces: 1
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 13
m_BakeOnSceneLoad: 0
m_GISettings:
serializedVersion: 2
m_BounceScale: 1
m_IndirectOutputScale: 1
m_AlbedoBoost: 1
m_EnvironmentLightingMode: 0
m_EnableBakedLightmaps: 0
m_EnableRealtimeLightmaps: 0
m_LightmapEditorSettings:
serializedVersion: 12
m_Resolution: 2
m_BakeResolution: 40
m_AtlasSize: 1024
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_ExtractAmbientOcclusion: 0
m_Padding: 2
m_LightmapParameters: {fileID: 0}
m_LightmapsBakeMode: 1
m_TextureCompression: 1
m_ReflectionCompression: 2
m_MixedBakeMode: 2
m_BakeBackend: 1
m_PVRSampling: 1
m_PVRDirectSampleCount: 32
m_PVRSampleCount: 512
m_PVRBounces: 2
m_PVREnvironmentSampleCount: 256
m_PVREnvironmentReferencePointCount: 2048
m_PVRFilteringMode: 1
m_PVRDenoiserTypeDirect: 1
m_PVRDenoiserTypeIndirect: 1
m_PVRDenoiserTypeAO: 1
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVREnvironmentMIS: 1
m_PVRCulling: 1
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 5
m_PVRFilteringGaussRadiusAO: 2
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_ExportTrainingData: 0
m_TrainingDataDestination: TrainingData
m_LightProbeSampleCountMultiplier: 4
m_LightingDataAsset: {fileID: 0}
m_LightingSettings: {fileID: 0}
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2
m_ObjectHideFlags: 0
m_BuildSettings:
serializedVersion: 3
agentTypeID: 0
agentRadius: 0.5
agentHeight: 2
agentSlope: 45
agentClimb: 0.4
ledgeDropHeight: 0
maxJumpAcrossDistance: 0
minRegionArea: 2
manualCellSize: 0
cellSize: 0.16666667
manualTileSize: 0
tileSize: 256
buildHeightMesh: 0
maxJobWorkers: 0
preserveTilesOutsideBounds: 0
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &82022331
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 82022335}
- component: {fileID: 82022334}
- component: {fileID: 82022332}
m_Layer: 0
m_Name: UI Camera
m_TagString: MainCamera
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &82022332
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 82022331}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3}
m_Name:
m_EditorClassIdentifier:
m_RenderShadows: 1
m_RequiresDepthTextureOption: 2
m_RequiresOpaqueTextureOption: 2
m_CameraType: 1
m_Cameras: []
m_RendererIndex: -1
m_VolumeLayerMask:
serializedVersion: 2
m_Bits: 1
m_VolumeTrigger: {fileID: 0}
m_VolumeFrameworkUpdateModeOption: 2
m_RenderPostProcessing: 0
m_Antialiasing: 0
m_AntialiasingQuality: 2
m_StopNaN: 0
m_Dithering: 0
m_ClearDepth: 1
m_AllowXRRendering: 1
m_AllowHDROutput: 1
m_UseScreenCoordOverride: 0
m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0}
m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0}
m_RequiresDepthTexture: 0
m_RequiresColorTexture: 0
m_TaaSettings:
m_Quality: 3
m_FrameInfluence: 0.1
m_JitterScale: 1
m_MipBias: 0
m_VarianceClampScale: 0.9
m_ContrastAdaptiveSharpening: 0
m_Version: 2
--- !u!20 &82022334
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 82022331}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 4
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
m_projectionMatrixMode: 1
m_GateFitMode: 2
m_FOVAxisMode: 0
m_Iso: 200
m_ShutterSpeed: 0.005
m_Aperture: 16
m_FocusDistance: 10
m_FocalLength: 50
m_BladeCount: 5
m_Curvature: {x: 2, y: 11}
m_BarrelClipping: 0.25
m_Anamorphism: 0
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 1000
field of view: 34
orthographic: 1
orthographic size: 5
m_Depth: -1
m_CullingMask:
serializedVersion: 2
m_Bits: 32
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 0
m_HDR: 1
m_AllowMSAA: 0
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 0
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!4 &82022335
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 82022331}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: -10}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &147402014
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 147402015}
- component: {fileID: 147402016}
m_Layer: 0
m_Name: InputServiceModules
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &147402015
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 147402014}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 16.30939, y: 8.32207, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 274737044}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &147402016
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 147402014}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1b23ca8ea5ee647ddba0712811953811, type: 3}
m_Name:
m_EditorClassIdentifier: Services.Inputs::Darkmatter.Services.Inputs.InputServiceModule
inputReaderSO: {fileID: 11400000, guid: f9b7ed848ae3b4036923bbbb2f77fe40, type: 2}
--- !u!1 &274737043
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 274737044}
m_Layer: 0
m_Name: ServiceModule
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &274737044
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 274737043}
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:
- {fileID: 292698384}
- {fileID: 147402015}
m_Father: {fileID: 329578012}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &292698383
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 292698384}
- component: {fileID: 292698385}
m_Layer: 0
m_Name: CameraServiceModule
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &292698384
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 292698383}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 16.30939, y: 8.32207, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 274737044}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &292698385
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 292698383}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d739bbb9f94e0441abcf2a1e7c1fca80, type: 3}
m_Name:
m_EditorClassIdentifier: Services.Camera::Darkmatter.Services.Camera.Installers.CameraServiceModule
mainCamera: {fileID: 519420031}
uiCamera: {fileID: 82022334}
--- !u!1 &329578011
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 329578012}
- component: {fileID: 329578013}
m_Layer: 0
m_Name: GameLifetimeScope
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &329578012
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 329578011}
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:
- {fileID: 274737044}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &329578013
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 329578011}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4ca410c053f074e1cba2f7041f500d34, type: 3}
m_Name:
m_EditorClassIdentifier: Darkmatter.App::GameLifetimeScope
parentReference:
TypeName:
autoRun: 1
autoInjectGameObjects: []
serviceModules:
- {fileID: 292698385}
- {fileID: 147402016}
--- !u!1 &519420028
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 519420032}
- component: {fileID: 519420031}
- component: {fileID: 519420029}
- component: {fileID: 519420030}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!81 &519420029
AudioListener:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 519420028}
m_Enabled: 1
--- !u!114 &519420030
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 519420028}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3}
m_Name:
m_EditorClassIdentifier:
m_RenderShadows: 1
m_RequiresDepthTextureOption: 2
m_RequiresOpaqueTextureOption: 2
m_CameraType: 0
m_Cameras:
- {fileID: 82022334}
m_RendererIndex: -1
m_VolumeLayerMask:
serializedVersion: 2
m_Bits: 1
m_VolumeTrigger: {fileID: 0}
m_VolumeFrameworkUpdateModeOption: 2
m_RenderPostProcessing: 0
m_Antialiasing: 0
m_AntialiasingQuality: 2
m_StopNaN: 0
m_Dithering: 0
m_ClearDepth: 1
m_AllowXRRendering: 1
m_AllowHDROutput: 1
m_UseScreenCoordOverride: 0
m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0}
m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0}
m_RequiresDepthTexture: 0
m_RequiresColorTexture: 0
m_TaaSettings:
m_Quality: 3
m_FrameInfluence: 0.1
m_JitterScale: 1
m_MipBias: 0
m_VarianceClampScale: 0.9
m_ContrastAdaptiveSharpening: 0
m_Version: 2
--- !u!20 &519420031
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 519420028}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 2
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
m_projectionMatrixMode: 1
m_GateFitMode: 2
m_FOVAxisMode: 0
m_Iso: 200
m_ShutterSpeed: 0.005
m_Aperture: 16
m_FocusDistance: 10
m_FocalLength: 50
m_BladeCount: 5
m_Curvature: {x: 2, y: 11}
m_BarrelClipping: 0.25
m_Anamorphism: 0
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 1000
field of view: 34
orthographic: 1
orthographic size: 5
m_Depth: -1
m_CullingMask:
serializedVersion: 2
m_Bits: 0
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 0
m_HDR: 1
m_AllowMSAA: 0
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 0
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!4 &519420032
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 519420028}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: -10}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1050564724
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1050564725}
m_Layer: 0
m_Name: ServiceModules
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1050564725
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1050564724}
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: 1798580248}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1798580247
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1798580248}
- component: {fileID: 1798580249}
m_Layer: 0
m_Name: RootLifetimeScope
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1798580248
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1798580247}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 16.30939, y: 8.32207, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1050564725}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1798580249
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1798580247}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: cdbf68f1689a84f7588ae13b63f7a3c9, type: 3}
m_Name:
m_EditorClassIdentifier: Darkmatter.App::RootLifetimeScope
parentReference:
TypeName:
autoRun: 1
autoInjectGameObjects: []
serviceModules: []
--- !u!1660057539 &9223372036854775807
SceneRoots:
m_ObjectHideFlags: 0
m_Roots:
- {fileID: 519420032}
- {fileID: 82022335}
- {fileID: 1798580248}
- {fileID: 329578012}