2026-04-22 계산대 프로토 타입
This commit is contained in:
50
Assets/02_Scripts/Shopping/BarcodeScaner.cs
Normal file
50
Assets/02_Scripts/Shopping/BarcodeScaner.cs
Normal file
@@ -0,0 +1,50 @@
|
||||
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<ItemInstance> _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<ItemInstance>();
|
||||
if (item != null && _scannedBuffer.Add(item)) ScanProduction(item);
|
||||
}
|
||||
}
|
||||
|
||||
//ItemInstance의 상품 정보를 스캔
|
||||
public void ScanProduction(ItemInstance itemIns)
|
||||
{
|
||||
_checkoutMachine.AddCheckoutProduction(itemIns.ItemDataInfo);
|
||||
|
||||
if (_scanVisualEffect != null) _scanVisualEffect.Play();
|
||||
if (_scanSoundEffect != null) _scanSoundEffect.Play();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
2
Assets/02_Scripts/Shopping/BarcodeScaner.cs.meta
Normal file
2
Assets/02_Scripts/Shopping/BarcodeScaner.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6c30ee7298d2ab547b0fbfeb348c65f4
|
||||
35
Assets/02_Scripts/Shopping/CheckoutMachine.cs
Normal file
35
Assets/02_Scripts/Shopping/CheckoutMachine.cs
Normal file
@@ -0,0 +1,35 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using VRShopping.Items;
|
||||
using VRShopping.UI;
|
||||
|
||||
namespace VRShopping.Interact
|
||||
{
|
||||
public class CheckoutMachine : MonoBehaviour
|
||||
{
|
||||
public int CheckoutSum { get; private set; }
|
||||
|
||||
[SerializeField] private Transform _rowContainer;
|
||||
[SerializeField] private CheckoutProductionRow _rowPrefab;
|
||||
|
||||
private readonly Dictionary<ItemData, CheckoutProductionRow> _rowByItem = new();
|
||||
|
||||
public void AddCheckoutProduction(ItemData itemData)
|
||||
{
|
||||
if (itemData == null) return;
|
||||
|
||||
if (_rowByItem.TryGetValue(itemData, out CheckoutProductionRow row))
|
||||
{
|
||||
row.Bind(itemData, row.Quantity + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
row = Instantiate(_rowPrefab, _rowContainer);
|
||||
row.Bind(itemData, 1);
|
||||
_rowByItem[itemData] = row;
|
||||
}
|
||||
|
||||
CheckoutSum += itemData.FinalPrice;
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/02_Scripts/Shopping/CheckoutMachine.cs.meta
Normal file
2
Assets/02_Scripts/Shopping/CheckoutMachine.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7318fd9a38f8e3248993385f7b3f845a
|
||||
Reference in New Issue
Block a user