namespace UVC.Factory.Component { /// /// 팩토리 내의 각 객체(FactoryObject)에 대한 고정적인 식별 정보를 저장하는 데이터 클래스입니다. /// 이 클래스는 객체의 이름, ID, 위치, 구역, 층과 같이 한 번 설정된 후에는 거의 변경되지 않는 정적 데이터를 담는 데 사용됩니다. /// /// /// 이 정보는 FactoryObject가 생성될 때 할당되며, FactoryObjectManager를 통해 시스템 전체에서 객체를 식별하고 관리하는 데 사용됩니다. /// 예를 들어, 특정 ID를 가진 기계를 찾거나 특정 구역에 있는 모든 센서를 필터링하는 등의 작업에 활용될 수 있습니다. /// /// /// 다음은 `FactoryObjectInfo`를 생성하고 `FactoryObject`에 할당하는 간단한 예제입니다. /// /// using UnityEngine; /// using UVC.Factory.Component; /// /// public class FactorySetup : MonoBehaviour /// { /// void Start() /// { /// // 1. 씬에 새로운 게임 오브젝트를 생성하고, 사용자 정의 팩토리 객체 컴포넌트(예: MachineObject)를 추가합니다. /// GameObject machineGo = new GameObject("CNC Machine"); /// MachineObject machine = machineGo.AddComponent(); // MachineObject는 FactoryObject를 상속받는 클래스라고 가정합니다. /// /// // 2. 이 기계에 대한 식별 정보를 담는 FactoryObjectInfo 인스턴스를 생성합니다. /// var machineInfo = new FactoryObjectInfo( /// name: "CNC-Machine-05", /// Id: "MC-005", /// position: "Row 3, Column 2", /// area: "Machining Area 1", /// floor: "1F" /// ); /// /// // 3. 생성된 정보 객체를 MachineObject의 Info 속성에 할당합니다. /// // 이 과정을 통해 3D 모델(GameObject)과 메타데이터(FactoryObjectInfo)가 연결됩니다. /// machine.Info = machineInfo; /// /// // 이제 이 객체는 FactoryObjectManager에 등록되고, ID나 이름으로 검색할 수 있게 됩니다. /// Debug.Log($"새로운 기계 등록: {machine.Info.ToString()}"); /// } /// } /// /// // MachineObject는 다음과 같이 FactoryObject를 상속하여 구현할 수 있습니다. /// public class MachineObject : FactoryObject { /* ... */ } /// /// public class FactoryObjectInfo { /// /// 객체의 이름입니다. UI에 표시되거나 사람이 식별할 수 있는 이름으로 사용됩니다. (예: "Main Conveyor Belt") /// public string Name { get; set; } /// /// 객체의 고유 식별자(ID)입니다. 시스템에서 객체를 유일하게 구분하는 데 사용됩니다. (예: "CVB-001") /// public string Id { get; set; } /// /// 팩토리 내에서 객체의 물리적인 위치나 좌표를 설명합니다. (예: "A-12") /// public string Position { get; set; } /// /// 객체가 속한 구역이나 공정을 나타냅니다. (예: "조립 라인 1") /// public string Area { get; set; } /// /// 객체가 위치한 건물의 층을 나타냅니다. (예: "1F", "B2") /// public string Floor { get; set; } /// /// 객체의 카테고리나 유형을 나타냅니다. (예: "AGV", "PORT", "컨베이어") /// public string Category { get; set; } = ""; // 기본값은 "기타"로 설정 /// /// 모든 속성을 초기화하는 생성자입니다. /// /// 객체 이름 /// 고유 ID /// 위치 정보 /// 구역 정보 /// 층 정보 public FactoryObjectInfo(string name, string id, string position, string area, string floor, string category) { Name = name; Id = id; Position = position; Area = area; Floor = floor; Category = category; } /// /// 다른 FactoryObjectInfo 객체와 모든 속성 값이 동일한지 비교합니다. /// /// 비교할 다른 FactoryObjectInfo 객체입니다. /// 모든 속성이 같으면 true, 그렇지 않으면 false를 반환합니다. public bool Equals(FactoryObjectInfo other) { if (other == null) return false; return Name == other.Name && Id == other.Id && Position == other.Position && Area == other.Area && Floor == other.Floor; } /// /// 객체의 정보를 요약된 문자열 형태로 반환합니다. 디버깅이나 로깅에 유용합니다. /// /// 객체의 모든 속성 정보를 포함하는 문자열입니다. public override string ToString() { return $"Name:{Name},Id:{Id},Position:{Position},Area:{Area},Floor:{Floor}"; } } }