[멋쟁이사자처럼부트캠프] 유니티 게임 개발 5기(6일차) - 캐릭터 움직이기 및 Git 잔디 심기 🌱
by 독기품은토끼2025. 5. 20.
✅ 오늘의 학습 목표 1. 캐릭터 움직임 성능 높이기 2. 작업한 내용 Git에 올리기 3. C# 기초 학습
1. 캐릭터 움직임 성능 높이기
1. DeltaTime 적용
// 기존 코드
this.transform.position = this.transform.position + Vector3.forward * moveSpeed;
// 변경 후 코드
transform.position += Vector3.forward * moveSpeed * Time.deltaTime;
기존 코드는 프레임에 따라 움직임 속도가 달라지는 문제가 있다.
3일차인가? 에 설명해 주신 예시를 다시 가져와 정리해 보자
30 FPS: 1초에 30번 실행되므로, 한 프레임당 시간(deltaTime)은 1/30초
100 FPS: 1초에 100번 실행되므로, 한 프레임당 시간(deltaTime)은 1/100초
두 경우 모두, 이동 속도 * deltaTime을 사용하면
30 * (1/30) = 1
100 * (1/100) = 1
결과적으로 1초 동안 이동한 거리는 동일해진다.
2. GetKeyDown 적용
키보드를 눌렀을 때 캐릭터가 움직이도록 설정한다.
[Key 함수]
함수명
실행 시점
용도 예시
특징
GetKeyDown
키를 누르는 순간
점프 시작, 메뉴 열기
한 번만 실행됨 (딱 한 프레임)
GetKeyUp
키를 놓는 순간
점프 종료, 공격 해제
한 번만 실행됨 (딱 한 프레임)
GetKey
키를 누르고 있는 동안
캐릭터 이동
누르고 있는 동안 매 프레임 실행
2. Github 연동
1. 클래식 토큰 생성
토큰은 특정 권한을 가진 사용자인지를 인증하기 위해 발급되는 키로, ID/PW 방식의 보안이 취약해서 생겨난 인증 방식이다.
2. 레포지토리 생성
Repository 이름 설정 : UnityTutorial2D
Ignore 설정 : Unity
저번 포스팅에서는 ignore 파일을 직접 다운 받아서 올렸지만, 이렇게 github에서 바로 넣을 수도 있다!
3. Github Desktop 연동
3.1. github desktop 열기
3.2. 저장소 연결
3.3. 생성된 git 관련 파일을 내 프로젝트 경로로 옮기기
내 프로젝트 경로는 Unity에서 Show Explorer 통해 확인할 수 있다.
4. Commit & Push
4.1. 추가나 수정된 파일을 커밋하기
'+' 표시로 커밋이 필요한 파일을 확인할 수 있다
커밋명은 필수로 작성되어야 하고, 아래 간단한 메모(?)를 추가할 수 있음
4.2. 푸쉬하기
히스토리를 통해서 내 작업 내용을 확인할 수 있고, Push가 완료되면 Fetch로 변경된다.
🥕 예행 작업 1. Scene 생성 (Memory Struct) 2. Script 생성 (구조체 예제 : Study_ClassStruct / 함수 예제 : Calculator)
1. 구조체 (Struct)
클래스와 매우 비슷하지만 메모리 상에 저장하는 방식이 다르다. (상속을 받지 못 함)
구분
클래스
구조체
형식
참조 형식 (Reference Type)
값 형식 (Value Type)
메모리
힙(Heap)에 저장, 변수는 참조 보관
스택(Stack)에 저장, 값 자체를 저장
생성 방법
new 키워드로 생성
new 없이도 생성 가능
상속
가능 (다형성 O)
불가능 (다형성 X)
기본값
null 가능
null 불가능
성능
크고 복잡한 데이터에 적합
작고 간단한 데이터에 적합
사용 예
캐릭터, 게임 매니저 등 복잡한 객체
위치, 색상 등 단순 데이터 표현
1.1. Class와 Struct의 차이점 : 코드
using UnityEditor.Rendering;
using UnityEngine;
public class Study_Class
{
public int number;
// 생성자 : 생성될 때 실행되는 함수
public Study_Class(int number)
{
this.number = number;
}
}
public struct Study_Struct
{
public int number;
// 생성자
public Study_Struct(int number)
{
this.number = number;
}
}
public class Study_ClassStruct : MonoBehaviour
{
void Start()
{
Debug.Log("클래스 ------------------------------");
Study_Class c1 = new Study_Class(10);
Study_Class c2 = c1;
Debug.Log($"c1 : {c1.number} \nc2 : {c2.number}");
c1.number = 100;
Debug.Log($"c1 : {c1.number} \nc2 : {c2.number}");
Debug.Log("구조체 ------------------------------");
Study_Struct s1 = new Study_Struct(10);
Study_Struct s2 = s1;
Debug.Log($"s1 : {s1.number} \ns2 : {s2.number}");
s1.number = 100;
Debug.Log($"s1 : {s1.number} \ns2 : {s2.number}");
}
}
[결과]
▶ 클래스 (Study_Class)
c1과 c2는 같은 객체를 참조
c1.number를 바꾸면 c2.number도 함께 바뀜
클래스는 참조 타입(Reference Type)이기 때문에, 같은 메모리 주소를 공유
▶ 구조체 (Study_Struct)
s1과 s2는 서로 독립적인 복사본
s1.number를 바꿔도 s2는 영향을 받지 않음
구조체는 값 타입(Value Type)이라, 값 자체가 복사됨
2. 함수 (Method)
using UnityEngine;
public class Calculator : MonoBehaviour
{
public int number1;
public int number2;
void Start()
{
int addResult = AddMethod();
int minusResult = MinusMethod();
Debug.Log($"더한 값 : {addResult} / 뺀 값 : {minusResult}");
}
// void = 반환 값이 없는 함수!!
int AddMethod()
{
int result = number1 + number2;
return result;
}
int MinusMethod()
{
int result = number1 - number2;
return result;
}
}
[결과]
멋사 부캠은 항상 16시부터 수업 종료까지 회고 시간을 갖는다.
흠.. 이 시간을 허투루 사용하고 싶지 않아서 금일 학습 내용을 블로그에 작성하게 되었는데,
항상 수업시간이나 쉬는 시간에 정리를 다 끝내버려서 이 시간이 다시 붕 뜨게 되었다!!
아직은 기초라 복습 내용을 또 듣자니 너무 루즈하고 어느 순간 멍 때리고 있는 나를 한 84번 본 듯^^;