https://www.youtube.com/watch?v=GG6nGQOSxKY&list=PL412Ym60h6uvqYiCVKk5NiEFpDEwOMQFX&index=20

 

 

 

 

 



코드상에선
랜덤 인덱스를 활용해 구현 가능

근데 매번 하자니 귀찮음




2023 버전부터는
랜덤 사운드 구현을 더 쉽게 하려고
오디오 랜덤 컨테이너 어셋이 있음


무작위 재생 목록 임

 

 

 

크리에이트 ㅡ 오디오 ㅡ 오디오 랜덤 컨테이너로 생성가능

 

 

 

오디오 소스 ( 구버전에선 오디오 클립 )

여기에 주사위 모양의 오디오 랜덤 컨테이너를 드래그 드랍해서 연결시킴

 

 

 

 

Playback mode

 

순차 (Sequential)
항상 1, 2, 3, 4... 순서

셔플 (Shuffle)
항목이 중복되지 않도록 보장

랜덤 (Random)
똑같은 게 연속으로 나올 수 있음

 

 

 

 

 

코드상 선언은 이렇게 한다 카더라

.resource 씀

인스펙터 창에 이렇게 오디오소스, 오디오랜덤컨테이너 연결 가능

반응형
Posted by 이름이 익명
:

 

 

https://db.irowiki.org/db/monster-info/1252/

 

반응형
Posted by 이름이 익명
:
   

 

빛 표현 할 때

 

100% 완전 쌩하양 쌩거멍이 아니라

80% 투명도를 사용해 눈이 덜 아픈 섬광 효과 사용

 

 

+

 

 

 

주인공이 없는 맵 구경을 보여줌

 

세상이 넓음 을 표현

 

오프닝 ㅣ 엔딩 에 사용되는 기법

 

 

+

 

 

보스가 등장 ㅣ 사라질 때

 

웨이브 왜곡효과

빨간 화면 효과

 

기괴함

몬스터 같음

을 표현

 

+

 

   

 

스킬 쓸 때

적 색상 팔레트 변경

 

+

 

 

비행 몹은 위치가 하늘

 

+

 

 

실내 맵 표현

 

벽을 저렇게 표현

 

+

 

 

로맨싱사가 3 리마스터 버전엔

idle 포즈가 반복 gif 다

약 1초 반복

 

+

 

 

https://www.youtube.com/watch?v=5gh07gWAV6c

 

 

로맨싱 사가는 브금부터

 

향수병을 일으키는 감동적인 것이 담겨짐

 

 

반응형
Posted by 이름이 익명
:

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

 

 

 

소개

어디에서나 사용하는 패턴

메모리 사용을 최적화 하는 게 목적

불필요한 걸 안하게 하기

구성이 복잡하고 무거운 환경에 적합함

 

+




세부

변경 됐으면 Dirty , True

그대로면 Clean , False



변경이 일어났으면 🚨 저장 필요! 알림 뜸

이전 값과 동일한 값이면 클린
저장 해도 아무 일 안 일어나면 클린


 

+

 

 



심리스 로딩 (Seamless Loading)
로딩 화면 안 뜨고 바로 다음 지역이 불러와짐
사용자가 다음 구역에 가까워지기 전에 미리 필요한 데이터를 백그라운드에서 조금씩 불러오는(스트리밍) 방식

 

chunk 라고 작은 단위 개념으로 맵을 작게 쪼갬

 

 

+

 


시야 시스템 (Culling)
화면에 보이지 않는 객체 (object) 를 제외 시킴(cull)
🔴 Dirty: "이 덩어리 안에 있는 오브젝트가 움직였거나, 
새로 생겼거나, 사라졌어! 새로운 정보로 업데이트해야 해."
🟢 Clean: "이 덩어리는 변화가 없어. 백그라운드 로딩/업데이트 작업을 건너뛰자."

 

+

 

 

ui 에선

 

레이아웃을 처리하는 더티 플래그가 따로 있고

 

그래픽을 처리하는 더티 플래그가 따로 있다

 

 

 

머티리얼 더티 플래그 따로

 

버텍스 더티 플래그 따로 처리 한다 카더라

 

 

+

 

 

 

다시 심리스 로딩 구조로 돌아와 보면

 

 

Update ( ) 생명주기에서 다룸

 

작은 청크 영역을 섹터 라고 부름

 

플레이아가 섹터랑 가까이 있는 지 

섹터가 로딩이 됐는지

를 체크해서

더티를 체크

 

 

플레이어가 가까이 있고

더티가 체크 되었으면

로딩

 

아니면

언로딩 (로딩하지 않고 비활성화)

 

 

 

플레이어와 멀어지면

비활성화 

 

+

 

 

하이어라키 부모자식 구조도 더티플래그 패턴임

 

자식의 트랜스 폼은 부모 트랜스 폼을 따라간다

 

 

 

반응형
Posted by 이름이 익명
:


https://www.youtube.com/watch?v=ic2tGGQrq1c

 

 

소개

객체지향의 기본

게임에서 다양한 아이템, 몬스터 등 
객체를 만들 때 적합

포장한 후 서로 교환 가능하게 함
이게 원리

 

+

 

상새

코드를 분해해 보면
1. 로봇이 있다
2. 걷기를 / 날기를 / 달리기를
3. 동작을 시행한다

 

 

 

1. 시작

초기 작업

 

 

2. 중간

교체 가능한 케이스 들을 나열 함

 

 

3. 끝

실행하는 클래스 

 

 

 

 

참고

 

여기서는 스크립터블 오브젝트를 예로 들지만 

씨샵 스크립트도 예시가 될 수 있다 함

 

 


연관 코드 지식

 

상속 

MonoBehaviour 넣을 자리에 부모 class 이름 넣음

public class Enemy : Unit { } 

public class 자식 : 부모

부모에선 virtual 을 쓴다
자식에선 override 를 쓴다

virtual 키워드는 이 메서드는 자식 클래스에서 내용을 덮어쓰거나(Override) 확장할 수 있도록 허용한다

 

 

+

 

참고로 여기선 i 인터페이스는 안 씀

i 인터페이스를 쓰기 애매함

i 인터페이스는 완전 빈 껍데기 이기 때문



+

 

 

공통점도 있고 차이점도 가지고 있는 여러가지를 다룰 때는

예로 들어,

아군 스킬 시스템을 짤 때는

 


if else 는 쓰지 마라

switch case 도 쓰지 마라

코드 수정을 많이 해야 하기 때문이다

 



+

 

if else 써야 할 때 if else 쓰지 말 아야 할 때
같은 class 내에 통으로 해결 class 를 따로 분리함
   
코드길이 3줄 내로 짧음 분기가 많을 때
안 바뀔 때 수정 및 확장 가능성 있을 때
   

 

논리 짤 때 컨텐츠 다룰 때
   

 

if else 써야 할 때 if else 쓰지 말 아야 할 때
체력 최대 한도 체크
현재 체력이 맥스 체력 보다 클 때
적 ai 패턴
돌격형, 수비형, 회복형 
애니메이터 연결
isRun bool 값 체크
승리 조건
특정 타일에 도달, 20턴 버티기, 적 전멸 
null 체크  무기 스킨 선택
   

 

 

 

+

 

 

strategy 패턴은 복잡한 다중선택지 구조 라고 보면 됨

 

if 문의 업글 버전임

 

 

+

 

 

 

유니티 내에선

Render Feature 가 strategy 패턴 쓴 예시 임

 

 

Add Renderer Feature 뜻
여러 화면 효과를 의미함


외곽선 효과 (Outline)

스크린 공간 앰비언트 오클루전 (SSAO)
그림자가 닿지 않는 곳에 미세한 음영 추가

디더링 효과 적용 (Dither)

 

 

+

 

반응형
Posted by 이름이 익명
:

https://www.youtube.com/watch?v=fxlYxhhf83s

UI에 걸맞는 기법

디자인 패턴들은
잠재적 스파게티 패턴을 방지하기 위한 것임



HOW TO UNITY | ui 용  MVC, MVP, MVVM 패턴

mvc
잘 안 씀
그냥 있다는 거만 알아두기

model
데이터 (캐릭터 체력) 담는 박스

view
화면에 표시되는 ui

controller 
계산 함



+


mvp

model 
데이터

presenter
중간 중재자
model 과 view 를 업데이트 함

view
ui

세 개 를 분리하여 이점이 있음

확장 가능
모듈 조립 가능
재사용 가능


+

 



mvvm
mvp 에서 더 발전된 거

model
데이터

viewmodel
중재자

view
ui

user
사용자


view 와 viewmodel 사이 데이터 바인딩 을 씀
자동 반영 이라는 것임
동기화 라는 거임


mvvm 기법은 유니티 6.0 부터 가능하다




+

 

 

UI와 게임 로직
(전투 규칙, 유닛 상태, 턴 시스템)을 명확히 분리하고 싶을 때

유닛 정보판, 스킬창, 턴오더, 인벤토리, 대화창 구현할 때




단, 주의점!

수백개 유닛 나오는 대규모 구현엔 부적합




실 예시로 본 각 속성들

Model : hp mp 스탯, skill, ScriptableObject

ViewModel : 커맨드 명령, INotifyPropertyChanged, 

View : 유닛 표시, HUD

 

 

+

유니티에서의 바인딩 방식

수동 바인딩 — View에서 ViewModel 이벤트/델리게이트를 직접 구독 
Reactive(예: UniRx) — 옵저버블로 바인딩. 상태 변화가 복잡하면 추천.


+

추가 설명


게임에서 일어나는 일

ㅁ 턴이 바뀜
ㅁ 이동 가능 칸이 바뀜
ㅁ 스킬 버튼이 켜짐/꺼짐

이런 게임 로직이 있고,
그걸 화면에 보여주는 UI가 있음



이 두 개를 섞어 쓰면 코드가 난장판이 됨
이 걸 방지 하기 위해서 mvvm 을 씀

 

+


SRPG는 UI가 많음 

ㅁ 유닛 정보창
ㅁ 턴 순서 UI
ㅁ 이동/공격 버튼
ㅁ 스킬 목록
ㅁ 범위 표시

 


