GURU_unity_1주차 C#스크립트 익히기 2

2023. 6. 29. 14:08SWU_프로젝트/GURU - unity

오늘은 아래와 같은 순서로 학습할 것이다.

1. for 반복문 
2. if 제어문
3. 배열 

 

 

1. for 반복문

반복문의 형태는 C와 유사하다.

for ( int i = 0; 초기식 , int < 5 조건식 , i++ 증가식) 

반복조건식이 참일 때만 처리를 한다.


for (i=0; i<5; i++)
1) i=0 : 변수 초기화
2) i<5 : i가 5미만이면 처리 실행
3) 처리 실행
4) i++ : i를 증가
5) 2번으로 되돌아오기

 

Console창에서 출력값을 보면 i=0부터 4까지 출력되는 것을 확인할 수있다.

위 반복문은 i = 0부터 10 보다 작을때까지 2 씩 증가한다는 뜻, 10 보다 작은 짝수만 출력하기위한 식이다.

 

 Console창을 보면 0보다 크고 10보다 작은 짝수만 출력된 것을 확인할 수 있다.

 

 이번에는 초기값을 0이 아닌 3으로 설정해보자.

Console 창에서 출력된 값을 확인할 수 있다. 3부터 출력되었다.

이번에는 증가가 아니고 감소식을 사용했다.

Console창을 통해 출력값을 보면 아까와는 다르게 점점 감소된 값을 출력한 것을 확인할 수 있다.

이번에는 반복문을 통한 합을 구해볼 것이다.

변수 sum을 선언하고 sum+= i 를 이용해 반복하여 값을 더하도록 식이 구성된다.

 

Console 창을 통해 출력값을 확인할 수있다.

 

2. if 제어문 

특정한 조건에 맞을 때만 스크립트를 실행하고 싶을때 사용할 수있다.

if (조건식)

{
       처리
}

조건식에 표시한 조건을 만족하면 {} 중괄호 블록에 담긴 처리를 실행한다.

조건을 만족시키지못하면 처리를 실행하지 않고 다음 스크립트로 넘어간다.

 

if 문의 조건식에는 관계연산자를 사용할 수 있는데, 종류는 다음과 같다.

연산자 비교 연산자 연산자 비교연산자
== 왼쪽과 오른쪽 값이 같으면 참 < 왼쪽이 오른쪽 값보다 작으면 참
!= 왼쪽과 오른쪽값이 다르면 참 >= 왼쪽이 오른쪽 값보다 크거나 같으면 참
> 왼쪽이 오른쪽 값보다 크면 참 <= 왼쪽이 오른쪽 값보다 작거나 같으면 참

 

 이제부터 본격적으로 제어문을 사용해보자.

 

  • 약초 수(herbNum)가 1일때 체력을 50 회복하는 스크립트다.
  • 13번째 줄의 조건식을 통해 hurbNum변수 값이 1인지 확인한다.
  • 12번째 줄에서 1을 대입함으로 13번재 줄의 조건식은 참이 된다.
  • 참일때  중괄호 블록 안에 담긴 처리가 실행되므로 Console 창을 통해 체력 50회복이 출력될 것이다.
  • 만약 이 조건식이 거짓이면 Console 창에 메시지를 출력하지 않고 종료된다.

Console창에 체력 50회복이 출력된 것을 확인할 수 있다.

 

if 문을 응용한 if~else문이 있다.

if (조건식)
{
      처리 A
}
else
{
      처리 B
}

활용되는 것을 아래의 예시로 확인해보자.

if ~ else문으로 구성되어있는 예시이다.

만약에(if) hp가 100보다 크거나 같다면 처리 A인 공격!을 Console창을 통해 출력할 것이다.

하지만 그게 아니라면(else) 처리 A를 출력하지 않고, 처리 B인 방어!를 출력할 것이다.

 

int hp = 200이므로 100보다 크다는 조건식에 만족해서 공격!을 출력하고 있다.

 

아래의 예시처럼 더 많은 종류의 경우의 수를 가지고 if 와 else를 활용할 수도 있다.

