본문 바로가기
수업 복습/유니티 복습 노트

[유니티] 유니티 수업 5, 6차시

by LimitLog 2021. 4. 15.

1. 계산기 만들기

Ui에서 버튼과 텍스트, 이미지 하나를 넣어 다음과 같은 계산기 모양의 인터페이스를 만든다.

그 다음 Calculator라는 C#스크립트 파일 하나를 만들고 빈 게임 오브젝트(CalculatorManager)에 넣어주자.

이하는 스크립트 전문이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
 
public class Calculator : MonoBehaviour
{
    public Text txt_sum; //계산기 상단 합을 출력하는 text 변수
    public Text txt_count; //계산기 하단 연산 횟수를 출력하는 text 변수
    private string strNumber=""//숫자를 입력받는 문자열
    private int nNumber_1 = 0//처음 입력된 숫자 혹은 연속 계산 시 앞까지 계산된 값
    private int nNumber_2 = 0//두 번째로 입력된 숫자 혹은 연속 계산 시 추가로 입력된 값
    private int nSum = 0//결과값(임시 저장용)
    private int count = 0//연산자가 몇 번 사용되었는지 카운트
    private string strCal=""//연산자를 입력받는 문자열
 
    // Start is called before the first frame update
    void Start()
    {
        
    }
 
