using System.Collections.Generic; using UnityEngine; using VRShopping.Interact; using VRShopping.Items; public class BarcodeScaner : MonoBehaviour { //스캔 영역 콜라이더 [SerializeField] private Collider _scanAreaCollider; //스캔 이펙트 [SerializeField] private ParticleSystem _scanVisualEffect; //스캔 사운드 [SerializeField] private AudioSource _scanSoundEffect; //체크아웃 정보 저장 객체 [SerializeField] private CheckoutMachine _checkoutMachine; private readonly Collider[] _overlapBuffer = new Collider[32]; private readonly HashSet _scannedBuffer = new(); // 스캔영역 콜라이더 안에 들어온 아이템들을 스캔함 public void ScanArea() { if (_scanAreaCollider == null) return; var bounds = _scanAreaCollider.bounds; var count = Physics.OverlapBoxNonAlloc(bounds.center, bounds.extents, _overlapBuffer, Quaternion.identity); _scannedBuffer.Clear(); for (int i = 0; i < count; i++) { var item = _overlapBuffer[i].GetComponentInParent(); if (item != null && _scannedBuffer.Add(item)) ScanProduction(item); } } //ItemInstance의 상품 정보를 스캔 public void ScanProduction(ItemInstance itemIns) { //AddCheckoutSum으로 총 계산금액에 더함 _checkoutMachine.AddCheckoutSum(itemIns.ItemDataInfo.FinalPrice); if (_scanVisualEffect != null) _scanVisualEffect.Play(); if (_scanSoundEffect != null) _scanSoundEffect.Play(); } }