https://www.youtube.com/watch?v=jvJ1Vd7PGwk&list=PL412Ym60h6uufFJlxsKcYkOtRu-PIsLuA&index=6


Objectpool 패턴

수가 많은 오브젝트 다룰 때 씀


 

 

 

Pool 이라는 박스 안에 객체들을 담는 것임

오브젝트 활성화 / 비활성화를 응용함

Destroy 쓰지 말기
지저분해짐

끊김 현상
Hiccup 딸꾹질 같은 버그
GC Spike 쓰레기 오버되서 터짐 현상
을 예방하기 위해 오브젝트 풀링을 사용

주로 로딩화면에서 미리 생성

 

 

+

 



코딩 속 원리 :


정렬방식은 stack 을 쓰기도 함
후입선출



next instance 에서는 true, 활성화
return 에서는 false , 비활성화


+


2021년부턴 오브젝트 풀링이
정식 문법으로 등재됨

public ObjectPool<T0> (Func<T> createFunc, Action<T> actionOnGet, Action<T> actionOnRelease, Action<T> actionOnDestroy, bool collectionCheck, int defaultCapacity, int maxSize);

자세한 링크

https://docs.unity3d.com/6000.2/Documentation/ScriptReference/Pool.ObjectPool_1-ctor.html

 

이 건 인터페이스 , 겉 껍데기라서 내가 직접 속을 채워 넣어줘야 한다

 

 

 

여기서 짚고 넘어갈 거

 

Update 에서

objectPool.Get() 가져오고 , 활성화 작업

 

Deactivate() 에서

objectPool.Realease() 함 , 풀로 다시 되돌리는 비활성화작업

 

 

 

반응형
Posted by 이름이 익명
:

 


https://www.youtube.com/watch?v=dNSgujUFmgs&list=PL412Ym60h6uvqYiCVKk5NiEFpDEwOMQFX&index=18

 

6면체 처럼 입체적으로 vfx 다룬다는 뜻

 



사실적인 연기 조명 구현

 

 

 


구버전의 이펙트는 라이트에 반응을 안해서 
부자연스러웠다

그걸 보완한 거임

 

 



노말맵을 6방향에서 담아내서

폭발 연기 에도 라이팅이 자연스럽게 담아내게 함

 

 

+

 

 

예시 제작 시작

 

Create - Visual Effects - Visual Effect Graph

강의에선 simple burst 샘플을 씀

 

노드 끝에 URP Lit Quad 를 씀

 

 

 

Material Type  을 Six Way 로 설정

 

 

 

연기 텍스쳐 기본 유니티에서 제공되는거 사용,

연기 텍스쳐가 스프라이트형식이면 flip book blend 로 사용

 

mode 에선

face camera 선택

 

 

이렇게 조명에 인터렉션 있는 연기가 완성됨

 

 

이건 성능을 잡아 먹기 때문에

 

특별한 씬에만 소수 사용하는 걸 추천함

 

소수의 시네마틱이라던가...

 

 

 

반응형
Posted by 이름이 익명
:

 


Rendering - Lighting 탭
Main Light , Additional lights , SH Evaluation Mode  에서

per pixel , per vertex 정할 수 있음

per pixel 이 더 보기 좋음, 근데 사양 많이 먹음
per vertex  는 뭔가 뭉개지고 떨림이 생김

 

+


 

 

반응형
Posted by 이름이 익명
:




https://www.youtube.com/watch?v=GkuoCESfm6Q&list=PL412Ym60h6uvqYiCVKk5NiEFpDEwOMQFX&index=19

 

 

 

 






lightmap
텍스쳐 처럼
통으로 라이트 정보를 오브젝트 표면에 고정 시키는 것

라이팅 연산 자체가 연산량이 많아서
베이킹 하는걸로 완화 하는 것임

 

 

라이트 맵은 정적인 배경에 자주 쓰이고

라이트 프로브는 동적인 캐릭터에 쓰인다

 

 

 

 

 

light probe volume
빛/  조사하기 /   양이 많은거

 

 


light probe
나눠진 구역의 빛을 저장함
주변 Probe들이 "여기는 이런 색의 빛이야!" 하고 알려줌