    public void InputNumber(string strNum) //숫자를 입력받는 함수 , 인자를 문자열의 형태로 받아온다.
    {
        if (strNumber.Length < 9//Length -> 길이 구해줌
        {
            strNumber += strNum; //기존 문자열에 새로 받아온 문자(숫자)를 추가. 자릿수가 늘어날 수 있다.
            txt_sum.text = strNumber; //계산기 상단에 strNumber에 입력된 문자열을 갱신.
            if (strCal == "") { //부호를 입력받지 않은 경우(처음 수를 입력받을때)
                nSum = 0;
                nNumber_1 = int.Parse(strNumber);  //nNumber_1에 입력받아온 strNumber 문자열을 숫자로 형변환해 대입한다.
            } 
            else { //부호가 입력된 경우(처음 제외 이후 숫자를 입력받을 때)
                nNumber_2 = int.Parse(strNumber);
            }
        }
    }
 
    public void Equel() //계산하는 함수
    {
        switch (strCal) //저장된 부호에 따라 계산
        {
            case "+":
                nSum = nNumber_1 + nNumber_2;
                break;
            case "-":
                nSum = nNumber_1 - nNumber_2;
                break;
            case "*":
                nSum = nNumber_1 * nNumber_2;
                break;
            case "/":
                nSum = nNumber_1 / nNumber_2;
                break;
        }
        strNumber = ""//숫자 문자열을 비움.
        strCal = ""//부호 문자열을 비움.
        txt_sum.text = nSum.ToString();
        nNumber_1 = nSum; //계산 결과값을 nNumber_1에 대입해 앞까지 계산된 값을 저장.
        nNumber_2 = 0;
        count++//연산 횟수 카운트
    }
    public void clickEquels() { // = 버튼 눌렀을 때 호출
        Equel(); //결과 계산
        count = 0//결과값을 산출하고 연산자 사용 횟수를 초기화
    }
 
    public void Cal(string str) { //사칙연산 입력받는 함수 , 인자를 문자열의 형태로 받아온다.
        if (count == 0)
            count++//첫 연산시 이퀄 함수를 호출하지 않는다.
        else 
            Equel(); //이후부터는 이퀄 함수로 결과값을 산출하며 연속 계산
 
        switch (str) //받아온 문자열에 따라 strCal에 알맞은 부호 대입
        {
            case "+":
                strCal = "+";
                break;
            case "-":
                strCal = "-";
                break;
            case "*":
                strCal = "*";
                break;
            case "/":
                strCal = "/";
                break;
        }
        strNumber = ""//숫자를 입력받은 문자열 초기화
        txt_count.text = "총 " + (count) + " 번의 연산이 시행되었습니다.";
    }
 
    public void Clear() { //초기화하기 (C)
        strCal = "";
        strNumber = "";
        txt_sum.text = "0";
        nNumber_1 = 0;
        nNumber_2 = 0;
        nSum = 0;
        count = 0;
        txt_count.text = "총 " + (count) + " 번의 연산이 시행되었습니다.";
    }
 
    public void BackSpace() { //지우기 (<)
        if (strNumber.Length == 0//이미 길이가 0일경우 그냥 리턴(함수 종료)
            return;
 
        strNumber = strNumber.Remove(strNumber.Length - 11); //가장 최근에 입력받은 순서대로 문자열에서 한 자씩 지운다.
        if (strNumber.Length > 0//길이가 0보다 크면 저장되어있는 숫자 출력
        {
            txt_sum.text = strNumber;
        }
        else { //비어있으면 0 출력
            txt_sum.text = "0";
        }
    }
 
    // Update is called once per frame
    void Update()
    { //키보드로도 입력받을 수 있도록
        if (Input.GetKeyDown(KeyCode.Keypad0)) {
            InputNumber("0");
        }
        else if (Input.GetKeyDown(KeyCode.Keypad1)) {
            InputNumber("1");
        }
        else if (Input.GetKeyDown(KeyCode.Keypad2)) {
            InputNumber("2");
        }
        else if (Input.GetKeyDown(KeyCode.Keypad3)) {
            InputNumber("3");
        }
        else if (Input.GetKeyDown(KeyCode.Keypad4)) {
            InputNumber("4");
        }
        else if (Input.GetKeyDown(KeyCode.Keypad5)) {
            InputNumber("5");
        }
        else if (Input.GetKeyDown(KeyCode.Keypad6)) {
            InputNumber("6");
        }
        else if (Input.GetKeyDown(KeyCode.Keypad7)) {
            InputNumber("7");
        }
        else if (Input.GetKeyDown(KeyCode.Keypad8)) {
            InputNumber("8");
        }
        else if (Input.GetKeyDown(KeyCode.Keypad9)) {
            InputNumber("9");
        }
        else if (Input.GetKeyDown(KeyCode.Backspace))
        {
            BackSpace();
        }
        else if (Input.GetKeyDown(KeyCode.KeypadPlus))
        {
            Cal("+");
        }
        else if (Input.GetKeyDown(KeyCode.KeypadMinus))
        {
            Cal("-");
        }
        else if (Input.GetKeyDown(KeyCode.KeypadMultiply))
        {
            Cal("*");
        }
        else if (Input.GetKeyDown(KeyCode.Slash))
        {
            Cal("/");
        }
        else if (Input.GetKeyDown(KeyCode.KeypadEnter))
        {
            clickEquels();
        }
        else if (Input.GetKeyDown(KeyCode.Escape))
        {
            Clear();
        }
    }
}
cs

그리고 유니티로 돌아와 알맞은 인자를 넣어준다.

Txt_sum 자리에는 계산기 상단 텍스트 오브젝트를 넣어주고 Txt_count에는 계산기 하단 텍스트 오브젝트를 넣어준다.

이제 버튼이 눌릴 때마다 함수를 호출하도록 하자. 각 버튼의 On Click() 부분을 추가하고 CalculatorManager 오브젝트를 넣어주면

이렇게 아까 만든 함수들을 사용할 수 있을 것이다. 키패드 0~9 까지는 전부 숫자이니 InputNumber 함수를 호출해 알맞은 인자를 넣어주자.

0~9까지 반복 작업하면 된다.

부호는 부호를 입력받는 함수 Cal 에 알맞은 값을 넣어주면 된다.

나머지는 맞는 함수를 선택만 하면 된다.

"="
"C"
"<"

여기까지 잘 따라왔다면 계산기가 문제 없이 작동할 것이다.

댓글