61 lines
1.7 KiB
C#
61 lines
1.7 KiB
C#
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<ItemInstance>();
|
|
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();
|
|
}
|
|
|
|
|
|
|
|
}
|