정적인 환경 + 움직이는 애들에 예쁜 간접광을 주려는 역할


Lightmap만으로는 캐릭터가 어두워지는 문제가 있어서
light probe 를 씀


라이트 프로브는
예쁘고 가벼움(퍼포먼스 Good)

 

 

+

 

light probe 에서 진화 되어 나온 것이

APV, Adaptive Probe Volumes 이다

 



이제 유니티 URP 에서도
APV, Adaptive Probe Volumes 를 사용 가능해졌다


Light Probe Gruop 은 이제 구버전 유물이 되었고
Adaptive Probe Volumes 이 신문물이 됨

사용이 편해서 넘어와야 하는 것임

 

+

 

per vertex per pixel
퀄 낮으나
최적화 됨
퀄 좋으나
연산 많음

 

 

+

 

 

light explorer 창에서

 

어떤 빛이 baked 인지 realtime인지 볼 수 있다

 

 

 

Settings - URP - Rendering - 
Lighting - Light Probe System

 

위에건 구버전 기능
아래거 Probe Volumes 가 이번의 새 거인 Adaptive Probe Volume 이다

 

 

 

 

 

오브젝트 추가시
Light - Probe Volume - Probe Volume 

 

 

 

fit to scene 하거나 초록 상자 눌러서 크기 조정해주면 됨

 

 

 

lighting 창 - Probe Volume - Generate lighting 

하면 세팅 끝

 

 

 

초록이 베이크드, 자주색이 리얼타임. 서로 별 차이 없어보임

 

 

 

 

더 자세하게 보고 싶으면
Rendering Debugger - Probe Volume - Display Probes 에 체크 온

 

 

 

오브젝트의 부분 부분 빛이 각각 다르게 들어가야 자연스러운 것이다

 

위 로봇의 왼다리 오른다리 따로 따로 빛이 들어가야 좋음

 

 

 


Rendering - Lighting 탭
Main Light , Additional lights , SH Evaluation Mode  에서

per pixel , per vertex 정할 수 있음

per pixel 이 더 보기 좋음, 근데 사양 많이 먹음
per vertex  는 뭔가 뭉개지고 떨림이 생김


반응형
Posted by 이름이 익명
:

https://www.youtube.com/watch?v=dsLBzrbo-Vs&list=PL412Ym60h6uvqYiCVKk5NiEFpDEwOMQFX&index=14

 

새 인풋 매니저는는

패키지 매니저로 설치




project settings - player - active input handling
구버전 input manager
신버전 input system package
both

both 는 오류 해결용

 


첫 시작은 control schemes 어쩌구 에서
시작

 

 

+

 

 

 

키 binding (연결) 할 때, 

 

listen 기능을 써서 지금 누른 버튼을 이을 수 있음

 

 

+

 



action type 종류

button 단일성으로 누르고 떼기
점프 단축키, 인터렉트 E 키  라던가

value 지속적 값 변화
방향키로 이동할 때, 카메라 회전, 줌

PassThrough 복수 입력 동시에 받을 때
FPS 카메라 회전, ui 드래그, 리듬게임 버튼 여러개 입력


Initial State Check = OFF
→ “이미 눌려있던 상태”는 무시하고
새로 눌렀을 때만 동작함
원치 않는 입력이 시작 순간 자동으로 발동되는 것을 방지할 수 있음


+

Hold
몇 초동안 눌러야 입력을 인정하는 것


Tap
지정한 시간동안 눌렀다 떼야 입력을 인정하는 것


Processors 
입력 반전 을 할 수 있음


+

한 번에 두 개를 눌러야 작동하는 액션은
Modifier 를 통해 만들 수 있다

예시 :
걷기, 기어가기


+

 



Behavior , invoke unity events

(또는 send message 써도 된다함)

이 버튼 누르면 어떤 행동에 연결할 건지 정함

UI 버튼 만들때 처럼
스크립트 지정하고 함수 지정하면 됨

 

+

 

 

입력엔 세 가지가 있다

 

started

시작

 

performed

 

canceled

취소됨

 

 

Hold 옵션에서 원하는 시간 보다 더 빨리 뗀다면 canceled 로 인정함

 

