본문 바로가기

IT/유니티

1. 유니티 교육 (C++교육)




project

창고같은곳


hierarchy

창고에서 필요한것을 빼내서 쓴다.


console

에러가 나면 메세지를 출력한다


inspector

체크박스는 왠만하면 건들지 않는다. 퍼포먼스랑 관련이 있다.


유니티 코딩툴 정하기

edit에서 preference클릭후 external script editor에서 설정한다.




1. C++기본


//라이브러리파일을 가져옴.(미리 만들어놓은 코드)

//stdio.h 파일안에는 printf 라는 명령어가 있음.(화면출력담당)

#include<stdio.h>


//컨트롤F5 실행시키면 main을 찾아서 실행시킨다.

//c언어는 대소문자를 구분한다.

void main(void) 

{

/*

//저장소(변수)= 숫자

int keyboard = 0;


printf("임의의 숫자를 입력해주세요:");


//키보드로 입력받아서 저장하는 명령어

scanf("%d", &keyboard);


//변수로 저장된 숫자를 출력해줍니다.

printf("입력한 숫자는 %d입니다.\n", keyboard);

*/


////////////////////정수형///////////////////////////////////////////////////


//정수형 숫자2개를 저장할곳

int num1 = 0;

int num2 = 0;

int sum = 0;

//숫자2개를 저장한다.

printf("첫번째 정수형 숫자를 입력해주세요:");

scanf("%d", &num1);

printf("두번째 정수형 숫자를 입력해주세요:");

scanf("%d", &num2);


//저장된 숫자를 더한다.

sum = num1 + num2;


//저장된 숫자를 출력한다.

printf("입력한 숫자의 합은 %d입니다.\n", sum);



////////////////////실수형///////////////////////////////////////////////////


//num1은 float이고, 123.45는 double이다. 캐스팅에러

//그래서 반드시 숫자 마지막에 f를 입력

//실수형 숫자2개를 저장할곳

float _num1 = 123.45f;

float _num2 = 0;

float _sum = 0;


//숫자2개를 저장한다.

printf("첫번째 실수형 숫자를 입력해주세요:");

scanf("%f", &_num1);

printf("두번째 실수형 숫자를 입력해주세요:");

scanf("%f", &_num2);


//저장된 숫자를 더한다.

_sum = _num1 + _num2;


//저장된 숫자를 출력한다.

printf("입력한 숫자의 합은 %.3f입니다.\n", _sum);


//출력을 유니티용으로 변환해보면 다음과 같다.

//Debug.Log("더한것은" + sum + "입니다.");



////////////////////나눗셈과 반올림값처리///////////////////////////////////////////////////

float __num1;

float __num2;

float __divide;


__num1 = 7.0f;

__num2 = 2.0f;

__divide = __num1 / __num2;


printf("나눈값은 %.2f 입니다.\n", __divide);

printf("나눈값의 반올림값은 %.0f 입니다.\n", __divide);


}




2. if문



#include<stdio.h>


void main(void)

{

//국어, 영어, 수학 점수를 저장할곳 (정수)

int korean, english, math;


//총점을 저장할곳 (정수)

int sum;


//평균을 저장할곳 (실수)

float avg;


int isExit = 0;


while (isExit == 0) {

//국어, 영어, 수학점수를 저장함

printf("국어점수를 입력해주세요:");

scanf("%d", &korean);


printf("영어점수를 입력해주세요:");

scanf("%d", &english);


printf("수학점수를 입력해주세요:");

scanf("%d", &math);


//한번에도 입력받을수 있다.

//scanf("%d %d %d", &korean, &english, &math);


//총점을 구해서 저장함

sum = korean + english + math;


//총점을 3으로 나눈결과를 평균에 저장함

//3으로 나누면 소숫점값이 없어지므로, 3.0으로 나누어야 소수점이하값을 얻을수 있다.

//아니면 강제 형변화을 시켜준다.

avg = (float)sum / 3.0f;

//avg = sum / 3.0f;


//평균점수를 출력한다.

printf("\n당신의 총점은 %d이고, \n평균점수는 %.1f입니다.\n\n", sum, avg);


//평균점수가 80이상인가? 그러면 합격이다.

//같다(==), 같지않다(!=)

//국어점수가 50점이상, 영어점수가 50점이상, 수학점수가 20점이상이면 합격

//우선순위 문제때문에 버그가 생기면 거의 잡을수 없기때문에 괄호를 잘 사용해야한다.

//불편하지만 말이야..ㅠㅠ

//==(같다라는 의미) =(한개일때는 입력을 의미한다)

if ((korean >= 50) && (english >= 50) && (math >= 20)) {


if (avg >= 80) {

//조건이 ok일때

printf("축하합니다. 당신은 합격입니다.");

}

else {

//조건이 no일때

printf("안타깝네요. 불합격입니다.");

}


}

else {

printf("평균점수와 상관없이 과락입니다.");

}


printf("\n\n");


printf("다시 하시겠습니까?(y:0/n:1)");

scanf("%d", &isExit);

}


}



