유니티 공부.. 게임 구조와 프로그래밍
unity 유니티 공부 2024. 11. 11. 18:31 |
골드메탈 강의 중
게임은 연극 같다
알만툴에서도 캐릭터를 액터 라고 표현함
game 게임 - scene 장면 - object 오브젝트 - script 스크립트
배우와 소품 = 오브젝트
대본 = 스크립트
+
0 과 1 의 나열 | ↔ | java, Csharp 같은 언어 | ↔ | ai 챗봇 과 영어 같은 자연어 |
컴퓨터가 알아들을 수 있도록
언어를 이렇게 중간중간 해석하는 게 프로그래밍임
+
Csharp 에서는 마침표 대신 세미 콜론 땀표시로
문장을 마무리 한다
+
콘솔 디버그 창에서 글자 띄우는 법
+
변수 :
특정한 데이터를 저장하는 상자
내가 원하는대로 변하는 숫자
변수엔 4개 종류가 있다
int
float
string
bool
int | 123 | 단순한 숫자 |
float | 15.5f | 소수점까지 포함한 숫자형 데이터임 끝엔 알파벳f 를 꼭 붙임 |
string | "문자" | 따옴표 속에 글자를 입력함 |
bool true | true 또는 false | 둘 중 하나를 결정하는 데이터 |
+
플레이어레벨 변수를 콘솔디버그 창에서 알고 싶을 땐
Debug.Log("플레이어의 레벨은?");
Debug.Log(level);
+
우리는 1 2 3 ... 1 부터 시작하지만
프로그래밍에선 0 1 2 ... 0 부터 시작함
+
이런식으로 스크립트 내에서
사칙 연산 가능함
%는 퍼센테이지가 아니라,
나눗셈을 하고 남은 나머지 임.
이는 주로 다음 레벨까지의 경험치 를 표현할 때 씀
+
![]() |
![]() |
타이틀 칭호 표현법
중간 따옴표는 공백을 의
+
level 변수가 10 이상일 때
엔드튜토리얼의 값은 트루
디버그 로그에 true 로 출력
+
부등호
> 초과
< 미만
>= 이상
<= 이하
+
체력도 50이하, 마나도 20 이하면 배드컨디션임
bool 의 &&은 양쪽 둘다 true 값일 때를 의미함
|| 는 둘 중 하나만 true 값일 때를 의미
+
? A : B
는 트루가 A 펄스가 B 로 연되게 함
+
int float string bool new List 등
이런 고유 스크립트 용어는 내가 변수로 지정할 수 없으니 주의할 것
+
// 리스트 선언 및 초기화
List<string> names = new List<string>();
// 리스트에 요소 추가
names.Add("Alice");
names.Add("Bob");
names.Add("Charlie");
// 리스트의 크기 확인
Debug.Log("List Count: " + names.Count);
// Output: List Count: 3
// 리스트에서 요소 접근
Debug.Log("First Name: " + names[0]);
// Output: First Name: Alice
// 리스트의 요소 제거
names.Remove("Bob");
// 변경된 리스트 출력
foreach (string name in names)
{
Debug.Log(name);
}
// Output:
// Alice
// Charlie
List 는 유연하게 변화되는 상자
- Add(): 리스트에 요소를 추가합니다.
- Remove(): 리스트에서 특정 요소를 제거합니다.
- Count: 리스트의 요소 개수를 반환합니다.
- Contains(): 리스트에 특정 요소가 있는지 확인합니다.
- Clear(): 리스트의 모든 요소를 제거합니다.
파티 멤버나 인벤토리에 대해 쓰임
+
if 는 true 일 때만 중괄호 안의 로직 실행함
else 는 앞의 if 조건이 아닐 때 실행
else 값이 아무것도 없으면 else 는 통째로 빼도 무관함
+
true false 는 두 가지 값이다
나는 세 가지 값을 따지고 싶다
그러면 switch 를 이용한다
switch (해당변수)
case 값1 :
break;
case 값2 :
break;
case 값3 :
break;
default :
break;
이런식으로 쓴다
해당 변수의 값이 1일 땐 무표정이고
해당 변수의 값이 2일 땐 휘청거리고
해당 변수의 값이 3일 땐 누워있고
해당 변수의 값이 다 해당 안될 땐 "알 수 없는 상태입니다" 메시지 출력
이런걸 표현할 때 씀
+
위 사진속 슬라임, 사막뱀 처럼
같은 로직을 저렇게 붙여 써도 된다
슬라임이 나와도 "소형 몬스터가 출현!"
사막뱀이 나와도 "소형 몬스터가 출현!"
+
반복문
조건에 만족하면 로직을 반복하는 문구
while (조건)
조건이 트루일 때 로직을 반복 실행
반복은 break; 쓰면 멈춤
+
for (연산할 변수 ; 조건 ; 연산)
for는 변수를 연산하면서 로직을 반복실행함
예를 들어 붕대로 체력을 +1 씩 회복. 체력은 최대 +10까지 치료한다던가..
+
foreach : for의 그룹형 변수 탐색에 용이함
이 지역에 남은 몬스터들을 알려줘 할 때 라든가..
+
맨 앞쪽에 변수를 설정하는 걸 전역변수 라고 하는데,
이러면 아래 스크립트 문구 속 어느곳에서도 참조 가능하게 됨
+
함수 (메서드)
기능을 편리하게 사용하도록 구성된 영역
레시피 같은 것
start( )
update( )
같은 것도 함수임
return 값을 반환하는 것. 적용하는 것.
void ( ) 반환할 것이 없다는 의미
함수는 아직 잘 모르겠음
+
class : 하나의 사물과 대응하는 로직
유니티에선 하나의 파일은 하나의 클래스 가 담당하게 해놓음
인스턴스 :
미리 만들어 놓은 클래스를 변수 초기화해서 실체화
다른 스크립트 파일에서 저장된 값을
지금 스크립트 파일로 불러오는 개념
외부 스크립트에서도 쓸 수 있게하려면
private 가 아니라 public 으로 해 놔야 함
private는 빈칸으로 생략되어 표기되기도 함
타 스크립트에서 해당 값을 public 으로 바꿨더니 비주얼 스크립트 자동완성에 생긴다
+
MonoBehaviour 는 유니티의 기본 내장 템플릿임
이것저것 구현할 수 있게 만든 디폴트 스크립트임
유니티 공식에서 미리 정해놓은 로직은 다음과 같음
Start | 게임 오브젝트가 존재하기 시작할 때 호출 |
Update | 프레임마다 호출 |
FixedUpdate | 물리 타임스텝마다 호출 |
OnBecameVisible, OnBecameInvisible | 게임 오브젝트 렌더러가 카메라의 뷰에 들어오거나 나갈 때 호출 |
OnCollisionEnter, OnTriggerEnter | 물리 충돌 또는 트리거가 발생할 때 호출 |
OnDestroy | 게임 오브젝트가 파괴될 때 호출 |
수명 주기 함수 호출 순서
쓰임새 예시 :
FixedUpdate ( ) 로 썼더니 흔들림 버그가 있다면
LateUpdate ( ) 로 바꿔본다