+

 

 

 

부가적인 이동방법인 스크린 스틱 을 사용시,

버벅이는 걸 방지 하기 위해

인풋시스템 게임패드를 

optional 로 해야 한다더라

 

+

 

 

새 input system 은 시네마신과 연동하여

쉬운 카메라 제어를 구현할 수 있다고 함

반응형
Posted by 이름이 익명
:


ai 이동 끼임 현상
ai navigation 

carve 로
이동 못가는 지역의 넓이를 넓게 지정

 

 

반응형
Posted by 이름이 익명
:

https://www.youtube.com/watch?v=vJAZ7B_sal4&list=PL412Ym60h6uvqYiCVKk5NiEFpDEwOMQFX&index=10

 

 

 

 

패키지 매니저 - 쉐이더 그래프 - 샘플스

 

에서 원하는거 복붙해서 갖다 써도 됨

 

 

 

+

 

 


vs 버텍스 스테이지
찢어지는 거 같이 보이고 
보기 별로임
근데 연산량이 낮음
최적화 됨
ps . fs 픽셀 프래그먼트 스테이지
보기 자연스러움
연산량 많음
최적화에 악영향
   

 

둘 중 빠른 걸 원하면 버텍스 스테이지를

느려도 자연스러운 걸 원하면 픽셀 스테이지를

선택함

 

 

+

 

 

 

posterization, 포스터처럼 만들기

 

일부러 계단 만들어 cel shading 만들기

 

 

셀 셰이딩 구현을 위해

floor , 소수점 내림 처리를 한다는 내용

 

 

+

 

 

블랙보드 에서 드롭다운 메뉴 를 만들 수 있다 카더라

 

 

+

 

 

쉐이더 노드 중

time 노드 는 움직이는 걸 구현할 때 씀

 

텍스쳐를 스크롤링 (그림을 한 방향으로 이동),

원형 도형이 퍼지는 것 등등

 

 

+

 

 

 

 

 

hit map 

 

카테고리 구분 같은 것

차가운색일수록 연산량이 적다

뜨거운색일수록 연산량이 많다

 

단, 카테고리 0, 하늘색, 텍스쳐라던가 어떤걸 쓰느냐 연산량이 달라진다는 뜻

 

 

 

+

 

 

 

깃발 같은 경우

animated flag

 

그냥 애니메이션 모션에서 처리하는 거보다

쉐이더 그래프에서 버텍스 셰이더 에서 처리하는 게 더 연산량 적음

 

 

 

gerstner wave shader

 

물 표면 표현도 쉐이더 그래프에서

 

 

+

 

 

 

interior cube map

 

창문이 있는 건물을 표현하는데 폴리곤이 있는 건 아님

 

낮은 버텍스 수치로 구현함

 

 

 

셰이더로 가짜 방을 구현하는 거임

 

같은 방인데 90도 씩 돌려서 복붙함

 

 

 

 

관련 용어는

360 hdri, skybox , Equirectangular,  Spherical Panorama ,cubemap

이런 거랑 비슷 한 원리

 

단, 쉐이프에 제한이 있음

원형이나 돔, 사각형을 구현할 때 씀

 

 

 

360 hdri, skybox , Equirectangular,  Spherical Panorama ,cubemap
보통 이런 것들은
하늘, 행성, 금속 반사 텍스쳐, 맵 배경 에서 씀

반응형
Posted by 이름이 익명
:



유니티 새 input system

"점프", "이동", "공격" 같은 행동 이름을 먼저 만들고,
그 행동에 어떤 버튼이든 연결!
키보드/패드/모바일 다 묶어서 처리 가능

Binding (묶기)
어떤 장치의 어떤 버튼이 Action을 실행하는지 연결
(Jump) ← Space
( Move ) ← WASD 

Control Scheme (장치 묶음)
플레이어가 어떤 장치를 쓰는지 자동 감지
[Keyboard&Mouse]
[Gamepad]
[Touch]

사용 흐름 한방 요약
Input Actions 만들기 → 액션 만들기 → 바인딩 지정 → 코드에서 읽기

