-
장면이 전환 될 때 원이 모였다가 다시 커지면서 장면이 전환되는 것을 구현했다.

이 png파일은 가운데가 밝고 가장자리로갈수록 어둡게 설정되어있다.

ColorRect에 쉐이더메티리얼로

셰이더 코드에서는 uniform이 @export의 역할을 한다. (외부로 노출시킴)
- uniform 변수들
- transition_color : 화면을 덮는 색깔 (보통 검은색 페이드용으로 씀).
- transition_texture : 전환용 마스크 텍스처 (위의 png 파일).
- percent : 전환 진행도 (0.0 ~ 1.0 사이, AnimationPlayer가 이 값을 바꿔줌).
- fragment() 함수
→ 최종적으로 각 픽셀의 색을 계산하는 곳.- vec4 transition_texture_color = texture(transition_texture, UV);
→ 지금 픽셀의 UV 좌표에 해당하는 텍스처 색을 가져옴. - if (transition_texture_color.r > percent)
→ 텍스처의 빨강(R) 값이 percent보다 크면 → 이 픽셀은 아직 안 보여야 함. 왜 R로 하냐면 흑백은 R=G=B값이라 그렇다. R로 그냥 설정한 것!
→ 그래서 COLOR.a = 0.0; (투명하게 만든다). - else
→ 그 외에는 transition_color로 채운다 (즉, 점점 화면이 색으로 덮인다).
- vec4 transition_texture_color = texture(transition_texture, UV);
정리하면:
percent 값이 점점 커지면 (0 → 1), transition_texture의 모양에 따라 화면이 가려짐.
ScreenTransition 스크립트

transition() 함수를 보자.
먼저 애니메이션을 이용해 퍼센트값을 0에서 1로 올리면 가장자리부터 가려지게 만듬.
기본적으로 unvisible하게 되어있다가 이 애니메이션이 시작될 때 visible이 켜짐
왜 이렇게 하냐? -> unvisible하게 해서 평소에는 마우스에 영향을 받지 않게 하기위해서다.
그리고 신호를 기다린다.
다 가려지면 transition_halfway. 즉 전환이 절반 도달했다는 신호를 방출
그러면 신호를 받은 후 다시 1에서 0으로 줄여가며 반대로 화면을 보이게 만들어줌.
문제는 반대로 할 때도 신호를 방출하게 되므로 skip_emit 임시신호를 이용해서 되돌아 올때는 신호를 방출하지 않고 return시킨다.
이 씬을 오토로드에 달아놓은 후에
화면 전환 장면이 필요할때마다

전환함수 불러온후에 딱 절반도달해서 가려졌을 때 뒤의 화면을 전환시키도록 설정해놓으면 된다!
Run 내부에서의 업그레이드가 아닌 외부에서 업그레이드를 하는 것을 구현하려고 한다.


어빌리티업그레이드에서 했던 것처럼 메타업그레이드 리소스 클래스를 만들어주고, id, 최대값, 제목, 설명칸을 넣는다.
그리고 그 중 첫 번째로

경험치 물약 드랍률 증가 업그레이드 리소스를 하나 만들었다.


- upgrade_currency: 런을 하며 모아두는 재화 → 이후 업그레이드 구입에 씀.
- meta_upgrades: 어떤 업그레이드를 몇 번 샀는지 기록.
- save() / load_save_file(): 런과 런 사이의 영속성(메타 진척)을 보장.
- GameEvents 신호 연결: 런 중에 경험치 아이템을 먹으면 자동으로 저장.
const SAVE_FILE_PATH = "user://game.save"
res:// 는 읽기만 가능한 게임설치폴더고 user:// 에다가

이 설정을 해서 따로 읽고 쓰기가 가능한 폴더를 만들고 game.save로 연결해준다.

save_data는 딕셔너리로 몇개의 경험치를 먹었고, 어떤 영구적인 업그레이드가 들어가있는지 저장된다.

ready에서 호출되는 함수.
그 파일이 있으면 file 변수에 read모드로 연결한 후에
그 file변수에 직렬화되어있는 내용을 딕셔너리로 만듬. 그 딕셔너리를 save_data에 넣음.

반대로 쓰기 모드로 game.save을 file로 연결해서 save_data 딕셔너리를 직렬화해서 file에 쓴다.

업그레이드를 적용하는 함수. 아마 메타업그레이드카드 같은 곳에서 업그레이드 누르면 이거 호출할 듯
적용할 업그레이드가 없으면 수량 0 으로 자리를 만들어주고, 수량 +1 해주고,
있으면 그냥 바로 수량 +1 해준다.

경험치 물약 먹었을 때 currency를 경험치양 만큼 더해주고 game.save에도 저장
오늘의 질문 (간단)
1. 화면 전환용 효과를 어떻게 구현할까?
2. 메타 (영구) 업그레이드를 어떻게 구현할까? 그걸 어떻게 게임을 껐다 켜도 유지 시킬 수 있을까?
- uniform 변수들