app.hypergames.hypersdk 1.11.0-beta.21 → 1.11.0-beta.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ # [1.11.0-beta.23](https://github.com/mvmhyper/hyper-sdk/compare/v1.11.0-beta.22...v1.11.0-beta.23) (2026-09-03)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **replay:** smooth read-only progress display ([ead4579](https://github.com/mvmhyper/hyper-sdk/commit/ead45798883b24e4b4354f3aab22400a1399e212))
7
+
8
+ # [1.11.0-beta.22](https://github.com/mvmhyper/hyper-sdk/compare/v1.11.0-beta.21...v1.11.0-beta.22) (2026-09-03)
9
+
10
+
11
+ ### Features
12
+
13
+ * **replay:** finalize playback controls and settings ([559a7e4](https://github.com/mvmhyper/hyper-sdk/commit/559a7e48d9998efa022fe87253645dc13f83e901))
14
+
1
15
  # [1.11.0-beta.21](https://github.com/mvmhyper/hyper-sdk/compare/v1.11.0-beta.20...v1.11.0-beta.21) (2026-09-03)
2
16
 
3
17
 
@@ -172,11 +172,20 @@ namespace Hyper.Editor
172
172
  settings.useCustomRestartFlow);
173
173
  settings.useCustomReplayRestartFlow = EditorGUILayout.Toggle(
174
174
  new GUIContent(
175
- "Use Custom Replay Restart Flow",
175
+ "Replay Custom Restart",
176
176
  "Use game-owned restart logic for replay Watch Again and seeking. " +
177
177
  "Disabled uses HyperLoader to rebuild deterministic game state."),
178
178
  settings.useCustomReplayRestartFlow);
179
179
 
180
+ EditorGUILayout.Space(12);
181
+ EditorGUILayout.LabelField("Replay Settings", EditorStyles.boldLabel);
182
+ settings.allowReplaySeeking = EditorGUILayout.Toggle(
183
+ new GUIContent(
184
+ "Allow Replay Seeking",
185
+ "Allow viewers to seek using the replay progress bar. " +
186
+ "Leave disabled until accelerated replay reconstruction is validated for this game."),
187
+ settings.allowReplaySeeking);
188
+
180
189
  EditorGUILayout.Space(12);
181
190
  // Draw Editor Testing
182
191
  SerializedProperty settingsProp = serializedObject.FindProperty("_settings");
@@ -103,14 +103,23 @@ namespace Hyper.Internal.Managers
103
103
  if (Mathf.Approximately(Time.timeScale, 0f))
104
104
  return;
105
105
 
106
- float gameTimerDelta = _gameManager != null && _gameManager.IsReplayMode
107
- ? Time.fixedDeltaTime
108
- : Time.fixedUnscaledDeltaTime;
106
+ float gameTimerDelta = GetGameTimerDelta(
107
+ _gameManager != null && _gameManager.IsReplayMode,
108
+ Time.fixedDeltaTime,
109
+ Time.fixedUnscaledDeltaTime);
109
110
 
110
111
  UpdatePracticeTimer(gameTimerDelta);
111
112
  UpdateBattleTimer(gameTimerDelta);
112
113
  }
113
114
 
115
+ internal static float GetGameTimerDelta(
116
+ bool isReplayMode,
117
+ float fixedDeltaTime,
118
+ float fixedUnscaledDeltaTime)
119
+ {
120
+ return isReplayMode ? fixedDeltaTime : fixedUnscaledDeltaTime;
121
+ }
122
+
114
123
  public void Reset()
115
124
  {
116
125
  _practiceTimer = 0;
@@ -299,9 +308,9 @@ namespace Hyper.Internal.Managers
299
308
  }
300
309
 
301
310
  _battleTimer -= delta;
