zooming for easy coloring
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using Cysharp.Threading.Tasks;
|
||||
@@ -20,6 +21,7 @@ public interface IColoringController
|
||||
bool IsPlayingCompletionAnimation { get; }
|
||||
|
||||
bool HasNonAuthoredColors { get; }
|
||||
IDisposable UseNonZoomedView();
|
||||
void ResetAll();
|
||||
void Clear();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,7 +51,12 @@ namespace Darkmatter.Features.Capture
|
||||
// A null result keeps the existing thumbnail and skips the gallery write (both no-op on null).
|
||||
if (_coloring.IsPlayingCompletionAnimation) return null;
|
||||
|
||||
var png = await _captureService.CapturePngAsync(_refs.PaperRoot.gameObject, _config.CaptureScale, ct);
|
||||
byte[] png;
|
||||
using (_coloring.UseNonZoomedView())
|
||||
{
|
||||
png = await _captureService.CapturePngAsync(_refs.PaperRoot.gameObject, _config.CaptureScale, ct);
|
||||
}
|
||||
|
||||
if (!saveToGallery || png == null || png.Length == 0) return png;
|
||||
|
||||
var tex = new Texture2D(2, 2, TextureFormat.RGBA32, mipChain: false);
|
||||
|
||||
@@ -8,7 +8,8 @@
|
||||
"GUID:b4c9f7fbf1e144933a1797dc208ece5f",
|
||||
"GUID:b0214a6008ed146ff8f122a6a9c2f6cc",
|
||||
"GUID:f51ebe6a0ceec4240a699833d6309b23",
|
||||
"GUID:80ecb87cae9c44d19824e70ea7229748"
|
||||
"GUID:80ecb87cae9c44d19824e70ea7229748",
|
||||
"GUID:75469ad4d38634e559750d17036d5f7c"
|
||||
],
|
||||
"includePlatforms": [],
|
||||
"excludePlatforms": [],
|
||||
@@ -19,4 +20,4 @@
|
||||
"defineConstraints": [],
|
||||
"versionDefines": [],
|
||||
"noEngineReferences": false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ namespace Darkmatter.Features.Coloring
|
||||
public class ColoringFeatureModule : MonoBehaviour, IModule
|
||||
{
|
||||
[SerializeField] private ColorPaletteHolderView paletteHolderView;
|
||||
[SerializeField] private ColoringPinchZoomController pinchZoomController;
|
||||
|
||||
public void Register(IContainerBuilder builder)
|
||||
{
|
||||
@@ -20,6 +21,7 @@ namespace Darkmatter.Features.Coloring
|
||||
builder.RegisterEntryPoint<ColorPaletteHolderPresenter>().WithParameter(paletteHolderView);
|
||||
}
|
||||
|
||||
builder.RegisterComponent(pinchZoomController);
|
||||
builder.Register<IColorButtonFactory, ColorButtonFactory>(Lifetime.Singleton);
|
||||
builder.Register<ColoringStateRepository>(Lifetime.Singleton);
|
||||
builder.Register<IColoringController, ColoringController>(Lifetime.Singleton);
|
||||
|
||||
@@ -33,6 +33,7 @@ public class ColoringController : IColoringController, IDisposable
|
||||
private GameObject _colorButtonPrefab;
|
||||
private GameObject _completionAnimationInstance;
|
||||
private CompletionAnimationView _completionAnimationView;
|
||||
private readonly ColoringPinchZoomController _pinchZoom;
|
||||
private bool _isPlayingCompletionAnimation;
|
||||
private readonly List<ColorRegionView> _regions = new();
|
||||
private readonly List<ColorButton> _buttons = new();
|
||||
@@ -41,6 +42,7 @@ public class ColoringController : IColoringController, IDisposable
|
||||
public ColoringController(
|
||||
ColoringStateRepository repository,
|
||||
IColorButtonFactory buttonFactory,
|
||||
ColoringPinchZoomController pinchZoom,
|
||||
IEventBus bus,
|
||||
IAssetProviderService assetProviderService,
|
||||
IUndoStack history,
|
||||
@@ -52,6 +54,7 @@ public class ColoringController : IColoringController, IDisposable
|
||||
_bus = bus;
|
||||
_assetProviderService = assetProviderService;
|
||||
_history = history;
|
||||
_pinchZoom = pinchZoom;
|
||||
_refs = refs;
|
||||
_paletteHolder = paletteHolder;
|
||||
}
|
||||
@@ -60,7 +63,7 @@ public class ColoringController : IColoringController, IDisposable
|
||||
IReadOnlyDictionary<string, Color> savedColors, CancellationToken ct)
|
||||
{
|
||||
Clear();
|
||||
_paletteHolder.Show();
|
||||
_ = _paletteHolder.Show();
|
||||
await TryLoadColorButtonPrefabAsync(ct);
|
||||
ct.ThrowIfCancellationRequested();
|
||||
await TryLoadColorPaletteAsync(template, ct);
|
||||
@@ -110,6 +113,8 @@ public class ColoringController : IColoringController, IDisposable
|
||||
{
|
||||
if (_completionAnimationInstance == null || _completionAnimationView == null) return;
|
||||
if (_colorInstance != null) _colorInstance.SetActive(false);
|
||||
if (_pinchZoom != null)
|
||||
_pinchZoom.ResetZoom();
|
||||
_completionAnimationInstance.SetActive(true);
|
||||
_isPlayingCompletionAnimation = true;
|
||||
try
|
||||
@@ -138,6 +143,14 @@ public class ColoringController : IColoringController, IDisposable
|
||||
}
|
||||
}
|
||||
|
||||
public IDisposable UseNonZoomedView()
|
||||
{
|
||||
if (_pinchZoom == null)
|
||||
return null;
|
||||
|
||||
return _pinchZoom.UseNonZoomedView();
|
||||
}
|
||||
|
||||
public void ResetAll()
|
||||
{
|
||||
if (_regions.Count == 0) return;
|
||||
@@ -175,6 +188,9 @@ public class ColoringController : IColoringController, IDisposable
|
||||
UnityEngine.Object.Destroy(_colorInstance);
|
||||
_colorInstance = null;
|
||||
}
|
||||
|
||||
if (_pinchZoom != null)
|
||||
_pinchZoom.SetTarget(null);
|
||||
}
|
||||
|
||||
public void Dispose() => Clear();
|
||||
@@ -182,6 +198,7 @@ public class ColoringController : IColoringController, IDisposable
|
||||
private void InitializeColorRegions(IDrawingTemplate template, IReadOnlyDictionary<string, Color> savedColors)
|
||||
{
|
||||
_colorInstance = UnityEngine.Object.Instantiate(template.ColoringPrefab, _refs.PaperRoot);
|
||||
InitializePinchZoom(_refs.PaperRoot);
|
||||
if (template.CompletionAnimationPrefab != null)
|
||||
{
|
||||
_completionAnimationInstance = UnityEngine.Object.Instantiate(template.CompletionAnimationPrefab, _refs.PaperRoot);
|
||||
@@ -207,6 +224,17 @@ public class ColoringController : IColoringController, IDisposable
|
||||
}
|
||||
}
|
||||
|
||||
private void InitializePinchZoom(RectTransform target)
|
||||
{
|
||||
if (target == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (_pinchZoom != null)
|
||||
_pinchZoom.SetTarget(target);
|
||||
}
|
||||
|
||||
private async UniTask TryLoadColorButtonPrefabAsync(CancellationToken ct)
|
||||
{
|
||||
if (_colorButtonPrefab != null) return;
|
||||
@@ -231,4 +259,4 @@ public class ColoringController : IColoringController, IDisposable
|
||||
foreach (var color in _repository.SelectedPalette.Colors)
|
||||
_buttons.Add(_buttonFactory.Create(_colorButtonPrefab, color));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,289 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using UnityEngine.InputSystem;
|
||||
|
||||
namespace Darkmatter.Features.Coloring.Systems
|
||||
{
|
||||
|
||||
public sealed class ColoringPinchZoomController : MonoBehaviour
|
||||
{
|
||||
private const float MinimumPinchDistance = 8f;
|
||||
|
||||
[SerializeField] private float minZoom = 1f;
|
||||
[SerializeField] private float maxZoom = 3f;
|
||||
[SerializeField] private float scrollZoomSensitivity = 0.0015f;
|
||||
|
||||
private RectTransform _target;
|
||||
private RectTransform _parent;
|
||||
private Canvas _canvas;
|
||||
private Camera _eventCamera;
|
||||
|
||||
private bool _isPinching;
|
||||
private float _currentZoom = 1f;
|
||||
private Vector3 _baseScale = Vector3.one;
|
||||
private Vector2 _baseAnchoredPosition;
|
||||
|
||||
public void SetTarget(RectTransform target)
|
||||
{
|
||||
ResetZoom();
|
||||
_target = target;
|
||||
_parent = target != null ? target.parent as RectTransform : null;
|
||||
_canvas = target != null ? target.GetComponentInParent<Canvas>() : null;
|
||||
_eventCamera = ResolveEventCamera(_canvas);
|
||||
_baseScale = target != null ? target.localScale : Vector3.one;
|
||||
_baseAnchoredPosition = target != null ? target.anchoredPosition : Vector2.zero;
|
||||
_currentZoom = 1f;
|
||||
enabled = _target != null && _parent != null;
|
||||
}
|
||||
|
||||
public void ResetZoom()
|
||||
{
|
||||
if (_target != null)
|
||||
{
|
||||
_target.localScale = _baseScale;
|
||||
_target.anchoredPosition = _baseAnchoredPosition;
|
||||
}
|
||||
|
||||
_currentZoom = 1f;
|
||||
_isPinching = false;
|
||||
}
|
||||
|
||||
public IDisposable UseNonZoomedView()
|
||||
{
|
||||
if (_target == null)
|
||||
return null;
|
||||
|
||||
var state = new ViewState(_target.localScale, _target.anchoredPosition, _currentZoom);
|
||||
ResetZoom();
|
||||
return new NonZoomedViewScope(this, state);
|
||||
}
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
enabled = false;
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (_target == null || _parent == null)
|
||||
{
|
||||
enabled = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (TryApplyPinchZoom())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_isPinching = false;
|
||||
TryApplyScrollZoom();
|
||||
}
|
||||
|
||||
private bool TryApplyPinchZoom()
|
||||
{
|
||||
if (!TryGetTouchSamples(out TouchSample firstTouch, out TouchSample secondTouch))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
float distance = Vector2.Distance(firstTouch.Position, secondTouch.Position);
|
||||
if (distance < MinimumPinchDistance)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
Vector2 midpoint = (firstTouch.Position + secondTouch.Position) * 0.5f;
|
||||
if (!TryGetParentLocalPoint(midpoint, out Vector2 midpointLocal))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!_isPinching)
|
||||
{
|
||||
_isPinching = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
float previousDistance = Vector2.Distance(firstTouch.PreviousPosition, secondTouch.PreviousPosition);
|
||||
if (previousDistance < MinimumPinchDistance)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
float targetZoom = Mathf.Clamp(_currentZoom * (distance / previousDistance), minZoom, maxZoom);
|
||||
ZoomTowards(midpointLocal, targetZoom);
|
||||
return true;
|
||||
}
|
||||
|
||||
private void TryApplyScrollZoom()
|
||||
{
|
||||
Mouse mouse = Mouse.current;
|
||||
if (mouse == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
float scroll = mouse.scroll.ReadValue().y;
|
||||
if (Mathf.Approximately(scroll, 0f))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Vector2 screenPosition = mouse.position.ReadValue();
|
||||
if (!IsInputPointAllowed(screenPosition))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!TryGetParentLocalPoint(screenPosition, out Vector2 localPoint))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
float targetZoom = Mathf.Clamp(_currentZoom * (1f + scroll * scrollZoomSensitivity), minZoom, maxZoom);
|
||||
ZoomTowards(localPoint, targetZoom);
|
||||
}
|
||||
|
||||
private void ZoomTowards(Vector2 parentLocalPoint, float targetZoom)
|
||||
{
|
||||
if (Mathf.Approximately(targetZoom, _currentZoom))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Vector2 contentPoint = (parentLocalPoint - _target.anchoredPosition) / _currentZoom;
|
||||
_currentZoom = targetZoom;
|
||||
_target.localScale = _baseScale * _currentZoom;
|
||||
_target.anchoredPosition = Mathf.Approximately(_currentZoom, minZoom)
|
||||
? _baseAnchoredPosition
|
||||
: parentLocalPoint - contentPoint * _currentZoom;
|
||||
}
|
||||
|
||||
private bool TryGetParentLocalPoint(Vector2 screenPoint, out Vector2 localPoint)
|
||||
{
|
||||
return RectTransformUtility.ScreenPointToLocalPointInRectangle(_parent, screenPoint, _eventCamera,
|
||||
out localPoint);
|
||||
}
|
||||
|
||||
private bool TryGetTouchSamples(out TouchSample firstTouch, out TouchSample secondTouch)
|
||||
{
|
||||
firstTouch = default;
|
||||
secondTouch = default;
|
||||
|
||||
Touchscreen touchscreen = Touchscreen.current;
|
||||
if (touchscreen == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
int count = 0;
|
||||
foreach (var touchControl in touchscreen.touches)
|
||||
{
|
||||
if (!touchControl.press.isPressed)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
Vector2 position = touchControl.position.ReadValue();
|
||||
if (!IsInputPointAllowed(position))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var sample = new TouchSample(position, touchControl.delta.ReadValue());
|
||||
if (count == 0)
|
||||
{
|
||||
firstTouch = sample;
|
||||
}
|
||||
else
|
||||
{
|
||||
secondTouch = sample;
|
||||
return true;
|
||||
}
|
||||
|
||||
count++;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private bool IsInputPointAllowed(Vector2 screenPoint)
|
||||
{
|
||||
return _target != null &&
|
||||
RectTransformUtility.RectangleContainsScreenPoint(_target, screenPoint, _eventCamera);
|
||||
}
|
||||
|
||||
private static Camera ResolveEventCamera(Canvas canvas)
|
||||
{
|
||||
if (canvas == null || canvas.renderMode == RenderMode.ScreenSpaceOverlay)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return canvas.worldCamera;
|
||||
}
|
||||
|
||||
private void RestoreView(ViewState state)
|
||||
{
|
||||
if (_target == null)
|
||||
return;
|
||||
|
||||
_target.localScale = state.Scale;
|
||||
_target.anchoredPosition = state.AnchoredPosition;
|
||||
_currentZoom = state.CurrentZoom;
|
||||
_isPinching = false;
|
||||
}
|
||||
|
||||
private readonly struct ViewState
|
||||
{
|
||||
public readonly Vector3 Scale;
|
||||
public readonly Vector2 AnchoredPosition;
|
||||
public readonly float CurrentZoom;
|
||||
|
||||
public ViewState(Vector3 scale, Vector2 anchoredPosition, float currentZoom)
|
||||
{
|
||||
Scale = scale;
|
||||
AnchoredPosition = anchoredPosition;
|
||||
CurrentZoom = currentZoom;
|
||||
}
|
||||
}
|
||||
|
||||
private sealed class NonZoomedViewScope : IDisposable
|
||||
{
|
||||
private ColoringPinchZoomController _controller;
|
||||
private readonly ViewState _state;
|
||||
|
||||
public NonZoomedViewScope(ColoringPinchZoomController controller, ViewState state)
|
||||
{
|
||||
_controller = controller;
|
||||
_state = state;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (_controller == null)
|
||||
return;
|
||||
|
||||
if (_controller != null)
|
||||
_controller.RestoreView(_state);
|
||||
|
||||
_controller = null;
|
||||
}
|
||||
}
|
||||
|
||||
private readonly struct TouchSample
|
||||
{
|
||||
public readonly Vector2 Position;
|
||||
public readonly Vector2 PreviousPosition;
|
||||
public readonly Vector2 Delta;
|
||||
|
||||
public TouchSample(Vector2 position, Vector2 delta)
|
||||
{
|
||||
Position = position;
|
||||
PreviousPosition = position - delta;
|
||||
Delta = delta;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ddf9e0ad8b4b4ee59470410f7cf40689
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
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
@@ -74,7 +74,6 @@ MonoBehaviour:
|
||||
m_MixedLightingSupported: 1
|
||||
m_SupportsLightCookies: 1
|
||||
m_SupportsLightLayers: 0
|
||||
m_DebugLevel: 0
|
||||
m_StoreActionsOptimization: 0
|
||||
m_UseAdaptivePerformance: 1
|
||||
m_ColorGradingMode: 0
|
||||
@@ -136,6 +135,7 @@ MonoBehaviour:
|
||||
m_PrefilterReflectionProbeBlending: 1
|
||||
m_PrefilterReflectionProbeBoxProjection: 1
|
||||
m_PrefilterReflectionProbeAtlas: 1
|
||||
m_PrefilterPointSamplingUpsampling: 1
|
||||
m_ShaderVariantLogLevel: 0
|
||||
m_ShadowCascades: 0
|
||||
m_Textures:
|
||||
|
||||
@@ -68,7 +68,20 @@ MonoBehaviour:
|
||||
- rid: 570818657416118287
|
||||
- rid: 570818657416118288
|
||||
m_RuntimeSettings:
|
||||
m_List: []
|
||||
m_List:
|
||||
- rid: 7752762179098771456
|
||||
- rid: 7752762179098771457
|
||||
- rid: 7752762179098771459
|
||||
- rid: 7752762179098771462
|
||||
- rid: 7752762179098771464
|
||||
- rid: 7752762179098771466
|
||||
- rid: 7752762179098771468
|
||||
- rid: 7752762179098771472
|
||||
- rid: 7752762179098771476
|
||||
- rid: 3114554777721110529
|
||||
- rid: 3114554777721110530
|
||||
- rid: 570818657416118282
|
||||
- rid: 570818657416118283
|
||||
m_AssetVersion: 10
|
||||
m_ObsoleteDefaultVolumeProfile: {fileID: 0}
|
||||
m_RenderingLayerNames:
|
||||
|
||||
@@ -274,8 +274,8 @@ RectTransform:
|
||||
- {fileID: 259035378}
|
||||
- {fileID: 1310839949}
|
||||
- {fileID: 376589367}
|
||||
- {fileID: 1143672390}
|
||||
- {fileID: 1340226039}
|
||||
- {fileID: 1427434780}
|
||||
m_Father: {fileID: 1950265412}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
@@ -2013,16 +2013,16 @@ RectTransform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1143672389}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 153461769}
|
||||
m_Father: {fileID: 1427434780}
|
||||
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: -139.443, y: 163.666}
|
||||
m_AnchoredPosition: {x: -83.744095, y: -9.064926}
|
||||
m_SizeDelta: {x: 2439.04, y: 1377.741}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &1143672392
|
||||
@@ -2636,6 +2636,96 @@ CanvasRenderer:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1351490753}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!1 &1427434779
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1427434780}
|
||||
- component: {fileID: 1427434782}
|
||||
- component: {fileID: 1427434781}
|
||||
- component: {fileID: 1427434783}
|
||||
m_Layer: 5
|
||||
m_Name: Mask
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &1427434780
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1427434779}
|
||||
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: 1143672390}
|
||||
m_Father: {fileID: 153461769}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: -55.698975, y: 172.73102}
|
||||
m_SizeDelta: {x: -462.3999, y: -487.479}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &1427434781
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1427434779}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 0}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!222 &1427434782
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1427434779}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &1427434783
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1427434779}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Mask
|
||||
m_ShowMaskGraphic: 0
|
||||
--- !u!1 &1518670450
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -2790,6 +2880,53 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Features.History::Darkmatter.Features.History.HistoryServiceModule
|
||||
historyButtonsView: {fileID: 1310839950}
|
||||
--- !u!1 &1794655486
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1794655488}
|
||||
- component: {fileID: 1794655487}
|
||||
m_Layer: 0
|
||||
m_Name: Coloring Pinch Zoom Controller
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!114 &1794655487
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1794655486}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: ddf9e0ad8b4b4ee59470410f7cf40689, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Features.Coloring::Darkmatter.Features.Coloring.Systems.ColoringPinchZoomController
|
||||
minZoom: 1
|
||||
maxZoom: 3
|
||||
scrollZoomSensitivity: 0.0015
|
||||
--- !u!4 &1794655488
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1794655486}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 393.77545, y: 435.62915, 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 &1867428028
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -2835,6 +2972,7 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Features.Coloring::Darkmatter.Features.Coloring.ColoringFeatureModule
|
||||
paletteHolderView: {fileID: 1518670454}
|
||||
pinchZoomController: {fileID: 1794655487}
|
||||
--- !u!1 &1950265411
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -3897,3 +4035,4 @@ SceneRoots:
|
||||
- {fileID: 2069155641}
|
||||
- {fileID: 396806866}
|
||||
- {fileID: 1224714932}
|
||||
- {fileID: 1794655488}
|
||||
|
||||
@@ -36,6 +36,15 @@ GraphicsSettings:
|
||||
- {fileID: 10783, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_PreloadedShaders: []
|
||||
m_PreloadShadersBatchTimeLimit: -1
|
||||
m_GraphicsStateCollection: {fileID: 0}
|
||||
m_CollectionStartupAction: 0
|
||||
m_TraceSavePath: TracedCollection
|
||||
m_TraceSendToEditor: 1
|
||||
m_AdditionalWarmupCollections: []
|
||||
m_WarmupAsync: 1
|
||||
m_EnableCacheMissTracing: 0
|
||||
m_WarmupProgressivelyLimit: -1
|
||||
m_CacheMissCollectionPath: CacheMissCollection
|
||||
m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_CustomRenderPipeline: {fileID: 0}
|
||||
m_TransparencySortMode: 0
|
||||
@@ -61,6 +70,8 @@ GraphicsSettings:
|
||||
UnityEngine.Rendering.Universal.UniversalRenderPipeline: {fileID: 11400000, guid: 93b439a37f63240aca3dd4e01d978a9f, type: 2}
|
||||
m_ShaderBuildSettings:
|
||||
keywordDeclarationOverrides: []
|
||||
numInternalDefines: 0
|
||||
defines: []
|
||||
m_LightsUseLinearIntensity: 1
|
||||
m_LightsUseColorTemperature: 1
|
||||
m_LogWhenShaderIsCompiled: 0
|
||||
|
||||
@@ -148,7 +148,7 @@ PlayerSettings:
|
||||
loadStoreDebugModeEnabled: 0
|
||||
visionOSBundleVersion: 1.0
|
||||
tvOSBundleVersion: 1.0
|
||||
bundleVersion: 1.7
|
||||
bundleVersion: 1.8
|
||||
preloadedAssets:
|
||||
- {fileID: 11400000, guid: cc969dbecb228fa49b16da9273753a8f, type: 2}
|
||||
- {fileID: -944628639613478452, guid: 2bcd2660ca9b64942af0de543d8d7100, type: 3}
|
||||
@@ -180,7 +180,7 @@ PlayerSettings:
|
||||
iPhone: 1
|
||||
tvOS: 0
|
||||
overrideDefaultApplicationIdentifier: 1
|
||||
AndroidBundleVersionCode: 7
|
||||
AndroidBundleVersionCode: 8
|
||||
AndroidMinSdkVersion: 26
|
||||
AndroidTargetSdkVersion: 0
|
||||
AndroidPreferredInstallLocation: 1
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
m_EditorVersion: 6000.5.0f1
|
||||
m_EditorVersionWithRevision: 6000.5.0f1 (88b47c5e7076)
|
||||
m_EditorVersion: 6000.5.1f1
|
||||
m_EditorVersionWithRevision: 6000.5.1f1 (0d9463e84828)
|
||||
|
||||
Reference in New Issue
Block a user