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]; // 스캔영역 콜라이더 안에서 중심에 가장 가까운 아이템 하나만 스캔 public void ScanArea() { if (_scanAreaCollider == null) return; var bounds = _scanAreaCollider.bounds; var count = Physics.OverlapBoxNonAlloc(bounds.center, bounds.extents, _overlapBuffer, Quaternion.identity); ItemInstance closest = null; float closestDistSqr = float.MaxValue; var center = bounds.center; for (int i = 0; i < count; i++) { var item = _overlapBuffer[i].GetComponentInParent(); if (item == null) continue; float d = (item.transform.position - center).sqrMagnitude; if (d < closestDistSqr) { closestDistSqr = d; closest = item; } } if (closest != null) ScanProduction(closest); } //ItemInstance의 상품 정보를 스캔 public void ScanProduction(ItemInstance itemIns) { _checkoutMachine.AddCheckoutProduction(itemIns.ItemDataInfo); if (_scanVisualEffect != null) _scanVisualEffect.Play(); if (_scanSoundEffect != null) _scanSoundEffect.Play(); } }