302
- if (_battleTimer <= 0)
311
+ if (_battleTimer <= 0f || Mathf.Approximately(_battleTimer, 0f))
303
312
  {
304
- _battleTimer = 0;
313
+ _battleTimer = 0f;
305
314
  if (!_timeUpTriggered)
306
315
  {
307
316
  QueueTimeUp();
@@ -314,7 +323,8 @@ namespace Hyper.Internal.Managers
314
323
  {
315
324
  _battleTimer = _sessionTimer;
316
325
 
317
- if (_battleTimer <= 0 && !_timeUpTriggered)
326
+ if ((_battleTimer <= 0f || Mathf.Approximately(_battleTimer, 0f)) &&
327
+ !_timeUpTriggered)
318
328
  {
319
329
  QueueTimeUp();
320
330
  }
@@ -80,6 +80,12 @@ namespace Hyper.Internal
80
80
  "Leave disabled to rebuild the game through HyperLoader for deterministic replay state.")]
81
81
  public bool useCustomReplayRestartFlow = false;
82
82
 
83
+ [Space(20)]
84
+ [Header("Replay Settings")]
85
+ [Tooltip("Allow replay viewers to seek from the replay progress bar. " +
86
+ "Leave disabled until the game has been validated for accelerated replay reconstruction.")]
87
+ public bool allowReplaySeeking = false;
88
+
83
89
  #endregion
84
90
 
85
91
  #region Editor Testing
@@ -12,14 +12,16 @@ namespace Hyper.Internal
12
12
  {
13
13
  internal const int AvatarTextureSize = 128;
14
14
 
15
- [SerializeField] private Slider progressSlider;
15
+ [SerializeField] private Slider seekableSlider;
16
+ [SerializeField] private Slider readOnlySlider;
16
17
  [SerializeField] private TextMeshProUGUI replayLabel;
17
18
  [SerializeField] private RawImage playerAvatar;
18
19
  [SerializeField] private Button pauseButton;
19
20
  [SerializeField] private Button playbackSpeedButton;
20
21
  [SerializeField] private TextMeshProUGUI playbackSpeedLabel;
21
- [SerializeField] private float[] playbackSpeeds = { 1.5f, 2f, 3f, 4f, 5f, 1f };
22
+ [SerializeField] private float[] playbackSpeeds = { 1f, 1.25f, 1.75f, 2f, 0.5f };
22
23
  [SerializeField, Min(1f)] private float seekPlaybackSpeed = 10f;
24
+ [SerializeField, Min(0f)] private float readOnlyProgressSmoothTime = 0.08f;
23
25
  [SerializeField, Range(0.25f, 1f)] private float seekSnapshotScale = 0.55f;
24
26
  [SerializeField, Range(0f, 0.5f)] private float seekPreparationProgress = 0.2f;
25
27
  [SerializeField, Range(0f, 0.15f)] private float seekPreparationProgressVariation = 0.05f;
@@ -28,10 +30,14 @@ namespace Hyper.Internal
28
30
  [SerializeField] private RawImage seekSnapshotImage;
29
31
 
30
32
  private int playbackSpeedIndex;
33
+ private Slider progressSlider;
31
34
  private ReplaySeekInput seekInput;
35
+ private bool seekingAllowed;
32
36
  private bool wasSeeking;
33
37
  private bool isCapturingSeek;
34
38
  private float pendingSeekTarget;
39
+ private float displayedReadOnlyProgress;
40
+ private float readOnlyProgressVelocity;
35
41
  private Texture2D seekSnapshotTexture;
36
42
  private Image seekOverlayBackground;
37
43
  private Color seekOverlayBackgroundColor;
@@ -44,12 +50,21 @@ namespace Hyper.Internal
44
50
 
45
51
  private void Awake()
46
52
  {
53
+ seekingAllowed = HyperRuntime.Settings != null && HyperRuntime.Settings.allowReplaySeeking;
47
54
  AutoBindReferences();
48
- ConfigureProgressSlider();
49
- ConfigureSeekOverlay();
50
- ConfigureSeekSnapshot();
55
+ ConfigureProgressSliders();
56
+ if (seekingAllowed)
57
+ {
58
+ ConfigureSeekOverlay();
59
+ ConfigureSeekSnapshot();
60
+ }
61
+ else if (seekLoadingOverlay != null)
62
+ {
63
+ seekLoadingOverlay.SetActive(false);
64
+ }
65
+
51
66
  ApplyInitialPlaybackSpeed();
52
- ReplaySessionState.SeekCompleted += RestorePlaybackAfterSeek;
67
+ if (seekingAllowed) ReplaySessionState.SeekCompleted += RestorePlaybackAfterSeek;
53
68
  if (pauseButton != null) pauseButton.onClick.AddListener(PauseReplay);
54
69
  if (playbackSpeedButton != null) playbackSpeedButton.onClick.AddListener(CyclePlaybackSpeed);
55
70
  }
@@ -61,13 +76,13 @@ namespace Hyper.Internal
61
76
  if (replayLabel != null) replayLabel.text = $"Replay of @{playerName}";
62
77
  if (progressSlider != null)
63
78
  {
64
- float displayedProgress = ReplaySessionState.IsSeeking
79
+ float displayedProgress = seekingAllowed && ReplaySessionState.IsSeeking
65
80
  ? ReplaySessionState.SeekTarget01
66
81
  : ReplaySessionState.Progress01;
67
- progressSlider.SetValueWithoutNotify(displayedProgress);
82
+ SetProgressSliderValue(displayedProgress);
68
83
  }
69
84
  UpdatePlaybackSpeedLabel(ReplaySessionState.UserPlaybackSpeed);
70
- SetSeekingPresentation(ReplaySessionState.IsSeeking);
85
+ SetSeekingPresentation(seekingAllowed && ReplaySessionState.IsSeeking);
71
86
 
72
87
  if (playerAvatar != null && ReplaySessionState.AvatarTexture != null)
73
88
  {
@@ -77,7 +92,7 @@ namespace Hyper.Internal
77
92
 
78
93
  private void Update()
79
94
  {
80
- bool isSeeking = ReplaySessionState.IsSeeking;
95
+ bool isSeeking = seekingAllowed && ReplaySessionState.IsSeeking;
81
96
  if (wasSeeking && !isSeeking && !ReplaySessionState.HasEnded)
82
97
  {
83
98
  RestorePlaybackAfterSeek(ReplaySessionState.PlaybackSpeed);
@@ -100,7 +115,7 @@ namespace Hyper.Internal
100
115
  : isSeeking
101
116
  ? ReplaySessionState.SeekTarget01
102
117
  : ReplaySessionState.Progress01;
103
- progressSlider.SetValueWithoutNotify(displayedProgress);
118
+ SetProgressSliderValue(displayedProgress, !seekingAllowed);
104
119
  }
105
120
 
106
121
  wasSeeking = isSeeking;
@@ -143,7 +158,7 @@ namespace Hyper.Internal
143
158
  if (progressSlider != null) progressSlider.interactable = false;
144
159
  if (seekLoadingOverlay != null) seekLoadingOverlay.SetActive(false);
145
160
  ClearSeekSnapshot();
146
- if (progressSlider != null) progressSlider.SetValueWithoutNotify(1f);
161
+ SetProgressSliderValue(1f);
147
162
  }
148
163
 
149
164
  internal void ResetForReplayRestart()
@@ -162,10 +177,7 @@ namespace Hyper.Internal
162
177
  : 0f;
163
178
  wasSeeking = ReplaySessionState.IsSeeking;
164
179
 
165
- if (progressSlider != null)
166
- {
167
- progressSlider.SetValueWithoutNotify(pendingSeekTarget);
168
- }
180
+ SetProgressSliderValue(pendingSeekTarget);
169
181
 
170
182
  UpdatePlaybackSpeedLabel(playbackSpeed);
171
183
  AlignPlaybackSpeedIndex(playbackSpeed);
@@ -195,7 +207,7 @@ namespace Hyper.Internal
195
207
 
196
208
  private void SeekTo(float targetProgress)
197
209
  {
198
- if (!ReplaySessionState.IsActive || ReplaySessionState.HasEnded ||
210
+ if (!seekingAllowed || !ReplaySessionState.IsActive || ReplaySessionState.HasEnded ||
199
211
  ReplaySessionState.IsSeeking || isCapturingSeek)
200
212
  {
201
213
  return;
@@ -273,10 +285,14 @@ namespace Hyper.Internal
273
285
 
274
286
  private void SetSeekingPresentation(bool isSeeking)
275
287
  {
288
+ isSeeking &= seekingAllowed;
276
289
  ReplayPresentationCanvas.SetSeekingLayer(isSeeking);
277
290
  UpdateSeekProgress(isSeeking);
278
291
  if (seekLoadingOverlay != null) seekLoadingOverlay.SetActive(isSeeking);
279
- if (progressSlider != null) progressSlider.interactable = !isSeeking && !ReplaySessionState.HasEnded;
292
+ if (progressSlider != null)
293
+ {
294
+ progressSlider.interactable = seekingAllowed && !isSeeking && !ReplaySessionState.HasEnded;
295
+ }
280
296
  if (playbackSpeedButton != null)
281
297
  {
282
298
  playbackSpeedButton.interactable = !isSeeking && !ReplaySessionState.HasEnded;
@@ -300,7 +316,7 @@ namespace Hyper.Internal
300
316
 
301
317
  if (playbackSpeedLabel != null)
302
318
  {
303
- playbackSpeedLabel.text = $"{speed:0.#}x";
319
+ playbackSpeedLabel.text = $"{speed:0.##}x";
304
320
  }
305
321
  }
306
322
 
@@ -354,8 +370,6 @@ namespace Hyper.Internal
354
370
 
355
371
  private void AutoBindReferences()
356
372
  {
357
- if (progressSlider == null) progressSlider = GetComponentInChildren<Slider>(true);
358
-
359
373
  Button[] buttons = GetComponentsInChildren<Button>(true);
360
374
  for (int i = 0; i < buttons.Length; i++)
361
375
  {
@@ -375,24 +389,69 @@ namespace Hyper.Internal
375
389
  }
376
390
  }
377
391
 
378
- private void ConfigureProgressSlider()
392
+ private void ConfigureProgressSliders()
379
393
  {
394
+ progressSlider = seekingAllowed ? seekableSlider : readOnlySlider;
395
+
396
+ if (seekableSlider != null)
397
+ {
398
+ seekableSlider.gameObject.SetActive(seekingAllowed);
399
+ }
400
+
401
+ if (readOnlySlider != null)
402
+ {
403
+ readOnlySlider.gameObject.SetActive(!seekingAllowed);
404
+ }
405
+
380
406
  if (progressSlider == null) return;
381
407
 
382
408
  progressSlider.minValue = 0f;
383
409
  progressSlider.maxValue = 1f;
384
410
  progressSlider.wholeNumbers = false;
385
- progressSlider.interactable = true;
386
- float displayedProgress = ReplaySessionState.IsSeeking
411
+ progressSlider.interactable = seekingAllowed;
412
+ float displayedProgress = seekingAllowed && ReplaySessionState.IsSeeking
387
413
  ? ReplaySessionState.SeekTarget01
388
414
  : ReplaySessionState.Progress01;
389
- progressSlider.SetValueWithoutNotify(displayedProgress);
415
+ SetProgressSliderValue(displayedProgress);
416
+
417
+ if (!seekingAllowed) return;
390
418
 
391
419
  seekInput = progressSlider.GetComponent<ReplaySeekInput>();
392
420
  if (seekInput == null) seekInput = progressSlider.gameObject.AddComponent<ReplaySeekInput>();
393
421
  seekInput.Initialize(progressSlider, SeekTo);
394
422
  }
395
423
 
424
+ private void SetProgressSliderValue(float targetProgress, bool smoothReadOnly = false)
425
+ {
426
+ if (progressSlider == null) return;
427
+
428
+ targetProgress = Mathf.Clamp01(targetProgress);
429
+ if (!smoothReadOnly || readOnlyProgressSmoothTime <= 0f ||
430
+ targetProgress < displayedReadOnlyProgress)
431
+ {
432
+ displayedReadOnlyProgress = targetProgress;
433
+ readOnlyProgressVelocity = 0f;
434
+ }
435
+ else
436
+ {
437
+ displayedReadOnlyProgress = Mathf.SmoothDamp(
438
+ displayedReadOnlyProgress,
439
+ targetProgress,
440
+ ref readOnlyProgressVelocity,
441
+ readOnlyProgressSmoothTime,
442
+ Mathf.Infinity,
443
+ Time.unscaledDeltaTime);
444
+
445
+ if (Mathf.Abs(targetProgress - displayedReadOnlyProgress) < 0.0001f)
446
+ {
447
+ displayedReadOnlyProgress = targetProgress;
448
+ readOnlyProgressVelocity = 0f;
449
+ }
450
+ }
451
+
452
+ progressSlider.SetValueWithoutNotify(displayedReadOnlyProgress);
453
+ }
454
+
396
455
  private void ConfigureSeekOverlay()
397
456
  {
398
457
  if (seekLoadingOverlay == null)
@@ -14,7 +14,7 @@ namespace Hyper.Internal
14
14
  [SerializeField] private BlinkingText blinkingText;
15
15
  [SerializeField] private RectTransform swipeGif;
16
16
  [SerializeField] private RectTransform handSpriteInGif;
17
- [SerializeField] private float replayAutoStartDelay = 1f;
17
+ [SerializeField] private float replayAutoStartDelay = 2f;
18
18
  private GameManager _gameManager;
19
19
  private StartCTA _currentCTA;
20
20
  private SwipeDirection _swipeDirection;
@@ -22,6 +22,7 @@ MonoBehaviour:
22
22
  controlBarTheme: 1
23
23
  useCustomRestartFlow: 0
24
24
  useCustomReplayRestartFlow: 0
25
+ allowReplaySeeking: 0
25
26
  _settings:
26
27
  GameMode: 0
27
28
  ShowInstructions: 0
@@ -1,5 +1,41 @@
1
1
  %YAML 1.1
2
2
  %TAG !u! tag:unity3d.com,2011:
3
+ --- !u!1 &223417005362504300
4
+ GameObject:
5
+ m_ObjectHideFlags: 0
6
+ m_CorrespondingSourceObject: {fileID: 0}
7
+ m_PrefabInstance: {fileID: 0}
8
+ m_PrefabAsset: {fileID: 0}
9
+ serializedVersion: 6
10
+ m_Component:
11
+ - component: {fileID: 3833324095758096509}
12
+ m_Layer: 5
13
+ m_Name: Fill Area
14
+ m_TagString: Untagged
15
+ m_Icon: {fileID: 0}
16
+ m_NavMeshLayer: 0
17
+ m_StaticEditorFlags: 0
18
+ m_IsActive: 1
19
+ --- !u!224 &3833324095758096509
20
+ RectTransform:
21
+ m_ObjectHideFlags: 0
22
+ m_CorrespondingSourceObject: {fileID: 0}
23
+ m_PrefabInstance: {fileID: 0}
24
+ m_PrefabAsset: {fileID: 0}
25
+ m_GameObject: {fileID: 223417005362504300}
26
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
27
+ m_LocalPosition: {x: 0, y: 0, z: 0}
28
+ m_LocalScale: {x: 1, y: 1, z: 1}
29
+ m_ConstrainProportionsScale: 0
30
+ m_Children:
31
+ - {fileID: 304532445594059503}
32
+ m_Father: {fileID: 6542150060122855028}
33
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
34
+ m_AnchorMin: {x: 0, y: 0}
35
+ m_AnchorMax: {x: 1, y: 1}
36
+ m_AnchoredPosition: {x: -0.018798828, y: 0.0000038146973}
37
+ m_SizeDelta: {x: -10.0378, y: -0.0001}
38
+ m_Pivot: {x: 0.5, y: 0.5}
3
39
  --- !u!1 &369218185311093561
4
40
  GameObject:
5
41
  m_ObjectHideFlags: 0
@@ -305,7 +341,8 @@ MonoBehaviour:
305
341
  m_Script: {fileID: 11500000, guid: 488ba0c343178684c9e74294492a1fa1, type: 3}
306
342
  m_Name:
307
343
  m_EditorClassIdentifier:
308
- progressSlider: {fileID: 6524620082287541530}
344
+ seekableSlider: {fileID: 6524620082287541530}
345
+ readOnlySlider: {fileID: 3931331649244694281}
309
346
  replayLabel: {fileID: 2967308416171677859}
310
347
  playerAvatar: {fileID: 1824686318740396960}
311
348
  pauseButton: {fileID: 6062270276149820752}
@@ -313,11 +350,12 @@ MonoBehaviour:
313
350
  playbackSpeedLabel: {fileID: 4722203154507835557}
314
351
  playbackSpeeds:
315
352
  - 1
316
- - 1.5
353
+ - 1.25
354
+ - 1.75
317
355
  - 2
318
- - 3
319
356
  - 0.5
320
357
  seekPlaybackSpeed: 10
358
+ readOnlyProgressSmoothTime: 0.08
321
359
  seekSnapshotScale: 0.725
322
360
  seekPreparationProgress: 0.2
323
361
  seekPreparationProgressVariation: 0.05
@@ -469,7 +507,7 @@ GameObject:
469
507
  - component: {fileID: 6333756719587920619}
470
508
  - component: {fileID: 6524620082287541530}
471
509
  m_Layer: 5
472
- m_Name: Slider
510
+ m_Name: SeekableSlider
473
511
  m_TagString: Untagged
474
512
  m_Icon: {fileID: 0}
475
513
  m_NavMeshLayer: 0
@@ -507,8 +545,8 @@ MonoBehaviour:
507
545
  m_Enabled: 1
508
546
  m_EditorHideFlags: 0
509
547
  m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3}
510
- m_Name:
511
- m_EditorClassIdentifier:
548
+ m_Name:
549
+ m_EditorClassIdentifier:
512
550
  m_Navigation:
513
551
  m_Mode: 3
514
552
  m_WrapAround: 0
@@ -603,8 +641,8 @@ MonoBehaviour:
603
641
  m_Enabled: 1
604
642
  m_EditorHideFlags: 0
605
643
  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
606
- m_Name:
607
- m_EditorClassIdentifier:
644
+ m_Name:
645
+ m_EditorClassIdentifier:
608
646
  m_Material: {fileID: 0}
609
647
  m_Color: {r: 1, g: 1, b: 1, a: 1}
610
648
  m_RaycastTarget: 1
@@ -654,6 +692,7 @@ RectTransform:
654
692
  m_ConstrainProportionsScale: 0
655
693
  m_Children:
656
694
  - {fileID: 6333756719587920619}
695
+ - {fileID: 6542150060122855028}
657
696
  - {fileID: 6508244257815501699}
658
697
  - {fileID: 1441186342797148716}
659
698
  - {fileID: 3476774662796868632}
@@ -683,8 +722,8 @@ MonoBehaviour:
683
722
  m_Enabled: 1
684
723
  m_EditorHideFlags: 0
685
724
  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
686
- m_Name:
687
- m_EditorClassIdentifier:
725
+ m_Name:
726
+ m_EditorClassIdentifier:
688
727
  m_Material: {fileID: 0}
689
728
  m_Color: {r: 1, g: 1, b: 1, a: 1}
690
729
  m_RaycastTarget: 1
@@ -1197,6 +1236,170 @@ MonoBehaviour:
1197
1236
  m_hasFontAssetChanged: 0
1198
1237
  m_baseMaterial: {fileID: 0}
1199
1238
  m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
1239
+ --- !u!1 &4462340644753344622
1240
+ GameObject:
1241
+ m_ObjectHideFlags: 0
1242
+ m_CorrespondingSourceObject: {fileID: 0}
1243
+ m_PrefabInstance: {fileID: 0}
1244
+ m_PrefabAsset: {fileID: 0}
1245
+ serializedVersion: 6
1246
+ m_Component:
1247
+ - component: {fileID: 6542150060122855028}
1248
+ - component: {fileID: 3931331649244694281}
1249
+ m_Layer: 5
1250
+ m_Name: ReadOnlySlider
1251
+ m_TagString: Untagged
1252
+ m_Icon: {fileID: 0}
1253
+ m_NavMeshLayer: 0
1254
+ m_StaticEditorFlags: 0
1255
+ m_IsActive: 0
1256
+ --- !u!224 &6542150060122855028
1257
+ RectTransform:
1258
+ m_ObjectHideFlags: 0
1259
+ m_CorrespondingSourceObject: {fileID: 0}
1260
+ m_PrefabInstance: {fileID: 0}
1261
+ m_PrefabAsset: {fileID: 0}
1262
+ m_GameObject: {fileID: 4462340644753344622}
1263
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
1264
+ m_LocalPosition: {x: 0, y: 0, z: 0}
1265
+ m_LocalScale: {x: 1, y: 1, z: 1}
1266
+ m_ConstrainProportionsScale: 0
1267
+ m_Children:
1268
+ - {fileID: 366657233058180139}
1269
+ - {fileID: 3833324095758096509}
1270
+ m_Father: {fileID: 3329893502925930305}
1271
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
1272
+ m_AnchorMin: {x: 0, y: 1}
1273
+ m_AnchorMax: {x: 1, y: 1}
1274
+ m_AnchoredPosition: {x: 0, y: 3.8920975}
1275
+ m_SizeDelta: {x: 0, y: 7.7843}
1276
+ m_Pivot: {x: 0.5, y: 0.5}
1277
+ --- !u!114 &3931331649244694281
1278
+ MonoBehaviour:
1279
+ m_ObjectHideFlags: 0
1280
+ m_CorrespondingSourceObject: {fileID: 0}
1281
+ m_PrefabInstance: {fileID: 0}
1282
+ m_PrefabAsset: {fileID: 0}
1283
+ m_GameObject: {fileID: 4462340644753344622}
1284
+ m_Enabled: 1
1285
+ m_EditorHideFlags: 0
1286
+ m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3}
1287
+ m_Name:
1288
+ m_EditorClassIdentifier:
1289
+ m_Navigation:
1290
+ m_Mode: 3
1291
+ m_WrapAround: 0
1292
+ m_SelectOnUp: {fileID: 0}
1293
+ m_SelectOnDown: {fileID: 0}
1294
+ m_SelectOnLeft: {fileID: 0}
1295
+ m_SelectOnRight: {fileID: 0}
1296
+ m_Transition: 0
1297
+ m_Colors:
1298
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
1299
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
1300
+ m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
1301
+ m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
1302
+ m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
1303
+ m_ColorMultiplier: 1
1304
+ m_FadeDuration: 0.1
1305
+ m_SpriteState:
1306
+ m_HighlightedSprite: {fileID: 0}
1307
+ m_PressedSprite: {fileID: 0}
1308
+ m_SelectedSprite: {fileID: 0}
1309
+ m_DisabledSprite: {fileID: 0}
1310
+ m_AnimationTriggers:
1311
+ m_NormalTrigger: Normal
1312
+ m_HighlightedTrigger: Highlighted
1313
+ m_PressedTrigger: Pressed
1314
+ m_SelectedTrigger: Selected
1315
+ m_DisabledTrigger: Disabled
1316
+ m_Interactable: 0
1317
+ m_TargetGraphic: {fileID: 0}
1318
+ m_FillRect: {fileID: 304532445594059503}
1319
+ m_HandleRect: {fileID: 0}
1320
+ m_Direction: 0
1321
+ m_MinValue: 0
1322
+ m_MaxValue: 1
1323
+ m_WholeNumbers: 0
1324
+ m_Value: 0
1325
+ m_OnValueChanged:
1326
+ m_PersistentCalls:
1327
+ m_Calls: []
1328
+ --- !u!1 &4767236606928371908
1329
+ GameObject:
1330
+ m_ObjectHideFlags: 0
1331
+ m_CorrespondingSourceObject: {fileID: 0}
1332
+ m_PrefabInstance: {fileID: 0}
1333
+ m_PrefabAsset: {fileID: 0}
1334
+ serializedVersion: 6
1335
+ m_Component:
1336
+ - component: {fileID: 304532445594059503}
1337
+ - component: {fileID: 6168800224433124105}
1338
+ - component: {fileID: 1731641873342291599}
1339
+ m_Layer: 5
1340
+ m_Name: Fill
1341
+ m_TagString: Untagged
1342
+ m_Icon: {fileID: 0}
1343
+ m_NavMeshLayer: 0
1344
+ m_StaticEditorFlags: 0
1345
+ m_IsActive: 1
1346
+ --- !u!224 &304532445594059503
1347
+ RectTransform:
1348
+ m_ObjectHideFlags: 0
1349
+ m_CorrespondingSourceObject: {fileID: 0}
1350
+ m_PrefabInstance: {fileID: 0}
1351
+ m_PrefabAsset: {fileID: 0}
1352
+ m_GameObject: {fileID: 4767236606928371908}
1353
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
1354
+ m_LocalPosition: {x: 0, y: 0, z: 0}
1355
+ m_LocalScale: {x: 1, y: 1, z: 1}
1356
+ m_ConstrainProportionsScale: 0
1357
+ m_Children: []
1358
+ m_Father: {fileID: 3833324095758096509}
1359
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
1360
+ m_AnchorMin: {x: 0, y: 0}
1361
+ m_AnchorMax: {x: 0, y: 1}
1362
+ m_AnchoredPosition: {x: 0, y: 0}
1363
+ m_SizeDelta: {x: 10, y: 0}
1364
+ m_Pivot: {x: 0.5, y: 0.5}
1365
+ --- !u!222 &6168800224433124105
1366
+ CanvasRenderer:
1367
+ m_ObjectHideFlags: 0
1368
+ m_CorrespondingSourceObject: {fileID: 0}
1369
+ m_PrefabInstance: {fileID: 0}
1370
+ m_PrefabAsset: {fileID: 0}
1371
+ m_GameObject: {fileID: 4767236606928371908}
1372
+ m_CullTransparentMesh: 1
1373
+ --- !u!114 &1731641873342291599
1374
+ MonoBehaviour:
1375
+ m_ObjectHideFlags: 0
1376
+ m_CorrespondingSourceObject: {fileID: 0}
1377
+ m_PrefabInstance: {fileID: 0}
1378
+ m_PrefabAsset: {fileID: 0}
1379
+ m_GameObject: {fileID: 4767236606928371908}
1380
+ m_Enabled: 1
1381
+ m_EditorHideFlags: 0
1382
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
1383
+ m_Name:
1384
+ m_EditorClassIdentifier:
1385
+ m_Material: {fileID: 0}
1386
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
1387
+ m_RaycastTarget: 1
1388
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
1389
+ m_Maskable: 1
1390
+ m_OnCullStateChanged:
1391
+ m_PersistentCalls:
1392
+ m_Calls: []
1393
+ m_Sprite: {fileID: 0}
1394
+ m_Type: 1
1395
+ m_PreserveAspect: 0
1396
+ m_FillCenter: 1
1397
+ m_FillMethod: 4
1398
+ m_FillAmount: 1
1399
+ m_FillClockwise: 1
1400
+ m_FillOrigin: 0
1401
+ m_UseSpriteMesh: 0
1402
+ m_PixelsPerUnitMultiplier: 1
1200
1403
  --- !u!1 &4812803750956349496
1201
1404
  GameObject:
1202
1405
  m_ObjectHideFlags: 0
@@ -1269,6 +1472,81 @@ MonoBehaviour:
1269
1472
  y: 0
1270
1473
  width: 1
1271
1474
  height: 1
1475
+ --- !u!1 &5057041956718479770
1476
+ GameObject:
1477
+ m_ObjectHideFlags: 0
1478
+ m_CorrespondingSourceObject: {fileID: 0}
1479
+ m_PrefabInstance: {fileID: 0}
1480
+ m_PrefabAsset: {fileID: 0}
1481
+ serializedVersion: 6
1482
+ m_Component:
1483
+ - component: {fileID: 366657233058180139}
1484
+ - component: {fileID: 2710470428584502286}
1485
+ - component: {fileID: 5573806685945753042}
1486
+ m_Layer: 5
1487
+ m_Name: Background
1488
+ m_TagString: Untagged
1489
+ m_Icon: {fileID: 0}
1490
+ m_NavMeshLayer: 0
1491
+ m_StaticEditorFlags: 0
1492
+ m_IsActive: 1
1493
+ --- !u!224 &366657233058180139
1494
+ RectTransform:
1495
+ m_ObjectHideFlags: 0
1496
+ m_CorrespondingSourceObject: {fileID: 0}
1497
+ m_PrefabInstance: {fileID: 0}
1498
+ m_PrefabAsset: {fileID: 0}
1499
+ m_GameObject: {fileID: 5057041956718479770}
1500
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
1501
+ m_LocalPosition: {x: 0, y: 0, z: 0}
1502
+ m_LocalScale: {x: 1, y: 1, z: 1}
1503
+ m_ConstrainProportionsScale: 0
1504
+ m_Children: []
1505
+ m_Father: {fileID: 6542150060122855028}
1506
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
1507
+ m_AnchorMin: {x: 0, y: 0}
1508
+ m_AnchorMax: {x: 1, y: 1}
1509
+ m_AnchoredPosition: {x: 0, y: -0.000030517578}
1510
+ m_SizeDelta: {x: 0, y: -0.000038624}
1511
+ m_Pivot: {x: 0.5, y: 0.5}
1512
+ --- !u!222 &2710470428584502286
1513
+ CanvasRenderer:
1514
+ m_ObjectHideFlags: 0
1515
+ m_CorrespondingSourceObject: {fileID: 0}
1516
+ m_PrefabInstance: {fileID: 0}
1517
+ m_PrefabAsset: {fileID: 0}
1518
+ m_GameObject: {fileID: 5057041956718479770}
1519
+ m_CullTransparentMesh: 1
1520
+ --- !u!114 &5573806685945753042
1521
+ MonoBehaviour:
1522
+ m_ObjectHideFlags: 0
1523
+ m_CorrespondingSourceObject: {fileID: 0}
1524
+ m_PrefabInstance: {fileID: 0}
1525
+ m_PrefabAsset: {fileID: 0}
1526
+ m_GameObject: {fileID: 5057041956718479770}
1527
+ m_Enabled: 1
1528
+ m_EditorHideFlags: 0
1529
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
1530
+ m_Name:
1531
+ m_EditorClassIdentifier:
1532
+ m_Material: {fileID: 0}
1533
+ m_Color: {r: 0.09019608, g: 0.06666667, b: 0.15294118, a: 0.78431374}
1534
+ m_RaycastTarget: 1
1535
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
1536
+ m_Maskable: 1
1537
+ m_OnCullStateChanged:
1538
+ m_PersistentCalls:
1539
+ m_Calls: []
1540
+ m_Sprite: {fileID: 0}
1541
+ m_Type: 1
1542
+ m_PreserveAspect: 0
1543
+ m_FillCenter: 1
1544
+ m_FillMethod: 4
1545
+ m_FillAmount: 1
1546
+ m_FillClockwise: 1
1547
+ m_FillOrigin: 0
1548
+ m_UseSpriteMesh: 0
1549
+ m_PixelsPerUnitMultiplier: 1
1272
1550
  --- !u!1 &8322051490674722239
1273
1551
  GameObject:
1274
1552
  m_ObjectHideFlags: 0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "app.hypergames.hypersdk",
3
- "version": "1.11.0-beta.21",
3
+ "version": "1.11.0-beta.23",
4
4
  "displayName": "HyperSDK",
5
5
  "description": "Official Unity SDK for Hyper: multiplayer battles, leaderboards, deterministic RNG, session management, tutorials, and WebGL optimizations for production-ready games.",
6
6
  "unity": "6000.0",