2026-04-21 가격창, 사운드
This commit is contained in:
60
Assets/02_Scripts/Interact/BarcodeScaner.cs
Normal file
60
Assets/02_Scripts/Interact/BarcodeScaner.cs
Normal file
@@ -0,0 +1,60 @@
|
||||
using UnityEngine;
|
||||
using VRShopping.Interact;
|
||||
using VRShopping.Items;
|
||||
|
||||
public class BarcodeScaner : MonoBehaviour
|
||||
{
|
||||
//스캔 원점 및 방향
|
||||
[SerializeField] private Transform _scanDirection;
|
||||
|
||||
//스캔 거리
|
||||
[SerializeField] private float _scanDistance;
|
||||
|
||||
//스캔 반지름
|
||||
[SerializeField] private float _scanRadius;
|
||||
|
||||
//스캔 이펙트
|
||||
[SerializeField] private GameObject _scanVisualEffect;
|
||||
|
||||
//스캔 사운드
|
||||
[SerializeField] private AudioSource _scanSoundEffect;
|
||||
|
||||
//체크아웃 정보 저장 객체
|
||||
[SerializeField] private CheckoutMachine _checkoutMachine;
|
||||
|
||||
// 스캔영역을 스캔함
|
||||
public void ScanArea()
|
||||
{
|
||||
if (_scanDirection == null) return;
|
||||
|
||||
ShowScanEffect();
|
||||
|
||||
var origin = _scanDirection.position;
|
||||
var direction = _scanDirection.forward;
|
||||
|
||||
if (!Physics.SphereCast(origin, _scanRadius, direction, out var hit, _scanDistance))
|
||||
return;
|
||||
|
||||
var item = hit.collider.GetComponentInParent<ItemInstance>();
|
||||
if (item != null) ScanProduction(item);
|
||||
}
|
||||
|
||||
private void ShowScanEffect()
|
||||
{
|
||||
if (_scanVisualEffect == null) return;
|
||||
_scanVisualEffect.SetActive(true);
|
||||
_ = Util.RunDelayed(0.3f, () => _scanVisualEffect.SetActive(false));
|
||||
}
|
||||
|
||||
//ItemInstance의 상품 정보를 스캔
|
||||
public void ScanProduction(ItemInstance itemIns)
|
||||
{
|
||||
//AddCheckoutSum으로 총 계산금액에 더함
|
||||
_checkoutMachine.AddCheckoutSum(itemIns.ItemDataInfo.FinalPrice);
|
||||
|
||||
if (_scanSoundEffect != null) _scanSoundEffect.Play();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
2
Assets/02_Scripts/Interact/BarcodeScaner.cs.meta
Normal file
2
Assets/02_Scripts/Interact/BarcodeScaner.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6c30ee7298d2ab547b0fbfeb348c65f4
|
||||
16
Assets/02_Scripts/Interact/CheckoutMachine.cs
Normal file
16
Assets/02_Scripts/Interact/CheckoutMachine.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace VRShopping.Interact
|
||||
{
|
||||
public class CheckoutMachine : MonoBehaviour
|
||||
{
|
||||
private int _checkoutSum;
|
||||
|
||||
public int CheckoutSum => _checkoutSum;
|
||||
|
||||
public void AddCheckoutSum(int price)
|
||||
{
|
||||
_checkoutSum += price;
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/02_Scripts/Interact/CheckoutMachine.cs.meta
Normal file
2
Assets/02_Scripts/Interact/CheckoutMachine.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7318fd9a38f8e3248993385f7b3f845a
|
||||
54
Assets/02_Scripts/Interact/ItemInfoOnGrab.cs
Normal file
54
Assets/02_Scripts/Interact/ItemInfoOnGrab.cs
Normal file
@@ -0,0 +1,54 @@
|
||||
using System.Runtime.InteropServices;
|
||||
using UnityEngine;
|
||||
using UnityEngine.XR.Interaction.Toolkit;
|
||||
using UnityEngine.XR.Interaction.Toolkit.Interactors;
|
||||
using VRShopping.Items;
|
||||
using VRShopping.UI;
|
||||
|
||||
namespace VRShopping.Interact
|
||||
{
|
||||
public class ItemInfoOnGrab : MonoBehaviour
|
||||
{
|
||||
private ItemData _data;
|
||||
|
||||
private Handedness _lastHand;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
ItemInstance itemIns = GetComponent<ItemInstance>();
|
||||
if(itemIns != null)
|
||||
{
|
||||
_data = itemIns.ItemDataInfo;
|
||||
}
|
||||
}
|
||||
|
||||
public void HandleSelectEntered(SelectEnterEventArgs args)
|
||||
{
|
||||
if (!TryGetHandedness(args.interactorObject, out var hand)) return;
|
||||
if (ItemInfoHud.Instance == null) return;
|
||||
|
||||
_lastHand = hand;
|
||||
ItemInfoHud.Instance.Show(hand, _data);
|
||||
}
|
||||
|
||||
public void HandleSelectExited(SelectExitEventArgs args)
|
||||
{
|
||||
if (ItemInfoHud.Instance == null) return;
|
||||
ItemInfoHud.Instance.Hide(_lastHand);
|
||||
}
|
||||
|
||||
private static bool TryGetHandedness(IXRInteractor interactor, out Handedness hand)
|
||||
{
|
||||
hand = Handedness.Left;
|
||||
if (interactor is XRBaseInputInteractor input)
|
||||
{
|
||||
switch (input.handedness)
|
||||
{
|
||||
case InteractorHandedness.Left: hand = Handedness.Left; return true;
|
||||
case InteractorHandedness.Right: hand = Handedness.Right; return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/02_Scripts/Interact/ItemInfoOnGrab.cs.meta
Normal file
2
Assets/02_Scripts/Interact/ItemInfoOnGrab.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6ed5864e86344954da86eec32452507b
|
||||
Reference in New Issue
Block a user