태그된 제품에 대해 수수료를 받습니다.
🤔 웹으로 유니티를 빌드할 수 있을까?
웹으로도 유니티를 사용한 프로젝트를 빌드해보고 싶어서,
그리고 UI 포트폴리오를 웹에서 구현하고 싶어서 간단한 로직이 들어간 할인율 계산기를 만들었다.
(모바일은 타깃 디바이스가 여러가지이다 보니 생각보다 공수가 많이 들어간다.)
🤖 ChatGPT 사용하기
ChatGPT를 활용해보기로 했다.
C# 할인율 계산하는 스크립트 짜줘
using System;
namespace DiscountCalculator
{
class Program
{
static void Main(string[] args)
{
// 원래 가격을 입력받음
Console.Write("원래 가격을 입력하세요: ");
string originalPriceInput = Console.ReadLine();
decimal originalPrice;
// 입력된 원래 가격이 유효한지 확인
while (!decimal.TryParse(originalPriceInput, out originalPrice) || originalPrice < 0)
{
Console.Write("유효한 가격을 입력하세요: ");
originalPriceInput = Console.ReadLine();
}
// 할인율을 입력받음
Console.Write("할인율(%)을 입력하세요: ");
string discountRateInput = Console.ReadLine();
decimal discountRate;
// 입력된 할인율이 유효한지 확인
while (!decimal.TryParse(discountRateInput, out discountRate) || discountRate < 0 || discountRate > 100)
{
Console.Write("유효한 할인율(0-100%)을 입력하세요: ");
discountRateInput = Console.ReadLine();
}
// 최종 할인된 가격 계산
decimal discountAmount = originalPrice * (discountRate / 100);
decimal finalPrice = originalPrice - discountAmount;
// 결과 출력
Console.WriteLine($"할인된 금액: {discountAmount:C}");
Console.WriteLine($"최종 가격: {finalPrice:C}");
}
}
}
코드와 코드 설명까지 상세하게 나온다.
가져다가 프로젝트에 당장 사용하지 않더라도
원리를 이해하거나 기능을 학습하는 목적으로도 괜찮은 것 같다.
조금 더 구체적으로 요청해봤다.
C# 할인율 계산하는 스크립트 짜줘
-> C# 할인율 계산 스크립트를 유니티 InputField (TMP)로 입력받아와서 만들고싶어
using UnityEngine;
using TMPro;
public class DiscountCalculator : MonoBehaviour
{
public TMP_InputField originalPriceInput;
public TMP_InputField discountRateInput;
public TMP_Text resultText;
public void CalculateDiscount()
{
// 입력 값 검증
if (!decimal.TryParse(originalPriceInput.text, out decimal originalPrice) || originalPrice < 0)
{
resultText.text = "유효한 원래 가격을 입력하세요.";
return;
}
if (!decimal.TryParse(discountRateInput.text, out decimal discountRate) || discountRate < 0 || discountRate > 100)
{
resultText.text = "유효한 할인율(0-100%)을 입력하세요.";
return;
}
// 할인된 가격 계산
decimal discountAmount = originalPrice * (discountRate / 100);
decimal finalPrice = originalPrice - discountAmount;
// 결과 텍스트 업데이트
resultText.text = $"할인된 금액: {discountAmount:C}\n최종 가격: {finalPrice:C}";
}
}
씬을 구성하는 방법과 작성된 스크립트를 유니티에서 연결하는 방법까지 상세히 설명해준다.
그리고 연결하니 정말 오류하나 없이 동작했다...
멀지 않은 미래에 온라인 개발 강의 분야도 규모가 많이 줄거나 사라지지 않을까 싶은 생각이 들었다.
💡HTML 빌드 결과
유니티에서 UI를 조금 더 다듬고
ChatGPT로 여러가지 테스트를 해보면서 최종적으로 아래와 같은 스크립트를 만들었다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
// using System.Globalization;
public class DiscountCalculator : MonoBehaviour
{
public TMP_InputField originalPriceInput;
public TMP_InputField discountRateInput;
public TMP_Text resultText;
public TMP_InputField inputField;
private bool isFormatting;
// public TMP_InputField inputField2;
void Start()
{
// TMP_InputField가 제대로 할당되었는지 확인
if (inputField == null)
{
Debug.LogError("TMP_InputField가 할당되지 않았습니다.");
return;
}
inputField.onValueChanged.AddListener(FormatNumber);
}
void OnDestroy()
{
if (inputField != null)
{
inputField.onValueChanged.RemoveListener(FormatNumber);
}
}
/*
public void UpdateInputWithPercent()
{
// 입력된 값이 비어 있지 않은 경우에만 '%' 기호를 추가합니다.
if (!string.IsNullOrEmpty(inputField2.text))
{
// 입력된 값을 가져와서 끝에 '%' 기호를 추가한 후 다시 InputField에 설정합니다.
inputField2.text += "%";
}
else
{
inputField2.text = inputField2.text;
}
}
*/
void FormatNumber(string input)
{
if (isFormatting) return;
isFormatting = true;
// 현재 커서 위치를 저장합니다.
int cursorPosition = inputField.stringPosition;
// 소수점을 포함한 숫자만 남기고 나머지 문자는 제거합니다.
string numericString = input.Replace(",", "").Replace("$", "").Replace(" ", "");
// 유효한 숫자인지 확인합니다.
if (decimal.TryParse(numericString, out decimal number))
{
// 소수점 입력 여부에 따라 포맷팅을 달리합니다.
string formattedNumber;
if (input.Contains("."))
{
formattedNumber = number.ToString($"N2");
}
else
{
formattedNumber = number.ToString($"N0");
}
// 포맷된 문자열을 InputField에 설정합니다.
inputField.SetTextWithoutNotify(formattedNumber);
// 커서 위치를 업데이트합니다.
inputField.stringPosition = Mathf.Clamp(cursorPosition, 0, inputField.text.Length);
}
isFormatting = false;
}
public void CalculateDiscount()
{
// 입력 값 검증
if (!decimal.TryParse(originalPriceInput.text, out decimal originalPrice) || originalPrice < 0)
{
resultText.text = "유효한 원래 가격을 입력하세요.";
return;
}
if (!decimal.TryParse(discountRateInput.text, out decimal discountRate) || discountRate < 0 || discountRate > 100)
{
resultText.text = "유효한 할인율(0-100%)을 입력하세요.";
return;
}
// 할인된 가격 계산
decimal discountAmount = originalPrice * (discountRate / 100);
decimal finalPrice = originalPrice - discountAmount;
// 결과 텍스트 업데이트
resultText.text = $"할인된 금액: {discountAmount:C}\n최종 가격: {finalPrice:C}";
}
}
깃허브 저장소에 올리고 iframe으로 불러오니 문제없이 동작하는 모습.
이후 같은 방식으로 할인율 계산기도 추가했다.
입력값 예외 처리도 알맞게 동작한다.
다만 한 가지 누락된 부분은 할인율 계산을 소수가 아닌 정수로 했다는 것... 수정은 나중에...
앞으로 이거저거 테스트해 볼 수 있을 것 같다.
태그된 제품에 대해 수수료를 받습니다.