if (조건식a)
{
      처리 A
}
else if (조건식b)
{
      처리 B
}
.
.
.
else if (조건식y)
{
      처리 Y

}
else 
{
      처리 Z
  • 조건문의 흐름은 위에서 아래로 차례대로 검사해 조건을 만족하면 계속해서 중괄호 블록 안에 든 처리를 실행한다.
  • else if 문이나 else 문은 실행하지 않고 조건 분기를 종료한 후 그다음 스크립트를 처리한다.
  • 모든 조건식을 만족하지 않을 경우 마지막에 있는 else에 해당하는 중괄호 블록 안의 처리를 실행한다.
  • 앞의 if 문과 마지막 else 문 사이에 있는 else if 문은 몇개라도 상관이없고 마지막 else문은 생략가능하다.

 

예시를 살펴보자.

조건식에 따르면 만약(if) hp가 50보다 작거나 같다면 도망을 출력할 것이고 , 또는(else if) hp가 200보다 크거나 같다면 

공격! 을 출력할 것이다.

그게 아니라면(else) 방어!를 출력하도록 한다.

int hp=180 으로 초기 선언되었으므로,  hp=180은 200보다 같지 크지않기때문에 공격!으로 출력되지 않고,

50보다 같거나 작지 않기 때문에 도망도 아닌 방어! 로 출력되는 것을 확인 할 수있다. 

 

만약 hp값을 40으로 바꾼다면?

이처럼 도망이라고 Console창을 통해 출력된 것을 확인할 수 있다.

 

 

아래의 예시를 통해 변수의 범위를 살펴볼 것인데,

위에 그림에서 가리키다시피 y이름이 현재 컨텍스트에 없다라고 오류가 뜨는 것을 확인할 수 있다.

또한 Console창을 확인해보면 이렇게 오류가 떠있는데, 21번째 줄에서 사용하는 y변수가 선언되지 않아서 위험하다는 오류이다.

분명 16번째 줄에서 y변수를 제대로 선언햇음에도 이렇게 오류가 뜨는 것은 변수는 선언한 줄을 포함하는 중괄호 안에서만 사용되기 때문이고 이것을 변수의 범위라고 한다.

( y는 지역 변수이므로 중괄호가 끝남과 동시에 사라진다. ) 

void start()                                                                         
{
int x=1;
if(x==1)
{
      int y=2;
      Debug.Log(x);
      Debug.Log(y);
}
       Debug.Log(y);
}

x 변수의 범위는 위의 색상  이 가리키는 만큼이다.

 

void start()                                                                         
{
int x=1;
if(x==1)
{
      int y=2;
      Debug.Log(x);
      Debug.Log(y);
}
       Debug.Log(y);
}

y 변수의 범위는 위의 색상  이 가리키는 만큼이다.

 

이러한 이유를 y 변수를 사용하려면 ,

이렇게 위치를 바꿔서 선언하면 22번째 줄에 y를 오류없이 사용가능하다.

이렇게 말이다.!

 

 

3. 배열

이제 배열의 사용법을 배워보자.

  • 스크립트를 사용하다보면 여러가지 값(게임 순위와 점수 등)을 한꺼번에 다룰일이 생긴다.
  • 이때마다 변수를 다 만드는 것은 번거로운일이다.
  • 따라서 그럴 때 배열을 사용할 수 있다.
  • 굳이 따지자면 배열은 변수 상자를 가로로 이어붙인 길고 얇은 상자와 비슷하다고 보면된다.
  • int 가 정수형을 나타내는 것 처럼 int[]는 정수 배열형을 나타낸다.
  • 만약 상자 다섯개를 준비한다고 한다면, int[ ]points = new int[5]; 라고 씀으로써 int형 상자 다섯 개를 만들 수 있다.
  • 배열은 0부터 시작해서 n-1번째까지 요소를 가지고 있다. (요소 수= 상자 수)  

 

이제 배열을 사용하는 예시를 살펴보자.

말한대로 첫번째요소가 0번인 것에 주의하자.

12번째 줄에서 요소 수가 5인 int형 배열 array를 선언한다.

대괄호를 사용해 각 배열 요소에 숫자를 대입한다.

Debug.Log를 다섯번 쓰지않고 for 문을 사용해서 배열의 모든 요소를 출력할 수 있다.

하지만 이렇게 하나씩 쓰면 꽤나 번거롭기 때문에 , int [ ] array ={2,10,5,15,3}; 으로 쓰는것이 더 간단하다.

이렇게 출력되는 것을 확인 할 수있다.

 

이번에는 배열을 선언하고,

for 문을 사용해 배열의 요소를 첫번째부터 차례대로 확인하여 if조건에 맞는 값을 출력하는식이다.

 

 XX .length 를 쓰면 현재배열에 할당된 요소의 개수를 알수있다.(배열의 길이) 

조건에 맞게 90이상인 값만이 출력된 것을 확인할 수있다.

 

다음은 배열에 포함되는 값의 평균을 구하는 예시이다.

int형 변수 sum을 선언하고 for 문을 통해 반복해서 전체 배열요소의 값들을 더해 대입한다.

그리고 int형 변수 average를 선언하여 아까 배열의 요소를 모두더한 sum을 배열의 길이(요소의 개수) 로 나눈다.

이경우 정수형끼리의 연산이라 정수로 값이 도출되는데 원래대로라면 68이 아닌 68.4가 맞다 .

 

이를 해결하기 위한 두가지 방법을 살펴보자면,

소수점까지 출력하고 싶다면 정수끼리 나눗셈하는 것이므로 맨앞에 1.0f를 넣어주면 된다.

float average  = 1.0f*sum/point.Length ; 

하지만 더 정석적인 방법은 아래와 같이  type casting를 이용하는 것이 좋다.

float average  = (float)sum/point.Length ;

 

오늘까지는 C와 겹치는 부분이 많아서 수월하게 공부할 수 있었는데, 계속 수월했으면 좋겠다.!