아때(unity)

유니티) 이미지 다운로드 QRcode 생성하기

때려쳐아니때려치지마 2023. 6. 18. 15:01
반응형

포스팅목표)

런타임으로 firebase 저장소를 사용하여 유니티내에서 이미지파일을 클라우드에 올리고

저장소에 올라간 이미지의 다운로드 링크를 가져와서 큐알코드를 생성할 수 있다.

 

이전글)

https://workdiarysometimesnot.tistory.com/101

 

유니티)firebase 저장소 사용해서 이미지 업로드하기

1. firebase 계정 생성 https://firebase.google.com/ Firebase Firebase는 고품질 앱을 빠르게 개발하고 비즈니스를 성장시키는 데 도움이 되는 Google의 모바일 플랫폼입니다. firebase.google.com 계정과 프로젝트를

workdiarysometimesnot.tistory.com

firebase 저장소를 사용하는 자세한 내용은 윗 글에 있습니다.


https://github.com/micjahn/ZXing.Net/releases

 

Releases · micjahn/ZXing.Net

.Net port of the original java-based barcode reader and generator library zxing - micjahn/ZXing.Net

github.com

qrcode 생성을 위해 위 링크에서 최신버전을 다운받아줍니다.

압축풀고 unity폴더로 가보면 zxing.unity.dll이 있습니다.

이걸 유니티에 임포트 해주면 해당 기능을 사용할 수 있습니다.

unity에서 Assets > Plugins 폴더에 해당 dll을 임포트해줍니다.

준비끝!


[QRcode 생성하기]

using ZXing;
using ZXing.QrCode;

    public void SetLink(string link)
    {
    	//바코드생성
        BarcodeWriter barcode = new BarcodeWriter
        {
        	//바코드세팅
            Format = BarcodeFormat.QR_CODE,
            Options = new QrCodeEncodingOptions
            {
                Height = 256,
                Width = 256
            }
        };
        //링크 바코드화
        Color32[] encoded = barcode.Write(link);
        
        //바코드 텍스쳐화
        Texture2D qrcode = new Texture2D(256, 256);
        qrcode.SetPixels32(encoded);
        qrcode.Apply();
        
        _rawImage.texture = qrcode;
    }

해당 함수는 큐알로 연결될 링크를 받아서 큐알코드를 생성해주는 함수입니다.


[클라우드에 업로드한 파일의 다운로드 링크 받아오기]

using Firebase.Extensions;
using Firebase.Storage;
using System.Threading.Tasks;

public class StorageManager : SingletonBehaviour<StorageManager>
{
    public FirebaseStorage storage;
    public StorageReference reference;

    void Awake()
    {
        storage = FirebaseStorage.DefaultInstance;
        reference = storage.GetReferenceFromUrl("gs://주소.appspot.com/");
        Debug.Log("INIT Firebase");
    }

    public void UploadGetDownLink(string name, byte[] data, Action<string> SendLink = null)
    {
        StorageReference fileRef = reference.Child(name);
        fileRef.PutBytesAsync(data).ContinueWithOnMainThread((Task<StorageMetadata> task) =>
        {
            if (task.IsFaulted || task.IsCanceled)
            {
                Debug.Log(task.Exception.ToString());
            }
            else
            {
                StorageMetadata metadata = task.Result;
                Debug.Log("Finished uploading");

                fileRef.GetDownloadUrlAsync().ContinueWithOnMainThread((Task<Uri> uriTask) =>
                {
                    string uri = uriTask.Result.ToString();
                    SendLink?.Invoke(uri);
                });
            }
        });
    }
}

여기서 GetDownloadUrlAsync()가 업로드파일의 download link를 받아오는 함수입니다.

다운링크가 받아와지면 uriTask의 결과에 저장되니까

해당 링크를 큐알코드 함수에 매개변수로 넣고 실행하면 됩니다!

오늘의 유니티 주식

심상치않다...

반응형