구 버전: 직접 버튼 상태를 계속 체크해야 함 
새 버전: 버튼 눌림/떼짐 이벤트를 자동으로 알려줌 






유니티 urp 신규 기능

렌더 그래프 시스템 (Render Graph)
렌더링 흐름

TAA (Temporal Anti-Aliasing)
계단 현상줄이기

스크린 스페이스 렌즈 플레어 (Lens Flare)
다양한 렌즈 플레어 효과

소프트 섀도우 품질 제어 (Soft Shadows Quality)

바닥 디칼(Decal) 지원

코드없이 Custom 포스트 프로세싱

그림자와 2D 상호작용 향상

Probe Volumes(프로브 볼륨) 뜻
씬 전체에 숨겨진 "빛 저장 칸"을 자동으로 깔아서
실시간 GI(간접광) 느낌을 내주는 시스템.




유니티 오디오 랜덤 사운드 컨테이너

AudioRandomContainer(신 버전 엔진)
 여러 AudioClip을 리스트로 넣고
 Random Mode 설정(Shuffle, Weighted, Pure Random)
 Pitch / Volume 범위 조절


전통적인 방식 (대부분 이렇게 씀)
    public void PlayRandom()
    {
        int index = Random.Range(0, clips.Length);
        source.PlayOneShot(clips[index]);
    }

    if (Input.GetKeyDown(KeyCode.Space))
        PlayRandom();


 

 


unity cloud 와 battle pass

완전 솔플(오프라인) 게임이면 Unity Cloud 안 써도 100% 가능해!

핵심 포인트
서버 못 만들어도 게임 운영 가능
플레이어 데이터 자동 저장
자동 빌드 배포
멀티 / 상점 / 보상 시스템 빠르게 구축 가능


Unity Cloud를 왜 쓰는가?

서버 인프라 직접 안 만들어도 됨
운영(랭킹/재화/보상)을 빠르게 개발
모바일 게임/라이브 게임에 특히 유용
인디/소규모 팀 개발자에게 필수급


Battle Pass(배틀 패스) ?
한 줄 요약
시즌 동안 플레이하면 포인트가 쌓이고,
레벨을 올리면 단계별 보상을 주는 시즌형 보상 시스템.

XP 획득 방식
플레이 시간
스테이지 클리어
데일리 미션
주간 퀘스트

보상 종류
스킨
코스튬
캐릭터
배너/프레임
아이템 상자
재화(골드/젬 등)

 

 

 



batching 유니티 최적화

배칭 이란
여러 오브젝트의 Draw Call(드로우콜)을 하나로 묶어 렌더링 → 성능 UP!


배칭 여러개 소개

Static Batching (스태틱 배칭)
절대 안 움직이는 오브젝트에 사용 (건물, 바위 등)

Dynamic Batching (다이나믹 배칭)
움직이는 오브젝트도 가능
하지만 조건 까다로움

GPU Instancing (GPU 인스턴싱)
최신 게임 대부분 사용
같은 Mesh + 같은 Material 사용할 때
GPU가 "복사본"을 효율적으로 그림



URP는 자체적으로 SRP Batcher가 있어서 성능 엄청 좋아짐

SRP Batcher
URP/HDRP 전용
셰이더가 SRP Batcher 호환이면
거의 모든 오브젝트가 자동으로 빠르게 처리됨

Default URP Shader는 100% 호환
요즘엔 Dynamic Batching보다 SRP Batcher가 핵심


 



xcode 와 유니티 ios

이건 아이폰 애플 이라서 패스

반응형
Posted by 이름이 익명
:


https://www.youtube.com/watch?v=J6F8plGUqv8&list=PL412Ym60h6uvqYiCVKk5NiEFpDEwOMQFX&index=9

디자인 패턴 기원

디자인 패턴 연구는 gang of Four 에서 출발
네 명의 사람이 연구한 거고
이 사람들이 낸 gof 어쩌구 책에서 출발한 거임



+


SOLID Principles 솔리드 원칙

게임 뿐만 아니라 모든 소프트웨어는 이 솔리드 법칙을 지켜야 한다

꼬여버리지 않게 하기 위한 약속