2. 유니티에서 스크립트 만들고 넣어보기


애셋에 오른쪽 버튼을 누르면 스크립트를 만들수 있다.

이 만든 스크립트는 컴포넌트 추가에서 추가시킬수도 있고,

그냥 그래그해서 오브젝트에 넣어줄수도 있다.


모든 스크립트는 start와 update를 가지고 있다.


위에서 연습한 코드를 유니티로 넣으면 다음과 같다.


using UnityEngine;

using System.Collections;


public class firstScript : MonoBehaviour {


int count;


// Use this for initialization

void Start () {

//Debug.Log ("I am Unity");


int korean, english, math, sum;

float avg;

korean = 100;

english = 50;

math = 80;


sum = korean + english + math;

avg = (float)sum / 3.0f;


//F5는 소숫점 자리수를 지시한다.

Debug.Log ("총합은 " + sum + "평균은 " + avg.ToString("F5") + "입니다.");



if ((korean >= 50) && (english >= 50) && (math >= 20) && (avg >= 50)) {

Debug.Log ("합격하셨습니다.");

} else {

Debug.Log ("불합격하셨습니다.");

}

count = 0;




}

// Update is called once per frame

void Update () {

//++count;

//Debug.Log (count);

}



}


이식하면서 포기한것들은 입력기능과 반올림기능이다.
반올림기능은 c#에서는 약간 힘듬
출력명령어가 prinf에서 debug.log로 변환
변수의 타입은 그대로 사용할수 있다.
숫자계산시 형변환을 신경써주어야 한다.(정수와  실수)



IF문을 다음과 같이 사용하면 게임에 적용할수 있을것이다.

if(아이템은 반지인가?) {그러면 저항력 증가}
else if(아이템은 팔찌인가?) {그러면 공격력 증가}
else if(아이템은 목걸이인가?) {그러면 속도력 증가}
else {암것도 없으면 땡!} 





4. for문


비쥬얼 C++로 작성하면 다음과 같다.


#include<stdio.h>


void main(void)

{

int num = 0;


//num이 1부터 시작해서 3이하일때까지 반복문이 실행된다.

//증가시키고 싶을때는 num++

//감소시키고 싶을때는 num--

//초기값과 목표값 설정을 잘해야 한다. 

//등호를 항상 신경써서 버그가 생기지 않도록 하자

for (num = 1; num <= 100; num++) {

//반복할때 할것들

printf("%d ", num);

}

while (num >= 0) {

num--;


//반복할때 할것들

printf("%d ", num);

}

}



이것을 유니티 c#코드로 변환하면 다음과 같다.


using UnityEngine;

using System.Collections;


public class firstScript : MonoBehaviour {


int count;



// Use this for initialization

void Start () {

//Debug.Log ("I am Unity");


int korean, english, math, sum;

float avg;

korean = 100;

english = 50;

math = 80;


sum = korean + english + math;

avg = (float)sum / 3.0f;


Debug.Log ("총합은 " + sum + "평균은 " + avg.ToString("F5") + "입니다.");



if ((korean >= 50) && (english >= 50) && (math >= 20) && (avg >= 50)) {

Debug.Log ("합격하셨습니다.");

} else {

Debug.Log ("불합격하셨습니다.");

}

count = 0;


int num = 0;


for (num = 100; num > 0; num--) {

Debug.Log (num);

}


while(num < 100){

num++;

Debug.Log (num);

}



}

// Update is called once per frame

void Update () {

}

}



시작값과 마지막 값을 입력받아서 루프문을 구성해보자

#include<stdio.h>

void main(void)
{
//두개의 숫자를 입력할수 있게 해준다.
//첫번째 숫자는 시작값, 두번째는 종료값이다.

int start, last;

printf("시작값을 입력해주세요:");
scanf("%d", &start);

printf("마지막값을 입력해주세요:");
scanf("%d", &last);

for (int i = start; i <= last; i++) {
printf("%d", i);
}
}