Unity 개인 공부

Unity 개인 공부(2025-01-17)

kimjunki-8 2025. 1. 17. 23:41

유니티 화면은 대충 넘어가고, C-Script를 만드는 방법을 조금 알아보자

왼쪽 상단에 assets -> create -> MonoBeaviour선택 혹은 Project에 똑같은 방식으로 생성 
아님

이렇게 Empty C# 스크립트 만들기

 

그리고 안에 들어가서 대략 이렇게 되어있습니다.

여기서 Debug.Log('hello');를 썼습니다.

자,

Debug: 클래스이며, 콘솔에 메세지를 띄우기 위한것
Log(): Debug 클래스의 메서드이며, 메세지를 띄워줌
. : 클래스와 메서드간의 연결을 해줌
message: 보여주고 싶은 텍스트를 ""로 감싸서 보여줌.
참고로 C#은 코드가 끝났다는 것을 알려주기 위해 끝마다 ;을 붙여줘야 합니다.
+ ''을 못 쓰며 무조건 ""을 써야함
참고로 

이렇게 Debug 클래스 안에는 여러 메서드가 있기 때문에 여러개를 쓸 수 있습니다.
LogWarning -> 경고창 띄우기
LogError -> 에러창 띄우기

대충 이렇게 나옵니다.

그리고 저 글자를 원하는데로 읽기 편하게 만들 수 있습니다

이렇게 HTML 처럼 size=15를 넣고 닫아줍니다. 여기서 중요한 점은 size=15에서 size = 15처럼 띄어쓰기를 넣으면 작동을 안 합니다.

이렇게 커집니다.

공식문서:
https://docs.unity3d.com/Packages/com.unity.ugui@3.0/manual/StyledText.html

 

Rich Text | Unity UI | 3.0.0-exp.4

Rich Text The text for UI elements and text meshes can incorporate multiple font styles and sizes. Rich text is supported both for the UI System and the legacy GUI system. The Text, GUIStyle, GUIText and TextMesh classes have a Rich Text setting which inst

docs.unity3d.com

대충 요약하면
<b>: 텍스트를 굵게 표시합니다.
예: <b>굵은 텍스트</b>

<i>: 텍스트를 기울임꼴로 표시합니다.
예: <i>기울임 텍스트</i>

<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 앞에 []를 넣어서 배열이라는 것을 알려주고, 각 데이터를 {}로 감싼다.

부르는 건 파이썬하고 똑같다.

참고로 이 방법만 있는 것이 아닙니다.

string[] greeting = {"hi", "hello", "hola"};
Debug.Log(greeting[0])
Debug.Log(greeting[1])
Debug.Log(greeting[2])

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을 붙여주어야 합니다.

오늘은 여기까지.

'Unity 개인 공부' 카테고리의 다른 글

Unity 개인 공부(2025-01-22)  (2) 2025.01.22
Unity 개인 공부(2025-01-21)  (0) 2025.01.21
Unity 개인 공부(2025-01-20)  (0) 2025.01.20
Unity 개인 공부(2025-01-19)  (0) 2025.01.19
Unity 개인 공부(2025-01-18)  (0) 2025.01.18