단일 책임 원칙 (Single Responsibility Principle, SRP)
"하나의 클래스는 딱 하나의 역할만 맡자."

맥가이버 칼 처럼 다 하는 것 보단
주방 조리기구 처럼 각각 따로 쓰는 게 효율적이다


개방-폐쇄 원칙 (Open/Closed Principle, OCP)
"확장에는 열려있고, 수정에는 닫혀있어야 한다."

핸드폰 케이스 부착시킬 땐 핸드폰 본체를 뜯는 사람은 없다


리스코프 치환 원칙 (Liskov Substitution Principle, LSP)
"자식 클래스는 부모 클래스 역할을 완벽하게 대신할 수 있어야 한다."

오리 를 만들 었는데 날개도 없고 부리도 없으면 안된다
새 의 기본 기능을 탑재하고 있어야 한다


인터페이스 분리 원칙 (Interface Segregation Principle, ISP)
"한꺼번에 다 담지 마라, I 인터페이스를 잘게 쪼개라."

식당에서 짜장면 하나만 시키려는데
모든 메뉴판을 다 읽어야 한다면 불편하다


의존역전 원칙 (Dependency Inversion Principle, DIP)
"또렷한 것에 의존하지 말고, 추상적인 것(I 인터페이스)에 의존해라."

전기 플러그를 꽂을 때, 콘센트 구멍만 맞으면 되지 
그 전기가 화력발전소에서 왔는지 원자력발전소에서 왔는지 따지지 말 것


 

+

 

 


사실 여기서 더 깊게 생각하자면,
부모 자식 관게는 칼로 물베기임


뭐가 하이레벨이냐 뭐가 로우레벨이냐
딱 정확히 가를 순 없음

 

 

 

+

 

세부 부연 설명 추가

 

단일 책임 원칙  Single Responsibility Principle, SRP

 

 

인스펙터 창 컴포넌트가 그 예시다

 

코드 300 줄 이하, 간결해야 한다

 

모듈처럼 분리되어 있다

 

그래서 자식으로 부착이 쉽다

 

 

이렇게 하나의 class 안에 모든 걸 다 때려박으면 불 편

 

 

 

class 를 여러개 만들어 나누는 게 좋다

PlayerAudio

PlayerInput

PlayerMovement 

 

 

+

 

 

개방-폐쇄 원칙 (Open/Closed Principle, OCP)

 

 

실무에선 DLL, 라이브러리 를 직접 수정하지 않는다

 

원본은 냅두고

모드, 모듈만 갈아치우는 느낌으로 만든다

 

 

 

 

 

원본으로 잡은 건 Shape, 추상적인 개념

 

Rectangle : Shape

Circle : Shape

쉐이프 밑 자식을 추가함

네모와 동그라미를 자식으로 배치하는 느낌으로 만듦

 

 

 

 

 


림월드 모딩의 헉스립 PatchOperation 를 예로 들면,

더하고 , 빼는 것도 있음
원본을 수정 하는 것도 있음

원본 수정을 패치 를 통해서 하기도 함


+

 

 


Liskov subs 원칙

부모님이 죽으면 자식이 그 사회에서 역할을 대신할 수 있어야 한다

서브 클래스 만들 때 기능을 제거하지 마라

abstract 추상화 할 땐 단순하게 유지하라
추상화 된 걸 복잡하게 만들면 아무데도 못 쓰는 빈 껍데기 코드만 남음

 


팩토리 패턴 비슷한 개념이다

 


Vehicle 탈 것 아래엔
Car 도 있고 Train 도 있다

 


하지만 그냥 이렇게 만들면
어? 기차는 좌회전 우회전 못하는데? 하며 충돌 일어남

 

 

부모인 Vehicle 을 둘로 쪼개서

ITurnable IMovable 로 나눔

 


ITurnable 좌우 방향 조절 가능

IMovable 앞 뒤 이동 가능





+

 


인터페이스 분리 원칙 Interface Segregation

큰 덩어리 인터페이스들을 구체적이고 작은 단위로 분리
꼭 필요한 메서드만 이용할 수 있게 함

내부에 의존하지 말고 유연하게 할 수 있게 됨


