아래 코드로 calculatePrefab 활성화 하면

calculatePrefab 오브젝트 컴포넌트가 모두 비활성화로 되는데 

뭐가 문제일까여?ㅠㅠ

계속 몇시간째 해보는데 안대네영ㅠㅠ


using UnityEngine;

using UnityEngine.EventSystems;

using System.Collections;


public class DragUI : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler

{

    private RectTransform rectTransform;

    private GameObject dragObject;  // 드래그 중인 복사본 오브젝트

    private RectTransform dragObjectRectTransform;

    private BoxCollider2D dragObjectCollider; // 콜라이더 참조 추가

    private bool isPlaced = false;  // 복사본이 최종적으로 위치에 고정되었는지 여부


    public GameObject calculatePrefab;  // 새로운 프리팹 참조


    void Awake()

    {

        rectTransform = GetComponent<RectTransform>();

    }


    public void OnBeginDrag(PointerEventData eventData)

    {

        if (gameObject.tag == "calculate" && !isPlaced)

        {

            Debug.Log("Drag started with 'calculate'");


            // 프리팹을 사용하여 새로운 오브젝트 생성

            dragObject = Instantiate(calculatePrefab, transform.parent);

            Debug.Log("Instantiated new object: " + dragObject.name);


            // 루트 오브젝트를 강제로 활성화

            dragObject.SetActive(true);


            dragObjectRectTransform = dragObject.GetComponent<RectTransform>();

            dragObjectRectTransform.anchoredPosition = rectTransform.anchoredPosition;

            dragObjectRectTransform.sizeDelta = rectTransform.sizeDelta;

            dragObjectRectTransform.localScale = rectTransform.localScale;


            dragObjectCollider = dragObject.GetComponent<BoxCollider2D>();


            if (dragObjectCollider != null)

            {

                Debug.Log("Before enabling, Collider enabled: " + dragObjectCollider.enabled);

                StartCoroutine(EnableComponentsAfterDelay(dragObject));

            }

            else

            {

                Debug.LogError("No BoxCollider2D component found!");

            }


            dragObjectRectTransform.position = eventData.pointerPressRaycast.worldPosition;

            ObjectManager.Instance.ActivateCalculateObjects(); // 필요한 오브젝트 활성화

        }

    }


    private IEnumerator EnableComponentsAfterDelay(GameObject obj)

    {

        yield return new WaitForEndOfFrame(); // 프레임 끝날 때까지 대기하여 오브젝트가 완전히 초기화되도록 함


        // 모든 컴포넌트를 활성화

        foreach (var component in obj.GetComponents<Component>())

        {

            if (component is Behaviour behaviourComponent)

            {

                behaviourComponent.enabled = true;

                Debug.Log("Enabled component: " + behaviourComponent.GetType().Name);

            }

            else if (component is Collider2D colliderComponent)

            {

                colliderComponent.enabled = true;

                Debug.Log("Enabled component: " + colliderComponent.GetType().Name);

            }

            else if (component is Renderer rendererComponent)

            {

                rendererComponent.enabled = true;

                Debug.Log("Enabled component: " + rendererComponent.GetType().Name);

            }

            // 추가적으로 필요한 컴포넌트에 대한 활성화 코드를 추가할 수 있습니다.

        }


        Debug.Log("Components enabled.");

    }


    public void OnDrag(PointerEventData eventData)

    {

        if (dragObject != null && !isPlaced)  // 고정되지 않은 경우에만 드래그 업데이트

        {

            Vector3 globalMousePos;

            if (RectTransformUtility.ScreenPointToWorldPointInRectangle(dragObjectRectTransform, eventData.position, eventData.pressEventCamera, out globalMousePos))

            {

                dragObjectRectTransform.position = globalMousePos;

            }

        }

    }


    public void OnEndDrag(PointerEventData eventData)

    {

        if (dragObject != null && !isPlaced)

        {

            Collider2D hit = Physics2D.OverlapPoint(dragObjectRectTransform.position);

            if (hit != null && hit.gameObject.CompareTag("on_calculate"))

            {

                // 복사본 위치를 'on_calculate' 오브젝트 위치에 고정

                dragObjectRectTransform.position = hit.transform.position;

                isPlaced = true;  // 복사본 고정

                Debug.Log("Snapped to 'on_calculate' object at " + hit.transform.position);

            }

            else

            {

                // 복사본이 적절한 위치에 있지 않으면 파괴

                Destroy(dragObject);

                Debug.Log("Drag object destroyed");

            }

        }

    }



}