ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Godot 17
    게임 개발 2025. 9. 9. 19:19

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

    이 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로 채운다 (즉, 점점 화면이 색으로 덮인다).

    정리하면:
    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. 메타 (영구) 업그레이드를 어떻게 구현할까?  그걸 어떻게 게임을 껐다 켜도 유지 시킬 수 있을까?

    '게임 개발' 카테고리의 다른 글

    Aseprite 1  (0) 2025.09.17
    Godot 18  (0) 2025.09.11
    Godot 16  (0) 2025.09.07
    Git 사용법  (0) 2025.09.06
    Godot 15  (0) 2025.09.06
Designed by Tistory.