I 인터페이스 뜻
청사진, 계약서, 큰 틀 


 IDamageable
피해를 입을 수 있는 것
이펙트 총알 말고, 플레이어 몬스터 를 뜻함

TakeDamage
피해를 입다

IExplodable
폭발할 수 있는것, 화약 통 같은 거

 

 

 

폭발통 의 경우

데미지 입을 수 있고, 폭발할 수 있음

 

적 유닉 의 경우

데미지 입을 수 있고, 이동할 수 있고, 유닛 스탯도 있음

 

 

 

 

+

 

 

의존역전 원칙 (Dependency Inversion Principle, DIP)

추상화, abstraction 에 의존하자

클래스 간에 서로 끈끈하게 연결이 되는 걸 피하라
되도록 서로 나눠져야 함

철수가 영희의 하위 변수를 쓰고, 
영희가 영수의 하위 함수를 쓰고
이렇게 서로 꼬이는 걸 피하라

이렇게 서로 꼬여져 있는 걸 결합, coupling 이라고 함

서로 꼬여져 있으면
수정할 때마다 이 파일 저 파일 뒤져야 함

 

 

 

문 같은 on. off  스위치 구현 할 때의 예시

 

Switch 와 ISwitchable 을 따로 뻬는 전략을 써서 서로 분리하기

 

Switch 안엔 

ISwitchable client;  한줄만 넣어버리는 거다

 

 

 

주의점

 

 

 

 

abstract 상속은 두개 이상 못한다

그래서 abstract 와 interface 를 같이 써서 다중 상속을 구현한다

 

 

 

abstract 추상 클래스 i interface 차이

 

 

반응형
Posted by 이름이 익명
:


https://www.youtube.com/watch?v=uFKd7JbI5QY&list=PL412Ym60h6uvqYiCVKk5NiEFpDEwOMQFX&index=7

 

 

 

대표적인 예시가 유니티 의 Animator 창

 

 

 

+


스테이트 패턴 의미

블럭 교체 방식

신호등 같은 것

오브젝트의 내부 상태가 바뀜에 따라 행동을 바꾸게 만드는 패턴

객체(Context)는 행동을 직접 처리하지 않고,
 현재 자신이 맡고 있는 "역할 배우(State Object)"에게 모든 실행 책임을 위임합니다

+

예시 

스탠스 바꾸기 가능
스탠스 는 딱 1개만 유지
2개 이상의 스탠스 보유 금지

얼굴 표정
Happy, Angry, Scared

모션 동작
Attacking, Blocking, UsingItem, Reloading


+

흔한 실수

Update ( ) 에서
if , else if , else if ... 이렇게 하면
코드를 읽기 힘들고, 수정 시 버그가 발생하기 쉽다

그래서 해결법이 스테이트 패턴임
각 상태(Idle, Run, Jump)를 별도의 클래스로 분리하는 것임


+

        if (currentState != null)
        currentState.Exit();
// 하나의 상태만을 위해서
// 이전 상태를 종료시킨다


+

상태이상으로 쓰면 안됨
독 이면서 마비 이면서 감속 상태이상. 이렇게 공존 가능하기 때문임

+

스테이트 패턴으로 코딩 짤 때는
새 클래스 (새로운 스크립트) 를 제작헤애 힌디
클래스 수가 많아지기 때문에 복잡해질 수 있다

 

 

 

 

 

상태 State
지금 현재 부품

전환 Transition
현재 부품이 다른 부품으로 갈아치워짐

이벤트 Event
일, 사건, 상태 전환을 일으키는 외부 입력

동작 Action
그 상태에선 모션을 실행 할거냐 이펙트를 재생할 거냐

 

 

 

 

i interface 를 사용

 

점프전 스쿼트 ,시작

점프 공중 체공 , 중간

점프 착지, 끝

 

이렇게 시작 중간 끝 세개로 나눔

 

 

+

 

 

실 구현 예시

 

if 플레이어가 땅에 붙어있음이 아닐 경우

점프 상태다

 

if 플레이어 속도가 0.1f 이상이다

움직이니까 걷는 상태다

 

 

반응형
Posted by 이름이 익명
: