[TWIL] 멋쟁이사자처럼 부트캠프 2

용준·2024년 9월 30일

Study

목록 보기
15/22

이론 복습

ctrl +k, ctrl + c : // 주석처리
ctrl +k, ctrl + u : // 주석처리 해제
ctrl + shift + / : /**/주석처리
ctrl + R + R : VS에서 변수명 일괄수정

Tiled, LDtk 타일 게임 개발 도움 툴
Twine 인터렉티브 스토리 기획 툴
itch.io 스팀 외 게임들도 존재하는 인디게임 사이트
aseprite 도트 게임 제작 시 도움되는 툴

List, Dictionary (Dictionary로 foreach사용시 변수는 KeyValuePair)
함수, enum, struct
객체, class, 인스턴스, 생성자, 상속과 관련하여 진행

ref 매개변수, out 매개변수
ref는 초기화가 된 변수를 넘겨야 함, 함수 내 값 변경 가능, 꼭 바꿀 필요 없음
out은 초기화 안된 변수여도 됨, 함수 내 값 변경 가능, 꼭 바꿔야 함

type casting / as 차이 - error 발생 / null 값 대입
scope 유효범위
예약어(public, private, protected), 캡슐화, getter, setter

override - virtual/new
overload
부모 클래스에서 virtual 사용 시 자식 클래스에서 override, 미 사용 시 new 사용(override의 비슷한 일을 함)

abstract 추상화
interface
멤버변수 X
메소드 정의 X 선언만 존재 (존재하기로 약속한 것)
static

decimal 자료형 (소숫점 사용 시 m 붙여줘야함) : 돈 계산 시 유용하게 사용 (게임에서는 속도를 위해 float을 대부분 사용)

Trim() string 값에서 앞 뒤의 스페이스를 제거한 후 출력

Pascal Case : CriticalDamageRange
Camel Case : criticalDamageRange

같은 클래스의 인스턴스끼리 private 변수 접근 가능

class 앞 partial 붙으면 한 클래스를 다른 파일에 나눠서 선언, 정의 가능

예외 처리 try catch, exception

struct는 상속 개념이 없음
struct를 새 struct에 대입하면 내용을 복사하여 새 struct를 생성함
class는 새 class에 대입하면 객체 자체를 넘겨 내용을 공유함, 작동방식이 다름

렌더링 파이프 라인
built-in : 편하고 쉬운 것
SRP

  • URP(LWRP) : 가벼운게임, 모바일 게임
  • HDRP : 3D, 화려한게임, AAA게임

기본적으로 상속받은 자식 클래스는 부모 클래스의 기본 생성자를 따르는데, 이때 부모 클래스가 파라미터가 있는 생성자로 대체했기에 자식 클래스는 기본 생성자가 없기에 부모 클래스나 자식 클래스에 파라미터가 없는 기본 생성자를 만들지 않는다면 에러가 발생할 수 있음

자식 클래스가 생성자를 만들 때 base가 붙지 않으면 암시적으로 부모 클래스의 파라미터 없는 기본 생성자를 호출하기 때문


브레이크 포인트

멈추고 싶은 라인에 F9로 브레이크 포인트를 걸어준다.

유니티에 연결 후

게임을 플레이해서 오류가 있는 부분을 재현하면 노란색으로 하이라이트가 된다.

하이라이트에 마우스를 대면 LifeDisPlayerInstance가 null이므로 LifeDisPlayIntance 할당을 제대로 안해줬구나 라고 유추할 수 있다.

그 외 관련 변수의 상태나 어디로부터 이 함수가 호출되었는지 호출 스택 등도 확인할 수 있다.

F5 : 다음 브레이크 포인트까지 이동 (브레이크 포인트를 여러 곳에 걸어 놓고 쓸 수 있음)
F10 : 다음 라인으로 (하지만 더 깊은 함수 내부로는 진입하지 않음)
F11 : 다음 라인으로 (더 깊은 함수 내부로 진입)
멈춘 곳의 화살표 클릭: 가고 싶은 라인으로 드랍


Grid의 Cell 크기를 정하는 원리

이미지를 가져와 Sprite Editor에서 16px로 슬라이스하고, PPU 단위가 25라면

16 ÷ 25 = 0.64로 1칸의 크기를 설정해 공백없이 나타나게 할 수 있다.

PPU란?
Pixel Per Unit의 줄임말로 Scene View에서 Grid의 1칸의 크기(=1유닛)를 나타내며

이 수치를 조절해 1유닛 당 몇 픽셀이 들어가게 할 지 설정할 수 있다.

PPU가 낮을 경우 Sprite의 크기가 커지는 효과를 낸다.


Input Manager의 Gravity와 Sensitivity의 역할

  • Gravity : 입력 값이 얼마나 빠르게 0으로 돌아가는지를 결정
    (값이 높을수록 0으로 돌아가는 속도가 빨라져 이동 입력이 끝났을 때 캐릭터가 즉시 멈추도록 할 수 있음)

  • Sensitivity : 입력 값이 얼마나 민감하게 반응하는지 결정 (더 미세한 조정 가능)


Rigidbody의 Discrete와 Continuous 차이

Collision Detection : 물리적 충돌 감지 및 처리 방식

  • Discrete: 일반적인 경우에 적합. 성능이 좋지만 빠른 물체의 충돌 감지에 약함
  • Continuous: 빠른 물체에 대한 충돌 감지가 개선되어 더 안전하지만 계산 비용이 더 높음

2D 게임의 벽 마찰력 없애기

(1) 2D - Physics Material 생성
(2) Friction(마찰)을 0으로 조절
(3) 오브젝트의 Rigidbody의 Material에 등록


Cinemachine으로 쉽게 Following Camera 만드는 법

(1) Hierarchy에 Cinemachine Camera 추가
(2) 카메라 사이즈와 트래킹 오브젝트 설정
(3) Position Control을 Follow로 바꿔 트래킹 활성화
(4) Position Damping은 카메라가 타겟을 쫓아오는 속도 (값이 커질수록 느려짐)


2D 플랫포머 조작 관련 테크닉 & 기술 문서

참고자료
https://www.youtube.com/watch?v=2S3g8CgBG1g&list=LL&index=1
https://2dengine.com/doc/platformers.html
https://x.com/MaddyThorson/status/1238338574220546049
https://github.com/NoelFB/Celeste : Celeste의 Player 동작 오픈소스 (C#)

0개의 댓글