2026-04-22 버그 수정
This commit is contained in:
@@ -1,20 +1,15 @@
|
||||
using System.Collections.Generic;
|
||||
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 Collider _scanAreaCollider;
|
||||
|
||||
//스캔 이펙트
|
||||
[SerializeField] private GameObject _scanVisualEffect;
|
||||
[SerializeField] private ParticleSystem _scanVisualEffect;
|
||||
|
||||
//스캔 사운드
|
||||
[SerializeField] private AudioSource _scanSoundEffect;
|
||||
@@ -22,28 +17,23 @@ public class BarcodeScaner : MonoBehaviour
|
||||
//체크아웃 정보 저장 객체
|
||||
[SerializeField] private CheckoutMachine _checkoutMachine;
|
||||
|
||||
// 스캔영역을 스캔함
|
||||
private readonly Collider[] _overlapBuffer = new Collider[32];
|
||||
private readonly HashSet<ItemInstance> _scannedBuffer = new();
|
||||
|
||||
// 스캔영역 콜라이더 안에 들어온 아이템들을 스캔함
|
||||
public void ScanArea()
|
||||
{
|
||||
if (_scanDirection == null) return;
|
||||
if (_scanAreaCollider == null) return;
|
||||
|
||||
ShowScanEffect();
|
||||
var bounds = _scanAreaCollider.bounds;
|
||||
var count = Physics.OverlapBoxNonAlloc(bounds.center, bounds.extents, _overlapBuffer, Quaternion.identity);
|
||||
|
||||
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));
|
||||
_scannedBuffer.Clear();
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
var item = _overlapBuffer[i].GetComponentInParent<ItemInstance>();
|
||||
if (item != null && _scannedBuffer.Add(item)) ScanProduction(item);
|
||||
}
|
||||
}
|
||||
|
||||
//ItemInstance의 상품 정보를 스캔
|
||||
@@ -52,6 +42,7 @@ public void ScanProduction(ItemInstance itemIns)
|
||||
//AddCheckoutSum으로 총 계산금액에 더함
|
||||
_checkoutMachine.AddCheckoutSum(itemIns.ItemDataInfo.FinalPrice);
|
||||
|
||||
if (_scanVisualEffect != null) _scanVisualEffect.Play();
|
||||
if (_scanSoundEffect != null) _scanSoundEffect.Play();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user