Files
XRLib/Assets/Scripts/Factory/Component/FactoryObjectInfo.cs
2025-12-08 21:06:05 +09:00

119 lines
5.5 KiB
C#

namespace UVC.Factory.Component
{
/// <summary>
/// 팩토리 내의 각 객체(FactoryObject)에 대한 고정적인 식별 정보를 저장하는 데이터 클래스입니다.
/// 이 클래스는 객체의 이름, ID, 위치, 구역, 층과 같이 한 번 설정된 후에는 거의 변경되지 않는 정적 데이터를 담는 데 사용됩니다.
/// </summary>
/// <remarks>
/// 이 정보는 FactoryObject가 생성될 때 할당되며, FactoryObjectManager를 통해 시스템 전체에서 객체를 식별하고 관리하는 데 사용됩니다.
/// 예를 들어, 특정 ID를 가진 기계를 찾거나 특정 구역에 있는 모든 센서를 필터링하는 등의 작업에 활용될 수 있습니다.
/// </remarks>
/// <example>
/// 다음은 `FactoryObjectInfo`를 생성하고 `FactoryObject`에 할당하는 간단한 예제입니다.
/// <code>
/// 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>(); // 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 { /* ... */ }
/// </code>
/// </example>
public class FactoryObjectInfo
{
/// <summary>
/// 객체의 이름입니다. UI에 표시되거나 사람이 식별할 수 있는 이름으로 사용됩니다. (예: "Main Conveyor Belt")
/// </summary>
public string Name { get; set; }
/// <summary>
/// 객체의 고유 식별자(ID)입니다. 시스템에서 객체를 유일하게 구분하는 데 사용됩니다. (예: "CVB-001")
/// </summary>
public string Id { get; set; }
/// <summary>
/// 팩토리 내에서 객체의 물리적인 위치나 좌표를 설명합니다. (예: "A-12")
/// </summary>
public string Position { get; set; }
/// <summary>
/// 객체가 속한 구역이나 공정을 나타냅니다. (예: "조립 라인 1")
/// </summary>
public string Area { get; set; }
/// <summary>
/// 객체가 위치한 건물의 층을 나타냅니다. (예: "1F", "B2")
/// </summary>
public string Floor { get; set; }
/// <summary>
/// 객체의 카테고리나 유형을 나타냅니다. (예: "AGV", "PORT", "컨베이어")
/// </summary>
public string Category { get; set; } = ""; // 기본값은 "기타"로 설정
/// <summary>
/// 모든 속성을 초기화하는 생성자입니다.
/// </summary>
/// <param name="name">객체 이름</param>
/// <param name="id">고유 ID</param>
/// <param name="position">위치 정보</param>
/// <param name="area">구역 정보</param>
/// <param name="floor">층 정보</param>
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;
}
/// <summary>
/// 다른 FactoryObjectInfo 객체와 모든 속성 값이 동일한지 비교합니다.
/// </summary>
/// <param name="other">비교할 다른 FactoryObjectInfo 객체입니다.</param>
/// <returns>모든 속성이 같으면 true, 그렇지 않으면 false를 반환합니다.</returns>
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;
}
/// <summary>
/// 객체의 정보를 요약된 문자열 형태로 반환합니다. 디버깅이나 로깅에 유용합니다.
/// </summary>
/// <returns>객체의 모든 속성 정보를 포함하는 문자열입니다.</returns>
public override string ToString()
{
return $"Name:{Name},Id:{Id},Position:{Position},Area:{Area},Floor:{Floor}";
}
}
}