* 해당 글은 유니티 게임 개발 수업 후 정리한 글입니다
https://bootcamp.likelion.net/school/kdt-ugm-5th
유니티 게임 개발 5기 : 멋사 부트캠프
개발부터 출시까지! 나만의 게임을 세상에 선보이는 유니티 부트캠프
bootcamp.likelion.net
2025.05.20 (화)
* Start()
객체가 생성될 때 딱 1번 실행되는 이벤트 함수
* Update()
매프래임 마다 실행되는 이벤트 함수
* 캐릭터 움직이기
using UnityEngine;
public class Movement : MonoBehaviour
{
private float moveSpeed = 5.0f;
private void Start()
{
transform.position = new Vector3(0, 0, 0);
}
private void Update()
{
// Input System (Old-Legacy)
// 입력값에 대한 약속된 시스템
// if (Input.GetKey(KeyCode.W))
// transform.position += Vector3.forward * (moveSpeed * Time.deltaTime);
//
// if (Input.GetKey(KeyCode.S))
// transform.position += Vector3.back * (moveSpeed * Time.deltaTime);
//
// if (Input.GetKey(KeyCode.A))
// transform.position += Vector3.left * (moveSpeed * Time.deltaTime);
//
// if (Input.GetKey(KeyCode.D))
// transform.position += Vector3.right * (moveSpeed * Time.deltaTime);
// 부드럽게 증감하는 값
// float horizontal = Input.GetAxis("Horizontal"); // X
// float vertical = Input.GetAxis("Vertical"); // Z
// 딱 떨어지는 값
float horizontal = Input.GetAxisRaw("Horizontal"); // X
float vertical = Input.GetAxisRaw("Vertical"); // Z
Vector3 direction = new Vector3(horizontal, 0, vertical);
//Debug.Log($"현재 입력 : {direction}");
transform.position += direction * moveSpeed * Time.deltaTime;
}
}
* 값 타입(Value Type)
스택(stack) 영역에 저장
값을 직접 저장
대입 시 값 복사
서로 독립적인 데이터가 됨
* 참조 타입(Reference Type)
힙(heap) 영역에 실제 데이터 저장, 스택에는 참조(주소) 저장
대입 시 참조 복사가 일어남
하나의 데이터를 여러 변수가 공유
2022.05.21 (수)
* 수업시간에 추천해주신 영상
https://www.youtube.com/watch?v=PAyyECsZ_Rs
https://www.youtube.com/watch?v=U4MyjA16hgY
https://www.youtube.com/watch?v=aTw7bt93Bs4
* Asset
유니티에서 사용하는 리소스의 단위
2025.05.22 (목)
* 게임 오브젝트를 찾는 법
(1) 이름으로 찾기
▼ 오브젝트 이름 문자열로 GameObject를 찾음 : 이름이 중복될 경우, 첫 번째로 찾은 오브젝트만 반환
GameObject obj = GameObject.Find("오브젝트이름");
(2) tag로 찾기
태그를 사전에 등록해두어야 함
▼ 태그로 지정된 첫 번째 오브젝트만 반환
GameObject obj = GameObject.FindGameObjectWithTag("태그 이름");
▼ 태그로 지정된 모든 오브젝트를 반환
GameObject[] objs = GameObject.FindGameObjectsWithTag("태그 이름");
* Tag : 게임 오브젝트의 별명, Layer : 게임 오브젝트의 소속
* GameObject의 비활성화 - gameObject.SetActive(false) : 전체 멈춤 + 자식 포함
게임 오브젝트 자체를 비활성화
오브젝트와 모든 컨포넌트가 작동을 멈춤
모든 이벤트 함수도 더 이상 실행되지 않음
자식 오브젝트들도 함께 비활성화
Hierarchy 창에서 회색으로 표시
* MeshRenderer의 비활성화 - GetComponent<MeshRenderer>().enabled = false : 렌더링만 OFF + 로직 그대로
렌더링만 비활성화
화면에는 보이지 않지만 로직은 그대로 작동함
모든 이벤트 함수는 계속 실행됨
* AddComponent<T>()
기존 게임 오브젝트에 새 컨포넌트를 동적으로 추가
타입은 제네릭 형식으로 전달
* GetComponent<T>()
해당 게임 오브젝트에 이미 존재하는 컨포넌트를 가져옴
없으면 null 반환
* Instantiate()
프리팹 또는 기존 오브젝트를 복제해서 새 인스턴스를 생성
일반적인으로 오브젝트 스폰이나 풀링 시스템에서 사용
* 즉시 파괴
오브젝트를 즉시 메모리에서 제거
DestroyImmediate(gameObject);
* 지연 파괴 기능
지정한 오브젝트를 한 프레임 후 또는 지정 시간 이후에 파괴
Destroy(gameObject); // 한 프레임 후 파괴
Destroy(gameObject, 3f); // 3초 후 파괴
* OnDestroy()
게임 오브젝트 또는 컨포넌트가 파괴될 때, 자동으로 호출하는 이벤트 함수
* Edit > Project > Settings... > Input Manager
Legacy Input System에서는 Input.GetButton("Jump")처럼 문자열 이름으로 키 입력을 처리한다
이 방식은 프로젝트의 설정의 Input Manager에서
미리 정의한 축(axis) 또는 버튼(button) 이름을 코드에서 직접 문자열로 참조하는 방식이다
using UnityEngine;
public class Movement : MonoBehaviour
{
public float moveSpeed = 5f;
void Update()
{
// 부드럽게 증감하는 값
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
// // 딱 떨어지는 값
// float horizontal = Input.GetAxisRaw("Horizontal");
// float vertical = Input.GetAxisRaw("Vertical");
Vector3 direction = new Vector3(horizontal, 0, vertical);
Debug.Log($"현재 입력 : {direction}");
transform.position += direction * moveSpeed * Time.deltaTime;
}
}
2025.05.23 (금)
* 파이(π) : 무리수
원의 둘레
지름이 1일 때, 둘레는 약 3.141591... (즉, 파이)
* 디그리(Degree, 도)
일반적으로 각도를 표현할 때 사용하는 단위로, ° 기호를 사용
유니티에서는 Transform 회전값이나 Inspector 상 각도 입력 시 기본적으로 '도' 단위를 사용
* 라디안(Radian)
호도법에서 사용하는 각도 단위로
호의 길이 / 반지름 길이 = 중심각(라디안)으로 정의
* 호도법(radian)
각도를 호의 길이와 반지름의 비율로 표현하는 방식
반지름과 호의 길이가 같을 때, 중심각을 1 라디안으로 정의
π 라디안 = 180도, 1 라디안 ≈ 57.2958도
2π 라디안 = 360도 (원 1바퀴)
https://www.youtube.com/watch?v=UXflutSHp9E
* 삼각비(Trigonometric Ratio)
직각삼각형에서 각을 기준으로 두 변의 길이 비율을 정의한 값으로,
대표적으로 사인(sin), 코사인(cos), 탄젠트(tan)가 있다
* 내적(Dot Product)
두 벡터의 방향이 얼마나 유사한지(같은 방향인지)를 나타내는 연산
* 외적(Cross Product)
두 백터에 수직인 방향의 새로운 백터를 만들어내는 연산
https://www.youtube.com/watch?v=4-76jesTq2I
* 벡터의 내적을 활용한 시야각 연산과 몬스터 AI의 FSM(Finite State Machine)
내적(Dot Product)을 이용하면,
몬스터가 바라보는 방향과 플레이어 방향 백터 사이의 각도를 계산할 수 있다
이를 통해 플레이어가 시야 범위(FOV) 안에 있는지 여부를 판단할 수 있다
FSM(Finite State Machine)
몬스터가 Idle, Chase, Attack 등의 상태(state)를 가지며,
특정 조건에 따라 상태 전이(state transition)가 발생하는 구조
* Transform.LookAt 함수
게임 오브젝트가 지정된 대상 방향을 바라보도록 회전시키는 함수
주로 적 캐릭터가 플레이어를 바라보게 할 때 사용한다
private void Update()
{
// 부드럽게 증감하는 값
float horizontal = Input.GetAxis("Horizontal"); // X
float vertical = Input.GetAxis("Vertical"); // Z
// 크기(거리) 없이 방향 정보만 담고 있는 값
Vector3 direction = new Vector3(horizontal, 0, vertical);
//Debug.Log($"현재 입력 : {direction}");
// 방향 벡터에 속도와 시간을 곱해서 위치 이동
// 방향(direction)
// 속도(moveSpeed) * 시간(Time.deltaTime) = 위치
transform.position += direction * moveSpeed * Time.deltaTime;
// 백터는 방향과 크기를 함께 가진 값으로
// 위치(transform.position) * 방향(direction) = 최종 위치 백터
// LookAt 함수를 통해 해당 방향으로 오브젝트가 바라보도록 회전 처리
transform.LookAt(transform.position + direction);
}
* Transform.RotateAround 함수
게임 오브젝트가 지정된 중심점과 축을 기준으로 회전하도록 만드는 함수
주로 카메라가 대상 주변을 도는 동작, 궤도 운동을 구현할 때 사용한다
'게임프로그래밍 > Unity_C#' 카테고리의 다른 글
[멋쟁이사자처럼부트캠프] 유니티 게임 개발 5기(2025.05.26-2025.05.28) (0) | 2025.05.28 |
---|---|
[MMORPG 게임 개발(C#, Unity)] Part 4. 멀티스레드 프로그래밍 (0) | 2025.05.26 |
[멋쟁이사자처럼부트캠프] 유니티 게임 개발 5기(2025.05.15-2025.05.19) (0) | 2025.05.19 |
[MMORPG 게임 개발(C#, Unity)] Part 4. 개론 (0) | 2025.05.17 |
[MMORPG 게임 개발(C#, Unity)] Part 3. 미니 RPG: 에러 해결 과정 메모(64-마지막 강의) (0) | 2025.05.16 |