Initial commit: WMS 교육 시뮬레이터 (입고 모듈 골격)
- Unity 6.4 URP 프로젝트 베이스 - Inbound 비즈니스 로직: Scan/Putaway/Scoring 서비스 + InboundManager - 데이터 모델: Item/Location/Scenario (ScriptableObject) + StorageZone - 샘플 시나리오 inbound_basic.json, 설계문서/목업 포함 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace SinoWms.Data
|
||||
{
|
||||
/// <summary>
|
||||
/// 입고 교육 시나리오. 입고예정 라인 + 교육용 "함정"(실수량 차이 등)을 담는다.
|
||||
/// 코드 수정 없이 .asset 또는 JSON 으로 교체하여 고객사별 시나리오를 만든다.
|
||||
/// </summary>
|
||||
[CreateAssetMenu(fileName = "Scenario_", menuName = "SinoWMS/Inbound Scenario")]
|
||||
public class InboundScenario : ScriptableObject
|
||||
{
|
||||
public string scenarioId;
|
||||
public string title;
|
||||
|
||||
[Tooltip("제한 시간(초). 0이면 무제한.")]
|
||||
public float timeLimitSeconds = 0f;
|
||||
|
||||
public List<InboundLine> lines = new List<InboundLine>();
|
||||
}
|
||||
|
||||
/// <summary>입고예정 1줄 = 품목 1종.</summary>
|
||||
[System.Serializable]
|
||||
public class InboundLine
|
||||
{
|
||||
public ItemDefinition item;
|
||||
|
||||
[Tooltip("ASN상 예정 수량")]
|
||||
public int expectedQty;
|
||||
|
||||
[Tooltip("실제 도착 수량. 예정과 다르면 검수 단계에서 교육 포인트가 된다.")]
|
||||
public int actualQty;
|
||||
|
||||
[Tooltip("정답 로케이션(채점 기준). 비워두면 존/용량 규칙만으로 검증.")]
|
||||
public LocationDefinition suggestedLocation;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace SinoWms.Data
|
||||
{
|
||||
/// <summary>품목 마스터. 고객사별로 .asset 파일로 만들어 교체한다.</summary>
|
||||
[CreateAssetMenu(fileName = "Item_", menuName = "SinoWMS/Item Definition")]
|
||||
public class ItemDefinition : ScriptableObject
|
||||
{
|
||||
[Tooltip("재고 식별 코드 (SKU)")]
|
||||
public string sku;
|
||||
|
||||
[Tooltip("품목명")]
|
||||
public string displayName;
|
||||
|
||||
[Tooltip("스캔 대상 바코드 값")]
|
||||
public string barcode;
|
||||
|
||||
[Tooltip("요구 보관 조건")]
|
||||
public StorageZone requiredZone = StorageZone.Ambient;
|
||||
|
||||
[Tooltip("한 개당 차지하는 부피(용량 단위)")]
|
||||
public int unitVolume = 1;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace SinoWms.Data
|
||||
{
|
||||
/// <summary>로케이션(적치 위치) 마스터.</summary>
|
||||
[CreateAssetMenu(fileName = "Loc_", menuName = "SinoWMS/Location Definition")]
|
||||
public class LocationDefinition : ScriptableObject
|
||||
{
|
||||
[Tooltip("로케이션 코드 (예: A-01-03)")]
|
||||
public string locationCode;
|
||||
|
||||
[Tooltip("이 로케이션이 지원하는 보관 조건")]
|
||||
public StorageZone zone = StorageZone.Ambient;
|
||||
|
||||
[Tooltip("최대 수용 용량(부피 단위)")]
|
||||
public int capacity = 100;
|
||||
|
||||
[Tooltip("탑다운 씬에서의 격자 좌표")]
|
||||
public Vector2Int gridPosition;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
namespace SinoWms.Data
|
||||
{
|
||||
/// <summary>보관 조건(존). 적치 규칙 검증에 사용된다.</summary>
|
||||
public enum StorageZone
|
||||
{
|
||||
Ambient, // 상온
|
||||
Chilled, // 냉장
|
||||
Frozen, // 냉동
|
||||
Hazardous // 위험물
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user