diff --git a/Assets/01_Scenes/MyProject/GameScene.unity b/Assets/01_Scenes/MyProject/GameScene.unity index ba8258f1..af7d3101 100644 --- a/Assets/01_Scenes/MyProject/GameScene.unity +++ b/Assets/01_Scenes/MyProject/GameScene.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e8a5185efeff839afdf06e87375cc476ef3f88e0a8ddc2b53e6202da8c2b6448 -size 13140833 +oid sha256:a313d9cf2bb9064983b5bfe1b7d9580a9bf5e6b470c2cefec3db7b22898fe101 +size 13160956 diff --git a/Assets/02_Scripts/GameTimer.cs b/Assets/02_Scripts/GameTimer.cs new file mode 100644 index 00000000..9171a7d8 --- /dev/null +++ b/Assets/02_Scripts/GameTimer.cs @@ -0,0 +1,44 @@ +using System; +using UnityEngine; + +public class GameTimer : MonoBehaviour +{ + [SerializeField, Min(0f)] private float _timeLimit = 180f; + [SerializeField] private bool _autoStart = true; + + public event Action OnTick; + public event Action OnTimeUp; + + private float _remaining; + private bool _running; + + public float Remaining => _remaining; + public float TimeLimit => _timeLimit; + public bool IsRunning => _running; + + private void Start() + { + _remaining = _timeLimit; + OnTick?.Invoke(_remaining); + if (_autoStart) StartTimer(); + } + + private void Update() + { + if (!_running) return; + + _remaining -= Time.deltaTime; + if (_remaining <= 0f) + { + _remaining = 0f; + _running = false; + OnTick?.Invoke(_remaining); + OnTimeUp?.Invoke(); + return; + } + OnTick?.Invoke(_remaining); + } + + public void StartTimer() => _running = true; + public void StopTimer() => _running = false; +} diff --git a/Assets/02_Scripts/GameTimer.cs.meta b/Assets/02_Scripts/GameTimer.cs.meta new file mode 100644 index 00000000..62d3a15c --- /dev/null +++ b/Assets/02_Scripts/GameTimer.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: d623169466a09404e8f5773ee7e8fee7 \ No newline at end of file diff --git a/Assets/02_Scripts/Managers/InputManager.cs b/Assets/02_Scripts/Managers/InputManager.cs index 25c79971..eaa45348 100644 --- a/Assets/02_Scripts/Managers/InputManager.cs +++ b/Assets/02_Scripts/Managers/InputManager.cs @@ -26,4 +26,13 @@ public void XRLeftControllerPrimaryButton(InputAction.CallbackContext ctx) if(ctx.started) XRLeftControllerPrimaryButton_Event?.Invoke(); } + + + #region 테스트용(키보드) + public void XRLeftControllerPrimaryButton_Test_KeyNum1(InputAction.CallbackContext ctx) + { + if(ctx.started) + XRLeftControllerPrimaryButton_Event?.Invoke(); + } + #endregion } diff --git a/Assets/02_Scripts/Player/PlayerController.cs b/Assets/02_Scripts/Player/PlayerController.cs index 18dc8c49..40f70cf6 100644 --- a/Assets/02_Scripts/Player/PlayerController.cs +++ b/Assets/02_Scripts/Player/PlayerController.cs @@ -1,10 +1,33 @@ using UnityEngine; +using VRShopping.UI; public class PlayerController : MonoBehaviour { + private Animator _anim; + + //나중에 stateMachine으로 변경 + private bool _controlPositive = true; + + [SerializeField] private ShoppingOrderView _shoppingOrderView; + + private void Awake() + { + _anim = GetComponent(); + } private void Start() { - //InputManager.Instance.XRLeftControllerPrimaryButton_Event += 장보기 목록 온오프 함수 + InputManager.Instance.XRLeftControllerPrimaryButton_Event += this.ToggleShoppingOrderList; + } + + public async void ToggleShoppingOrderList() + { + if(!_controlPositive) return; + + Debug.Log("ToggleShoppingOrderList"); + + _controlPositive = false; + await _shoppingOrderView.ToggleShoppingOrderList(); + _controlPositive = true; } } diff --git a/Assets/02_Scripts/Player/RideController.cs b/Assets/02_Scripts/Player/RideController.cs new file mode 100644 index 00000000..9d2abedf --- /dev/null +++ b/Assets/02_Scripts/Player/RideController.cs @@ -0,0 +1,123 @@ +using System.Collections.Generic; +using Unity.XR.CoreUtils; +using UnityEngine; +using UnityEngine.Animations; +using UnityEngine.XR.Interaction.Toolkit; +using UnityEngine.XR.Interaction.Toolkit.Interactables; + +public class RideController : MonoBehaviour +{ + [SerializeField] private Transform _itemRoot; + [SerializeField, Min(0f)] private float _settleVelocity = 0.1f; + [SerializeField, Min(0f)] private float _settleDuration = 0.3f; + + private ParentConstraint _parentConstraint; + private readonly Dictionary _settleTimer = new(); + + private void Awake() + { + _parentConstraint = GetComponent(); + + if (_parentConstraint.sourceCount == 0 || + _parentConstraint.GetSource(0).sourceTransform == null) + { + var xrOrigin = FindFirstObjectByType(); + if (xrOrigin == null) + { + Debug.LogWarning("RideController: 씬에서 XROrigin을 찾지 못했습니다."); + return; + } + + var source = new ConstraintSource + { + sourceTransform = xrOrigin.transform, + weight = 1f + }; + + if (_parentConstraint.sourceCount == 0) + _parentConstraint.AddSource(source); + else + _parentConstraint.SetSource(0, source); + + } + } + + public void ActiveRide() + { + _parentConstraint.constraintActive = true; + } + + public void DeactiveRide() + { + _parentConstraint.constraintActive = false; + } + + public void OnDetectionStay(Collider other) + { + var rb = other.attachedRigidbody; + if (rb == null || rb.isKinematic) return; + if (!rb.TryGetComponent(out XRGrabInteractable grab)) return; + + if (grab.isSelected) + { + _settleTimer.Remove(rb); + return; + } + + if (rb.linearVelocity.magnitude > _settleVelocity) + { + _settleTimer[rb] = 0f; + return; + } + + float elapsed = _settleTimer.GetValueOrDefault(rb, 0f) + Time.deltaTime; + if (elapsed >= _settleDuration) + { + AttachToCart(grab, rb); + _settleTimer.Remove(rb); + } + else + { + _settleTimer[rb] = elapsed; + } + } + + public void OnDetectionExit(Collider other) + { + var rb = other.attachedRigidbody; + if (rb != null) _settleTimer.Remove(rb); + } + + private void AttachToCart(XRGrabInteractable grab, Rigidbody rb) + { + grab.transform.SetParent(_itemRoot); + rb.linearVelocity = Vector3.zero; + rb.angularVelocity = Vector3.zero; + rb.isKinematic = true; + + // 잡았다 놓을 때 XRGrabInteractable이 parent를 ItemRoot로 되돌리는 것 방지 + grab.retainTransformParent = false; + + grab.selectEntered.AddListener(OnPickedUpFromCart); + } + + private void OnPickedUpFromCart(SelectEnterEventArgs args) + { + if (args.interactableObject is not XRGrabInteractable grab) return; + + grab.transform.SetParent(null); + + grab.selectEntered.RemoveListener(OnPickedUpFromCart); + grab.selectExited.AddListener(OnReleasedAfterPickup); + } + + private void OnReleasedAfterPickup(SelectExitEventArgs args) + { + if (args.interactableObject is not XRGrabInteractable grab) return; + + // XRGrabInteractable이 original(kinematic=true)로 복원한 것을 덮어씀 + if (grab.TryGetComponent(out Rigidbody rb)) rb.isKinematic = false; + + grab.selectExited.RemoveListener(OnReleasedAfterPickup); + } +} diff --git a/Assets/02_Scripts/Player/RideController.cs.meta b/Assets/02_Scripts/Player/RideController.cs.meta new file mode 100644 index 00000000..c4a98519 --- /dev/null +++ b/Assets/02_Scripts/Player/RideController.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 5a30bf3ffde1d9f458179bc3de7798bc \ No newline at end of file diff --git a/Assets/02_Scripts/Player/RideDetectionZone.cs b/Assets/02_Scripts/Player/RideDetectionZone.cs new file mode 100644 index 00000000..6adbb7a6 --- /dev/null +++ b/Assets/02_Scripts/Player/RideDetectionZone.cs @@ -0,0 +1,16 @@ +using UnityEngine; + +public class RideDetectionZone : MonoBehaviour +{ + [SerializeField] private RideController _ride; + + private void OnTriggerStay(Collider other) + { + if (_ride != null) _ride.OnDetectionStay(other); + } + + private void OnTriggerExit(Collider other) + { + if (_ride != null) _ride.OnDetectionExit(other); + } +} diff --git a/Assets/02_Scripts/Player/RideDetectionZone.cs.meta b/Assets/02_Scripts/Player/RideDetectionZone.cs.meta new file mode 100644 index 00000000..7ea03f88 --- /dev/null +++ b/Assets/02_Scripts/Player/RideDetectionZone.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: b6318bd3f56cf2c49813bcb2d813a7ec \ No newline at end of file diff --git a/Assets/02_Scripts/UI/GameTimerHud.cs b/Assets/02_Scripts/UI/GameTimerHud.cs new file mode 100644 index 00000000..77a25ef1 --- /dev/null +++ b/Assets/02_Scripts/UI/GameTimerHud.cs @@ -0,0 +1,34 @@ +using TMPro; +using UnityEngine; + +namespace VRShopping.UI +{ + public class GameTimerHud : MonoBehaviour + { + [SerializeField] private GameTimer _timer; + [SerializeField] private TMP_Text _text; + + private void OnEnable() + { + if (_timer == null) return; + _timer.OnTick += HandleTick; + HandleTick(_timer.Remaining); + } + + private void OnDisable() + { + if (_timer == null) return; + _timer.OnTick -= HandleTick; + } + + private void HandleTick(float remaining) + { + if (_text == null) return; + + int total = Mathf.CeilToInt(remaining); + int minutes = total / 60; + int seconds = total % 60; + _text.text = $"{minutes:00}:{seconds:00}"; + } + } +} diff --git a/Assets/02_Scripts/UI/GameTimerHud.cs.meta b/Assets/02_Scripts/UI/GameTimerHud.cs.meta new file mode 100644 index 00000000..9b4e2c61 --- /dev/null +++ b/Assets/02_Scripts/UI/GameTimerHud.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 7e4f8e4f5f50a734d96dd84839da9183 \ No newline at end of file diff --git a/Assets/02_Scripts/UI/ShoppingOrderView.cs b/Assets/02_Scripts/UI/ShoppingOrderView.cs index 9146f032..7b92a585 100644 --- a/Assets/02_Scripts/UI/ShoppingOrderView.cs +++ b/Assets/02_Scripts/UI/ShoppingOrderView.cs @@ -8,6 +8,10 @@ public class ShoppingOrderView : MonoBehaviour [SerializeField] private ShoppingOrderList _orderList; [SerializeField] private ShoppingOrderRow _rowPrefab; [SerializeField] private Transform _rowContainer; + [SerializeField] private Animator _anim; + [SerializeField] private GameObject _paper; + + private bool _visibleShoppingOrderList = false; private void Start() { @@ -29,5 +33,27 @@ public void Rebuild() row.Bind(entry); } } + + public async Awaitable ToggleShoppingOrderList() + { + _visibleShoppingOrderList = !_visibleShoppingOrderList; + await OnOffShoppingOrderList(_visibleShoppingOrderList); + } + + private async Awaitable OnOffShoppingOrderList(bool isOn) + { + if(isOn) + { + _paper.SetActive(true); + _anim.SetTrigger("OnVisibleShoppingOrderListTrigger"); + } + else + { + _anim.SetTrigger("OffVisibleShoppingOrderListTrigger"); + await Util.RunDelayed(1f,()=>{ + _paper.SetActive(false); + }); + } + } } } diff --git a/Assets/03_Models/Stylized_Hands/Poses/Pose_GrabCart.asset b/Assets/03_Models/Stylized_Hands/Poses/Pose_GrabCart.asset new file mode 100644 index 00000000..8c7f909d --- /dev/null +++ b/Assets/03_Models/Stylized_Hands/Poses/Pose_GrabCart.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c5b29b08b5901ced7ef5ff47931046fe48ee98d0340dc730d2abcf72cfb86618 +size 4985 diff --git a/Assets/03_Models/Stylized_Hands/Poses/Pose_GrabCart.asset.meta b/Assets/03_Models/Stylized_Hands/Poses/Pose_GrabCart.asset.meta new file mode 100644 index 00000000..367b05d8 --- /dev/null +++ b/Assets/03_Models/Stylized_Hands/Poses/Pose_GrabCart.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 73b3ceab3a00fe0418e51ddde8ea4538 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/07_UI/Shopping/Animations.meta b/Assets/07_UI/Shopping/Animations.meta new file mode 100644 index 00000000..b05001d6 --- /dev/null +++ b/Assets/07_UI/Shopping/Animations.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cf2576a01718d8a49a7b8e9688964518 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/07_UI/Shopping/Animations/OffShoppingOrderList.anim b/Assets/07_UI/Shopping/Animations/OffShoppingOrderList.anim new file mode 100644 index 00000000..03dd0ea6 --- /dev/null +++ b/Assets/07_UI/Shopping/Animations/OffShoppingOrderList.anim @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f91bc2726db0066589aa9b29f0dec954b5c984e498d9e17eeeda62c5b991d6ef +size 2850 diff --git a/Assets/07_UI/Shopping/Animations/OffShoppingOrderList.anim.meta b/Assets/07_UI/Shopping/Animations/OffShoppingOrderList.anim.meta new file mode 100644 index 00000000..431b0022 --- /dev/null +++ b/Assets/07_UI/Shopping/Animations/OffShoppingOrderList.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d36d97b1f87268248bc02312a6e23221 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/07_UI/Shopping/Animations/OnShoppingOrderList.anim b/Assets/07_UI/Shopping/Animations/OnShoppingOrderList.anim new file mode 100644 index 00000000..e1a620a9 --- /dev/null +++ b/Assets/07_UI/Shopping/Animations/OnShoppingOrderList.anim @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa921008dbe301e61e99756d8f8a2320e018021507acc800664f8ae2b3a2d259 +size 2849 diff --git a/Assets/07_UI/Shopping/Animations/OnShoppingOrderList.anim.meta b/Assets/07_UI/Shopping/Animations/OnShoppingOrderList.anim.meta new file mode 100644 index 00000000..54337350 --- /dev/null +++ b/Assets/07_UI/Shopping/Animations/OnShoppingOrderList.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 79b08a15593d8f243aa0dc020731ff6b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/07_UI/Shopping/Animations/ShoppingOrderListAnimController.controller b/Assets/07_UI/Shopping/Animations/ShoppingOrderListAnimController.controller new file mode 100644 index 00000000..a3644200 --- /dev/null +++ b/Assets/07_UI/Shopping/Animations/ShoppingOrderListAnimController.controller @@ -0,0 +1,194 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1107 &-8250066053025654780 +AnimatorStateMachine: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Base Layer + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: 1471892196722765337} + m_Position: {x: 260, y: 110, z: 0} + - serializedVersion: 1 + m_State: {fileID: 5477244377248036394} + m_Position: {x: 260, y: 310, z: 0} + - serializedVersion: 1 + m_State: {fileID: -840852488383713944} + m_Position: {x: 270, y: 410, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: + - {fileID: 6040170969249773668} + - {fileID: -6034452105318299139} + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: -10, y: 390, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 540, y: 200, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: 1471892196722765337} +--- !u!1101 &-6034452105318299139 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 1 + m_ConditionEvent: OnVisibleShoppingOrderListTrigger + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 5477244377248036394} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.25 + m_TransitionOffset: 0 + m_ExitTime: 0.75 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1102 &-840852488383713944 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: OffShoppingOrderList + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: d36d97b1f87268248bc02312a6e23221, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ShoppingOrderListAnimController + serializedVersion: 5 + m_AnimatorParameters: + - m_Name: OnVisibleShoppingOrderListTrigger + m_Type: 9 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 9100000} + - m_Name: OffVisibleShoppingOrderListTrigger + m_Type: 9 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 9100000} + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: -8250066053025654780} + m_Mask: {fileID: 0} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} +--- !u!1102 &1471892196722765337 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Empty + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 0} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1102 &5477244377248036394 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: OnShoppingOrderList + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 79b08a15593d8f243aa0dc020731ff6b, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1101 &6040170969249773668 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 1 + m_ConditionEvent: OffVisibleShoppingOrderListTrigger + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: -840852488383713944} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.25 + m_TransitionOffset: 0 + m_ExitTime: 0.75 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 diff --git a/Assets/07_UI/Shopping/Animations/ShoppingOrderListAnimController.controller.meta b/Assets/07_UI/Shopping/Animations/ShoppingOrderListAnimController.controller.meta new file mode 100644 index 00000000..4c5f1811 --- /dev/null +++ b/Assets/07_UI/Shopping/Animations/ShoppingOrderListAnimController.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 18af9f1190d4aca429af6bea525a58d8 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 9100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/09_Timeline.meta b/Assets/09_Timeline.meta new file mode 100644 index 00000000..9460965b --- /dev/null +++ b/Assets/09_Timeline.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7501fc59007944e4287751e5d22e4298 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/09_Timeline/Playable.meta b/Assets/09_Timeline/Playable.meta new file mode 100644 index 00000000..879466a9 --- /dev/null +++ b/Assets/09_Timeline/Playable.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 59ffe22c1e52d084cbe41548ecb8fa49 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/09_Timeline/Signals.meta b/Assets/09_Timeline/Signals.meta new file mode 100644 index 00000000..a509a039 --- /dev/null +++ b/Assets/09_Timeline/Signals.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 988e5902372cb0f409bf37b9f6c7c80d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Samples/XR Interaction Toolkit/3.3.0/Starter Assets/XRI Default Input Actions.inputactions b/Assets/Samples/XR Interaction Toolkit/3.3.0/Starter Assets/XRI Default Input Actions.inputactions index 66a9ab11..eea254f1 100644 --- a/Assets/Samples/XR Interaction Toolkit/3.3.0/Starter Assets/XRI Default Input Actions.inputactions +++ b/Assets/Samples/XR Interaction Toolkit/3.3.0/Starter Assets/XRI Default Input Actions.inputactions @@ -1,4 +1,5 @@ { + "version": 1, "name": "XRI Default Input Actions", "maps": [ { @@ -3373,6 +3374,34 @@ "isPartOfComposite": true } ] + }, + { + "name": "KeyBoard", + "id": "923e68c0-8a01-4e59-bd0c-7df5ce2122d2", + "actions": [ + { + "name": "XRLeftControllerPrimaryButton_Test_KeyNum1", + "type": "Button", + "id": "33a77543-4fec-4100-bb58-5a5a6b931dab", + "expectedControlType": "", + "processors": "", + "interactions": "", + "initialStateCheck": false + } + ], + "bindings": [ + { + "name": "", + "id": "83e77479-9aac-4da0-a802-a18113334713", + "path": "/numpad1", + "interactions": "", + "processors": "", + "groups": "", + "action": "XRLeftControllerPrimaryButton_Test_KeyNum1", + "isComposite": false, + "isPartOfComposite": false + } + ] } ], "controlSchemes": [] diff --git a/Assets/Supermarket Store/FBX/Collider/Collider_Edit5.fbx b/Assets/Supermarket Store/FBX/Collider/Collider_Edit5.fbx new file mode 100644 index 00000000..cb61af8d --- /dev/null +++ b/Assets/Supermarket Store/FBX/Collider/Collider_Edit5.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:139aedd90420c9df74771840e5df5068a153272bddbe0f45484d4baa29959c49 +size 15084 diff --git a/Assets/Supermarket Store/FBX/Collider/Collider_Edit5.fbx.meta b/Assets/Supermarket Store/FBX/Collider/Collider_Edit5.fbx.meta new file mode 100644 index 00000000..a778ce67 --- /dev/null +++ b/Assets/Supermarket Store/FBX/Collider/Collider_Edit5.fbx.meta @@ -0,0 +1,110 @@ +fileFormatVersion: 2 +guid: 19b2ac300b1cfec4e80d950172d5fbad +ModelImporter: + serializedVersion: 24200 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 0 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importPhysicalCameras: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + generateMeshLods: 0 + meshLodGenerationFlags: 0 + maximumMeshLod: -1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + strictVertexDataChecks: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + importBlendShapeDeformPercent: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Supermarket Store/Prefabs/ShoppingCart.prefab b/Assets/Supermarket Store/Prefabs/ShoppingCart.prefab index 2edcd390..9b79a445 100644 --- a/Assets/Supermarket Store/Prefabs/ShoppingCart.prefab +++ b/Assets/Supermarket Store/Prefabs/ShoppingCart.prefab @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2dd37460c7874df3433ed38e0ed485ec5b5a1c46c172b467bfe7595e644c537a -size 2543 +oid sha256:489c3f39af2de555837a2ca66ca3a360534efdac92d7d708225afa5a022f059d +size 30609 diff --git a/ProjectSettings/DynamicsManager.asset b/ProjectSettings/DynamicsManager.asset index c4a1e750..ca47f147 100644 --- a/ProjectSettings/DynamicsManager.asset +++ b/ProjectSettings/DynamicsManager.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c4959f39db07051c9aeb41c9e4995390b2086cee12b2dc5d4b0fa536f24fa201 -size 1314 +oid sha256:c871dabcabc8066e68a4b5df08818ca4926ab95d0c12e37fc6ce48f928316091 +size 1549