하나의 유닛 데이터가 바뀌면
이 여러 UI가 동시에 반응해야 함
MVVM은 이걸 자동으로 연결해줌

 

 

 

+

 

 

추가 실 예시


플레이어가 적에게 맞아서 HP가 100 → 60 이 됨

1) Model: HP = 60 변경
2) ViewModel: "HP 변함!" 이벤트 전송 
3) View(UI): 그 이벤트 듣고 체력바 업데이트

 

+

 


다른 예시

 

 

public int MP;
1) Model: 마나 데이터만 저장

 

 

public class UnitViewModel
{
    public UnitModel model;      
    // 이 ViewModel이 사용할 데이터 저장 변수  
    // 실제 캐릭터 정보(HP 등)를 들고 있는 상자라고 보면 됨  

    public event Action OnHpChanged; 
    // HP가 바뀌었을 때 UI에게 알려주는 알림 이벤트  
    // “HP 변함! UI 업데이트 해!” 라고 호출

    public UnitViewModel(UnitModel m)
    // 생성자: 이 ViewModel이 어떤 Model을 쓸지 설정하는 함수  

	{
        model = m;
        // 전달받은 m(Model)을 이 ViewModel의 model 변수에 저장  
        // "이 ViewModel은 이제 이 모델을 다룬다"라고 연결하는 작업  
    }

    public void SetHP(int value)
    // HP 값을 바꾸는 함수 (입력으로 받은 value를 사용)  
    // 외부에서 "이 HP로 바꿔!"라고 숫자 전달할 때 쓰는 수정 함수  
    {
        model.HP = value;
        // 모델의 HP를 입력받은 값(value)으로 실제 변경  
        // 캐릭터의 실제 체력 수치를 여기서 업데이트함  

        OnHpChanged?.Invoke();  
        // 만약 누군가 이벤트를 듣고 있으면 실행 → UI 갱신  
        // “HP 바뀜! UI야 반응해!”라고 신호를 보내는 부분  
    }

    public int GetHP()
    // 현재 HP 값을 가져오는 함수  
    // 외부(UI 등)가 "지금 HP 몇이야?"라고 물을 때 쓰는 조회 함수  
    {
        return model.HP;
        // 모델에 저장된 실제 HP 숫자를 반환  
        // 캐릭터가 가진 HP를 그대로 돌려준다  
    }
}


2) ViewModel: 변화를 ui 에게 알림

 

 

 

hpText.text = "MP : " + vm.GetMP();

3) View(UI): ui 표시만 함

 

 

+

 


mvvm
유니티 에선 ui toolkit , ui builder
(기본 패키지 매니저에 있음)
을 써야 한다더라

ui builder 는
ui 위주로 작업할 수 있는 환경이 마련됨


 


ui toolkit 의 구성은 3개로 나뉨

Layout 위치
Styling 글꼴
Functionality 버튼기능



 

.uxml 은 칸 크기 조절이다

.uss 는 글자 조정이다

.cs 는 기능 연결이다

 

이렇게 외워두면 됨

 

+

 

 

ui builder 에서

 

우측

ㅣㅇ

이런 모양 누르면

 

데이터 바인딩 가능

체력이나 초상화 이런거 연결하는 거임

 

 

 

Update ( ) 생명 주기를 쓰지 않음

서로 연결 만 해줘서

실시간 반영으로 보이는 거임

 

 

 

 

 

반응형
Posted by 이름이 익명
:

예지몽 정리

카테고리 없음 2025. 11. 25. 22:28 |

예지능력 예지몽 능력으로 밝힘

전 집주인 노탄? 과 격투흔적


아마 전 집주인이 돈 제대로 안줫을듯

병원이나 공무원은 좋은 사람


형 주변에 사회복지가 있어서 유리한상황


이런 꿈을 꿈


반응형
Posted by 이름이 익명
:

https://www.youtube.com/watch?v=0j3Y_YUV_Mw

 

 

대량의 인스턴스가 가진 속성을 최적화하는 Flyweight 패턴


이름이 그럴싸한 거지
이미 우리가 쓰고 있는 거임



메모리 절약에 초점이 맞춰져 있음
최적화 기술임

 

+

 

 



Scriptable Object 가  Flyweight 패턴 이다

Scriptable Object 가 이미 프리셋으로 짜여 있어서
우리는 이걸 사용만 하면 된다

이게 없었으면 자료구조 부터 만들어야 해서
복잡했을 것이다

 

 

 

 

캐릭들이 가져야 할 공통 뼈대

공격력, 최대 체력, 방어력, 이름, 설명

 

캐릭마다 달라야 할 속성

현재 체력

 

이렇게 구분함

 

 

캐릭들이 가져야 할 공통 뼈대 를

통으로 묶어서 공유하기 때문에

최적화가 되었다고 함




+

 



memory profiler , all of memory 탭에서
allocated size 란의 
managed 보면
어떤게 용량 차지하는지 볼 수 있다

저사양 모바일이면 80 mb 이상 위험
일반 모바일이면 150 mb 이상 위험
PC 및 콘솔이면 1000 mb 이상 위험


반응형
Posted by 이름이 익명
: