🧩 툴 개발 일지

ChatGPT를 사용한 HTML 할인율 계산기 만들기

gameuiux 2024. 5. 20. 04:49
728x90
반응형

 

 

 

🤔 웹으로 유니티를 빌드할 수 있을까?

웹으로도 유니티를 사용한 프로젝트를 빌드해보고 싶어서,
그리고 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으로 불러오니 문제없이 동작하는 모습.

 

 

 

이후 같은 방식으로 할인율 계산기도 추가했다.

 

입력값 예외 처리도 알맞게 동작한다.

다만 한 가지 누락된 부분은 할인율 계산을 소수가 아닌 정수로 했다는 것... 수정은 나중에...

 

앞으로 이거저거 테스트해 볼 수 있을 것 같다.

728x90
반응형