Unity 기본1 - object에 script 붙이기, c# 기본 자료형, using
1. object에 script 붙이기
Hierarchy에서 create empty하면 Gameobject 생성
생성된 gameobject 클릭 후 inspector 창에서 add component - new script로 스크립트 생성하면,
클릭한 gameobject에 붙는 script가 자동 생성
혹은 project창에서 create - C# script로 스크립트를 만들 수 있다.
생성된 스크립트 파일을, gameobject를 선택한 다음 inspector창에 드래그해서 붙일 수 있다
2. Hello, World!를 출력하는 프로그램
오브젝트에 스크립트를 붙이고 나서, 스크립트를 더블클릭하면 비주얼 스튜디오로 연결됨
cs확장자는 c#파일을 나타낸다.
Start()함수는 스크립트 실행시 처음에 한번 실행되는 함수
Update()함수는 특정 시간이 지날때마다 계속해서 자동으로 불려지는 함수
Start()함수에 Debug.Log("Hello,World!");라고 써준다.
ctrl+s로 파일 세이브하면, unity에 자동으로 결과가 반영이 된다
상단에 > 버튼으로 실행을 하면 Scene에서 Game으로 자동으로 넘어가고
아래 프로젝트 창에서 Console창을 눌러보면, "Hello,World!"라고 찍힌다
3. C#에서 많이 쓰이는 자료형 5가지
변수 - 숫자 문자 등의 값을 저장할 수 있는 공간
자료형 - 어떤 종류의 값을 저장할 수 있는 가
C#은 파이썬과는 다르게 어떠한 변수를 만들때, 어떠한 자료를 저장할 것인지 지정해줘야한다.
int - 정수(10자리, -21억~21억정도)
유튜브에서 조회수는 int로 저장했는데 싸이의 강남스타일 조회수가 21억이 넘어가는 순간 오류가 났다고함
예) 0, 1, -123, 9076
long - 큰 정수(18자리)
예) 2898785077654321
float - 소수 포함(정밀도가 떨어짐, 느리지는 않음)
소수점 포함 6자리 넘는 숫자는 정확하다고 믿기 어렵지만 대부분 게임에서 무리없이 사용 가능
예) 3.14159
bool - 참,거짓
예) true, false
string - 문자열
큰따옴표로 둘러싸야함
예) "abc", "유니티 프로그래밍"
vs. char - 문자 하나
char은 작은따옴표로 둘러싸야함
큰따옴표로 둘러싸는 경우 에러난다
4. 변수를 선언하고 할당
C++ Java에서 했던거랑 똑같네
한줄 주석은 //
여러줄 주석은 /* */
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HelloWorld : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
//문장의 끝에는 ;으로 끝을 내야함
int x; //변수 선언, 자동으로 0이 들어감
int y = 5; //선언하면서 값을 할당
x = 1; //선언 후 할당
Debug.Log(x + y);
}
// Update is called once per frame
void Update()
{
}
}
실행하면 아래와 같이 6이 나온다
참고로 로그 누르면 아래에 자세한 로그가 찍히고
파란색 부분 누르면 어디서 출력된건지 에디터로 바로 옮겨줌
5. overflow
long a = 123456789012345;
long b = 2345678901;로 하고 a*b를 출력하면?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HelloWorld : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
long a = 123456789012345;
long b = 2345678901;
Debug.Log(a * b);
}
// Update is called once per frame
void Update()
{
}
}
양수와 양수를 곱했는데도 -5450041699955786739라는 음수를 출력함
long의 저장 범위를 넘어섰기 때문에, 어디 저장한것이 아니더라도, 출력만해도 이상한 값이 나옴
6. float형의 소수점 저장과 정밀도
소수를 저장할때는 뒤에 f를 붙여야함
float d = 12345.56677889f; 이런 식으로
소수점이 없는 정수는 f를 생략할 수 있는데, int값을 float로 암시적으로 변환하는 것
float는 소수점 7째자리까지를 저장한다
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HelloWorld : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
float c = 12345678901234567;
float d = 12345.56677889f;
Debug.Log(c + d);
}
// Update is called once per frame
void Update()
{
}
실제 출력시에는 1.234568E+16으로 출력하는데, E+16은 알겠지만 $10^{16}$이다
이와 관련된 사실로 c = 1234567891234567과 d = 12345678900000000에 대하여... 둘이 같은지 비교해보자.
==은 같냐 다르냐이고 ToString()은 string으로 바꾸는 거겠지
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HelloWorld : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
float c = 12345678901234567;
float e = 12345678900000000;
Debug.Log((c == e).ToString());
}
// Update is called once per frame
void Update()
{
}
}
실제로는 수가 서로 다른데 True라고 나온다
float가 큰 수를 저장할 수는 있지만, 정밀도가 높지는 않기 때문에 대충 앞자리만 비교한 다음
같다고 하는거
7. bool 자료형
옳으면 true, 거짓이면 false
근데 unity에 출력하면 True, False라고 출력됨
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HelloWorld : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
float c = 12345678901234567;
float e = 12345678900000000;
bool f = true;
bool g = (c == e); // 비교 식을 넣을 수 있다
Debug.Log(g);
}
// Update is called once per frame
void Update()
{
}
}
8. string 덧셈
두 string 값을 더하면, 그대로 붙여준다
참고로 파이썬은 안되는데 c#은 int + string하면 int를 알아서 string으로 인식해서 string 덧셈을 해준다
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HelloWorld : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
string h = "대혁";
string i = "이다";
Debug.Log(h + i); //두 string을 붙여서
}
// Update is called once per frame
void Update()
{
}
}
9. using
네임스페이스를 지정하면 해당 네임스페이스에 들어 있는 코드를 현재 스크립트로 불러옴
import 라이브러리 하듯이 라이브러리를 불러오는 키워드
Debug.Log의 Debug는 UnityEngine에서 가져온 것
'프로그래밍 > Unity&C#' 카테고리의 다른 글
Unity 기본6 - C#의 컬렉션 List, Dictionary (0) | 2024.04.20 |
---|---|
Unity 기본5 - C# 배열에 대해 (0) | 2024.04.19 |
Unity 기본4 - 반복문 while, for문 (0) | 2024.04.18 |
Unity 기본3 - C#의 if와 switch 제어문 (0) | 2024.04.17 |
Unity 기본2 - C#의 연산자들 (0) | 2024.04.17 |