본문 바로가기

Unity3D/C#

유니티 텍스트를 클립보드로 복사하기 (GUIUtility.systemCopyBuffer)

반응형

Clipboard Copy

게임에서 초대 문구나 짧은 안내 문장을 다른 곳에 붙여 넣도록 제공할 때 복사 기능을 사용할 수 있습니다. 화면의 글자를 선택하게 만드는 대신, 복사할 문자열을 정해 시스템 클립보드에 전달하는 방식입니다. Unity에서는 GUIUtility.systemCopyBuffer 속성으로 시스템 클립보드에 접근합니다. 속성에 문자열을 대입하는 줄이 이번 예제의 복사 동작입니다. UI에 텍스트를 표시하는 컴포넌트와는 별개이므로 Text나 TMP_Text 없이도 문자열을 전달할 수 있습니다. 이번 예시에서는 인스펙터에 적은 문장을 클립보드로 복사해 보겠습니다.

C# (UNITY 3D)

Copy_Text 흐름. 인스펙터의 text_copy를 Copy_Text가 Set_Clipboard로 넘기고, 빈 값이 아니면 GUIUtility.systemCopyBuffer에 대입하는 순서의 설명 도식입니다. 실제 Unity 화면이 아닙니다.

Copy_Text를 호출하면 Text Copy에 입력한 문자열을 systemCopyBuffer에 대입하는 예제입니다.

빈 GameObject에 ClipboardCopy.cs를 붙이고 Text Copy에 복사할 문장을 적습니다. 플레이 모드에서 스크립트 컴포넌트의 컨텍스트 메뉴에 있는 Copy Text를 선택하면 Copy_Text가 호출됩니다. 컨텍스트 메뉴는 에디터에서 함수를 부르는 진입점이며 배포 화면에 복사 버튼을 만드는 기능은 아닙니다.

GUIUtility와 ContextMenu를 사용하기 위해 UnityEngine을 사용합니다. 같은 함수에서 복사할 문장만 바꾸려면 text_copy 필드의 값을 바꾸면 됩니다.

using UnityEngine;

//CodeFinder 코드파인더
//From https://codefinder.janndk.com/
public class ClipboardCopy : MonoBehaviour
{
    public string text_copy = "함께 플레이할 시간을 알려 주세요.";

    [ContextMenu("Copy Text")]
    public void Copy_Text()
    {
        Set_Clipboard(text_copy);
    }

    public void Set_Clipboard(string value)
    {
        if (string.IsNullOrEmpty(value))
            return;

        // 복사할 문자열을 시스템 클립보드에 전달합니다.
        GUIUtility.systemCopyBuffer = value;
    }
}

변수(variable)

text_copy(string) : 클립보드로 전달할 문장입니다.

함수(function)

Copy_Text : 인스펙터에 입력한 값을 Set_Clipboard로 넘깁니다.

Set_Clipboard : null과 빈 문자열을 제외하고 시스템 클립보드에 대입합니다.

빈 값을 걸러 내는 것은 이 예제의 선택입니다. 텍스트를 입력하지 않은 상태에서 함수를 호출했을 때 기존 클립보드를 빈 문자열로 덮어쓰지 않도록 했습니다. 공백만 있는 문자열까지 거르지는 않습니다. 호출하는 쪽에서 문자열을 이미 가지고 있다면 Set_Clipboard에 직접 전달할 수 있습니다.
주의

이 코드는 Unity 6000.6.3f1에서 컴파일 오류가 없는 것까지 확인했습니다. 복사 완료 토스트나 성공 여부를 알려 주는 반환값은 없습니다. Unity 문서 기준으로 tvOS에서는 이 기능을 지원하지 않습니다. 배포할 플랫폼에서는 붙여넣기 결과를 직접 확인해야 합니다. 예제의 고정 문장에는 비밀번호나 토큰처럼 노출되면 안 되는 값을 넣지 않습니다.

참고: GUIUtility-systemCopyBuffer · ContextMenu

반응형

Google Play 및 Google Play 로고는 Google LLC의 상표입니다.