안녕하세요

프로그램 과정에서 막혔던 문제들에 대한 해결책 정리


페이지 목록

2024년 12월 25일 수요일

[유니티][Unity][Copilot] Image image1 = image2로 복사와 image1.color = image2.color와 같이 내부 항목 복사의 차이점

 Image image1 = image2 로 복사를 하게 되면 참조 값만 변경이 되게 된다.

즉, image1과 image2가 같은 image2를 가르키게 되는 것이다. 

 이렇게 하면 내부 값이 아니라 참조 값만 복사되기에 각 각의 객체로 독립적으로 존재하지 않게 된다.

 그래서 각 항목을 복사해줘야지 원하는 값 전달이 이루어진다.

아래와 같다.

using UnityEngine;

using UnityEngine.UI;


public class ImageProcessor : MonoBehaviour

{

    public Image image1;

    public Image image2;


    private void Start()

    {

        if (image1 == null || image2 == null)

        {

            Debug.LogError("Image components are not assigned!");

            return;

        }


        CopyImageAttributes(image1, image2);

    }


    public void CopyImageAttributes(Image source, Image target)

    {

        if (source != null && target != null)

        {

            target.sprite = source.sprite;

            target.rectTransform.sizeDelta = source.rectTransform.sizeDelta;

            target.rectTransform.anchoredPosition = source.rectTransform.anchoredPosition;

            target.rectTransform.localScale = source.rectTransform.localScale;

            target.color = source.color;

        }

        else

        {

            Debug.LogError("Source or target image is null!");

        }

    }

}

 보통은 이렇게 5개 정도 넘겨 주면 되는데 더 다양한 값도 넘겨 줄 수 있다.
using UnityEngine;
using UnityEngine.UI;

public class ImageProcessor : MonoBehaviour
{
    public Image image1;
    public Image image2;

    private void Start()
    {
        if (image1 == null || image2 == null)
        {
            Debug.LogError("Image components are not assigned!");
            return;
        }

        CopyImageAttributes(image1, image2);
    }

    public void CopyImageAttributes(Image source, Image target)
    {
        if (source != null && target != null)
        {
            target.sprite = source.sprite;
            target.rectTransform.sizeDelta = source.rectTransform.sizeDelta;
            target.rectTransform.anchoredPosition = source.rectTransform.anchoredPosition;
            target.rectTransform.localScale = source.rectTransform.localScale;
            target.color = source.color;

            // 필요에 따라 추가적인 속성 복사
            target.material = source.material;
            target.type = source.type;
            target.preserveAspect = source.preserveAspect;
            target.fillCenter = source.fillCenter;
            target.fillMethod = source.fillMethod;
            target.fillAmount = source.fillAmount;
            target.fillClockwise = source.fillClockwise;
            target.fillOrigin = source.fillOrigin;
        }
        else
        {
            Debug.LogError("Source or target image is null!");
        }
    }
}

** 이 글은 Microsoft Copilot의 도움을 받아 제작되었습니다.

댓글 없음:

댓글 쓰기