왼쪽 상단에 assets -> create -> MonoBeaviour선택 혹은 Project에 똑같은 방식으로 생성 아님
이렇게 Empty C# 스크립트 만들기
그리고 안에 들어가서 대략 이렇게 되어있습니다.
여기서 Debug.Log('hello');를 썼습니다.
자,
Debug: 클래스이며, 콘솔에 메세지를 띄우기 위한것 Log(): Debug 클래스의 메서드이며, 메세지를 띄워줌 . : 클래스와 메서드간의 연결을 해줌 message: 보여주고 싶은 텍스트를 ""로 감싸서 보여줌. 참고로 C#은 코드가 끝났다는 것을 알려주기 위해 끝마다 ;을 붙여줘야 합니다. + ''을 못 쓰며 무조건 ""을 써야함 참고로
이렇게 Debug 클래스 안에는 여러 메서드가 있기 때문에 여러개를 쓸 수 있습니다. LogWarning -> 경고창 띄우기 LogError -> 에러창 띄우기
대충 이렇게 나옵니다.
그리고 저 글자를 원하는데로 읽기 편하게 만들 수 있습니다
이렇게 HTML 처럼 size=15를 넣고 닫아줍니다. 여기서 중요한 점은 size=15에서 size = 15처럼 띄어쓰기를 넣으면 작동을 안 합니다.
<size>: 텍스트 크기를 픽셀 단위로 설정합니다. 예: <size=50>큰 텍스트</size> 주의: 크기를 너무 크게 설정하면 콘솔에서 줄 간격이 이상하게 보일 수 있습니다.
<color>: 텍스트 색상을 설정합니다. 16진수 값으로 색상 지정: <color=#ff0000ff>빨간 텍스트</color> 색상 이름으로 색상 지정: <color=cyan>시안 텍스트</color> 주의: 이름으로 지정할 경우 불투명도가 항상 최대입니다. <material>: 텍스트 메시에서 특정 소재(Material)를 적용합니다. 예: <material=2>특정 소재 텍스트</material> 텍스트 메시 전용.
<quad>: 텍스트 메시 안에 이미지를 삽입합니다. 매개변수로 이미지 높이와 잘라낼 사각형 영역을 지정합니다. 종료 태그가 없으며, <quad ... /> 형태로 사용됩니다. 텍스트 메시 전용.
여기서 보면 Start()와 Update()가 있다. start는 실행이 될 때 바로 실행이 되는것이고, update는 frame마다 실행되는 것이다.
Type: 이제 Type들을 보자 int -> 숫자형 데이터 float -> 소수자 숫자형 string -> 문자형 bool -> True or False 파이썬과 다를게 없다. 하지만 알아야 할 점은, 파이썬은 편하게 a = 5, b = 2.4라고 적을 수 있지만, C#에서는 int a = 5 float b = 2.4 처럼 앞에 어떤 타입인지 적어줘야 한다. 참고로 주석 처리는 #이 아닌 //이다
그룹형 변수: 파이썬에선 리스트라 생각하자.
string greeting = "hi", "hello", "hola"
이렇게 쓸 수 있을까? 파이써에선 []로 감쌌다면, 여기서는
string[] greeting = {"hi", "hello", "hola"};
이렇게 Type 앞에 []를 넣어서 배열이라는 것을 알려주고, 각 데이터를 {}로 감싼다.
1. int [] level = new int[3]; int []: int 형식의 배열을 선언하겠다는 의미입니다. 배열은 같은 데이터 형식의 여러 값을 저장할 수 있는 자료 구조입니다. level: 배열의 이름(변수)입니다. new int[3]: 크기가 3인 새로운 정수 배열을 생성합니다. new 키워드는 메모리 공간을 할당하고 객체(또는 배열)를 생성하는 역할을 합니다. [3]은 배열의 크기를 지정하며, 이 경우 정수 3개의 공간을 할당합니다. 배열의 각 요소는 기본값으로 초기화되며, int 배열의 기본값은 0입니다. 2. level[0] = 3; 배열의 첫 번째 요소(인덱스 0)에 값을 3으로 설정합니다. 배열은 0부터 시작하는 인덱스를 사용하므로 level[0]은 배열의 첫 번째 요소를 의미합니다. 3. level[1] = 4; 배열의 두 번째 요소(인덱스 1)에 값을 4로 설정합니다. 4. level[2] = 5; 배열의 세 번째 요소(인덱스 2)에 값을 5로 설정합니다.
new의 역할 new 키워드는 배열 또는 객체를 동적으로 생성할 때 사용됩니다. 이 과정에서 필요한 메모리가 할당되고 초기화됩니다. 예를 들어, new int[3]은 크기가 3인 배열을 생성하고, 배열의 각 요소를 정수형의 기본값인 0으로 초기화합니다.
즉, new는 앞의 값(type[크기] = int[3]) 만큼 동적으로 생성할 때, 사용됩니다. 그러면 그만큼 메모리가 할당되고 초기화가 됩니다. 그리고 그 안에 값을 하나씩 넣을 수 있습니다.
파이썬의 값을 바꿀 때 처럼 쓰신다고 생각하시면 편합니다.
그럼 이제 진짜 리스트를 봅시다. 파이썬은 편하게 a = [1,2,3,4]이렇게 리스트를 지정할 수 있지만, C#은 아닙니다...
List<int> nums = new List<int>();
nums.Add(2);
nums.Add(5);
대충 이런식.....참고로 리스트는 <>안에 어떤 타입의 리스트인지 지정해줘야 합니다. 그리고 파이썬에서 .append()를 했던것처럼 똑같이 여기서는 Add를 씁니다.
삭제할 때는 RemoveAt(삭제할 아이템의 위치) 예: nums.RemoveAt(0) -> 0번째의 숫자를 제거
연산자
int a = 5;
a = a + 3;
a = a / 2;
a = a * 2.1f;
파이썬이랑 매우 흡사합니다.
자 여기서 중요한개념 하나
int a = 5; // 변수 a를 int 타입으로 선언하고 5를 할당
a = a + 3; // 이미 int로 선언된 a에 3을 더한 값을 다시 저장
a = a / 2; // a를 2로 나눈 값을 다시 저장
a = a * 2.1f; // a에 2.1(float)을 곱한 값을 다시 저장
C와 같은 언어에서는 변수의 타입 선언은 한 번만 하면 됩니다. 이미 선언된 변수는 다시 선언하지 않고, 기존 변수에 값을 대입하거나 연산할 수 있습니다. 참고로 %은 나머지만 가져옵니다. 타입 선언은 초기 선언 시에만 필요: int a = 5;는 변수를 선언하고 타입을 명시적으로 지정하는 문장입니다. 이후에는 해당 변수가 int 타입임을 컴파일러가 알고 있으므로, 타입을 반복해서 선언할 필요가 없습니다.
값의 대입과 연산: 선언된 변수는 연산의 결과를 저장할 수 있습니다. 위의 예에서는 a에 새로운 값을 대입하는 방식으로 변수를 업데이트하고 있습니다.
타입 일치 문제: 마지막 줄에서 a = a * 2.1f;는 약간 특별한 상황입니다. 여기서 2.1f는 float 타입인데, a는 int 타입입니다. 이런 경우: C에서는 기본적으로 연산 결과를 저장할 때, 연산의 결과를 변수 타입에 맞게 변환합니다. float 값을 int에 저장하면 소수점이 버려져 정수 부분만 저장됩니다.
그럼 bool은 어떻게 쓸까?
int a = 10;
bool isTrue = a == 20;
Debug.Log(isTrue);
대충 이럴때... 파이썬에서는
a = 1
print(a == 2)
이렇게 정말 간단하다.
하.지.만 C#은 그렇게 친절하지 않다. 위에서 본 것과 같이. isTrue 그 자체가 True or False를 가진다. isTrue은 a == 20의 공식을 가진다. 하지만 a는 10이기에, False가 되는데, 그 값을 isTure가 가져간다.
여기서 갑작스럽지만 파이썬에서 f 방식을(f"")을 쓸 수 있을까? 쓸 수 있습니다. C#에서는 f가 아닌 $을 씁니다.
C#의 문자열 보간 사용법 문자열 보간은 $ 기호를 사용하여 문자열 안에 변수를 삽입합니다. 중괄호 {} 안에 변수를 넣거나 표현식을 작성할 수 있습니다.
int age = 25;
string name = "Alice";
// 문자열 보간
string message = $"My name is {name} and I am {age} years old.";
Console.WriteLine(message);
// 출력: My name is Alice and I am 25 years old.
표현식 사용 중괄호 안에 단순 변수뿐만 아니라 계산식이나 메서드 호출도 가능합니다.
int a = 5, b = 10;
Console.WriteLine($"The sum of {a} and {b} is {a + b}.");
// 출력: The sum of 5 and 10 is 15.
포맷 지정 C# 문자열 보간은 숫자나 날짜 등의 값을 포맷팅할 수도 있습니다.
double pi = 3.14159;
DateTime now = DateTime.Now;
Console.WriteLine($"Pi rounded to 2 decimal places: {pi:F2}");
Console.WriteLine($"Today's date: {now:yyyy-MM-dd}");
// 출력:
// Pi rounded to 2 decimal places: 3.14
// Today's date: 2025-01-17
부등호 <, >, <=, >= -> 이건 뭐 파이썬도 똑같으니.. 하지만 and, or 을 알아야 합니다. C#은 and, or이 아니라 다릅니다. && -> 파이썬의 and -> 두 값이 모두 True일 때 True 출력 이걸 다시 bool을 써서 True인지 False인지 알 수 있습니다 || -> (\\ -> shift 눌러서) 파이썬의 or -> 두 값중 하나만 True일 때 True 출력
삼항연산자
C#에서는 삼항연산자라는 개념이 있습니다. 쉽게 말하면 파이썬에서 if 조건 else 조건 이거라고 생각하시면 편합니다. ? A : B -> True일때 A, False일때 B를 실행시킵니다.
파이썬에서는 If True: A else: B라고 생각하시면 편합니다. 예제를 보면
int c = 5;
int b = 20;
bool isFalse = b > c || c < b;
string conclusion = isFalse ? "암튼 맞음" : "아님";
Debug.Log(conclusion);
첫번째로 bool isFalse에는 b>c -> False c>b -> True || -> or 즉, 둘 중 하나라도 맞기에 True가 들어가고, conclusion은 isFalse ? "암튼 맞음" : "아님" -> 즉 True이기에 "암튼 맞음"이 실행이 되면서, 그 "암튼 맞음"이 conclusion 안으로 들어가게 됩니다. 여기서 중요한 점은 들어가는 값이 string이기 때문에 앞에 string을 붙여주어야 합니다.