Files
AnimalDictionary/Assets/Editor/QRCodeGenerator.cs
T

100 lines
2.4 KiB
C#
Raw Normal View History

2026-05-07 16:37:02 +09:00
using UnityEngine;
using UnityEditor;
using ZXing;
using ZXing.QrCode;
using System.IO;
public class QRCodeGenerator : EditorWindow
{
// 입력 필드
string animalName = "";
int qrSize = 256;
string savePath = "Assets/QRCodes";
// 미리보기 텍스처
Texture2D previewTex;
[MenuItem("Tools/QR Code Generator")]
public static void ShowWindow()
{
GetWindow<QRCodeGenerator>("QR Code Generator");
}
void OnGUI()
{
GUILayout.Label("QR Code Generator", EditorStyles.boldLabel);
GUILayout.Space(10);
// 동물 이름 입력
animalName = EditorGUILayout.TextField("Animal Name", animalName);
// QR 사이즈
qrSize = EditorGUILayout.IntField("QR Size", qrSize);
// 저장 경로
savePath = EditorGUILayout.TextField("Save Path", savePath);
GUILayout.Space(10);
// 미리보기 생성
if (GUILayout.Button("Preview"))
{
if (!string.IsNullOrEmpty(animalName))
previewTex = GenerateQR(animalName, qrSize);
}
// PNG 저장
if (GUILayout.Button("Generate & Save"))
{
if (!string.IsNullOrEmpty(animalName))
SaveQR(animalName);
}
GUILayout.Space(10);
// 미리보기 표시
if (previewTex != null)
{
GUILayout.Label("Preview:");
GUILayout.Label(previewTex, GUILayout.Width(256), GUILayout.Height(256));
}
}
// QR Texture2D 생성
Texture2D GenerateQR(string text, int size)
{
var writer = new BarcodeWriter
{
Format = BarcodeFormat.QR_CODE,
Options = new QrCodeEncodingOptions
{
Width = size,
Height = size,
Margin = 1
}
};
var pixels = writer.Write(text);
var tex = new Texture2D(size, size);
tex.SetPixels32(pixels);
tex.Apply();
return tex;
}
// PNG 저장
void SaveQR(string text)
{
if (!Directory.Exists(savePath))
Directory.CreateDirectory(savePath);
var tex = GenerateQR(text, qrSize);
var bytes = tex.EncodeToPNG();
var path = $"{savePath}/{text}_QR.png";
File.WriteAllBytes(path, bytes);
AssetDatabase.Refresh();
Debug.Log($"QR 저장 완료: {path}");
previewTex = tex;
}
}