Pool 적용 버그 잡는 중

This commit is contained in:
logonkhi
2025-06-27 17:50:23 +09:00
parent 935979a696
commit 750d38153d
32 changed files with 1977 additions and 218 deletions

View File

@@ -110,8 +110,11 @@ namespace UVC.Factory.Component
/// }
/// </code>
/// </example>
public abstract class FactoryObject : InteractiveObject
public abstract class FactoryObject : MonoBehaviour, IPointerClickHandler, IPointerEnterHandler, IPointerExitHandler
{
[Tooltip("3D 모델 객체")]
public InteractiveObject? modelObject;
protected FactoryObjectInfo? info;
/// <summary>
@@ -149,9 +152,30 @@ namespace UVC.Factory.Component
}
}
private void OnDestroy()
protected virtual void Awake()
{
// 초기화 작업을 수행합니다.
if (modelObject == null)
{
Debug.LogError("FactoryObject requires an InteractiveObject component.");
}
else
{
modelObject.OnPointerClickHandler += OnPointerClick;
modelObject.OnPointerEnterHandler += OnPointerEnter;
modelObject.OnPointerExitHandler += OnPointerExit;
}
}
protected virtual void OnDestroy()
{
if (modelObject != null)
{
modelObject.OnPointerClickHandler -= OnPointerClick;
modelObject.OnPointerEnterHandler -= OnPointerEnter;
modelObject.OnPointerExitHandler -= OnPointerExit;
}
FactoryObjectManager.Instance.UnregisterFactoryObject(Info!);
}
@@ -165,7 +189,7 @@ namespace UVC.Factory.Component
/// `DataOrderedMask`가 설정되어 있으면 해당 순서대로, 그렇지 않으면 모든 데이터를 표시합니다.
/// </remarks>
/// <param name="eventData">포인터 클릭과 관련된 이벤트 데이터입니다.</param>
public override void OnPointerClick(PointerEventData eventData)
public void OnPointerClick(PointerEventData eventData)
{
if (data != null && data.Count > 0)
{
@@ -190,18 +214,28 @@ namespace UVC.Factory.Component
}
}
/// <summary>
/// 포인터가 이 객체 위로 들어왔을 때 호출됩니다. 하이라이트 효과 등에 사용할 수 있습니다.
/// </summary>
/// <param name="eventData">포인터 이벤트와 관련된 데이터입니다.</param>
public void OnPointerEnter(PointerEventData eventData) { }
/// <summary>
/// 포인터가 이 객체에서 벗어났을 때 호출됩니다.
/// </summary>
/// <param name="eventData">포인터 이벤트와 관련된 데이터입니다.</param>
public void OnPointerExit(PointerEventData eventData) { }
/// <summary>
/// 외부로부터 받은 새로운 데이터로 객체의 상태를 업데이트합니다.
/// 이 메서드는 내부적으로 `ProcessData`를 호출하여 실제 데이터 처리 로직을 수행합니다.
/// MQTTPipeLineInfo.updatedDataOnly가 true인 경우, 데이터가 변경된 경우에만 호출됩니다.
/// </summary>
/// <param name="newData">업데이트할 새로운 데이터가 포함된 IDataObject 객체입니다.</param>
public void UpdateData(IDataObject? newData)
public void UpdateData(DataObject newData)
{
if(newData == null) return;
DataObject? dataObject = newData as DataObject;
if (dataObject == null || dataObject.Count == 0) return;
ProcessData(dataObject);
ProcessData(newData);
}
/// <summary>