분류 전체보기 201

고도 엔진 슈팅게임 #6: 플레이어 보호막 기능

[플레이어 보호막]적이나 바위에 부딪혔을 때 혹은 적의 총알에 맞을 때 보호막이 작동해서 바로 목숨을 잃지 않도록 하는 기능을 추가할 것이다.  다음 코드를 player.gd 에 추가한다.signal shield_changed@export var max_shield = 100.0@export var shield_regen = 5.0var shield = 0: set = set_shieldfunc set_shield(value): value = min(value, max_shield) shield = value shield_changed.emit(shield / max_shield) if shield  코드에서 shield_changed 시그널을 보낼 때 shield/max_shield 로 보내는데, HU..

고도 엔진 슈팅게임 #5: 적

[일시 정지]적 씬을 만들기에 앞서 '일시 정지' 기능을 추가해 보자. 고도에서 일시 정지는 SceneTree의 함수이며, paused 속성을 사용해 설정할 수 있다.SceneTree 가 일시정지되면 다음 3가지 일이 발생한다.물리 스레드 실행 중지_process()와 _physics_process()가 어떤 노드에서도 호출되지 않음_input()과 _input_event() 메서드가 입력이 있어도 호출되지 않음일시 정지가 트리거 되면 모든 노드가 개발자가 설정한 대로 반응한다.이는 [인스펙터] 창의 하단에 있는 Process - Mode 속성을 통해 설정할 수 있다.선택할 수 있는 옵션은 다음과 같다.Inherit: 해당 노드가 부모와 동일한 모드를 사용Pausable: 씬 트리가 일시 정지되면 해당 ..

카테고리 없음 2024.12.17

고도 엔진 슈팅게임 #4: UI

[게임 UI]시작버튼, 게임 상태, 점수, 목숨을 설정 할 수 있도록 만들 것이다.다음 단계를 따라 UI 설정을 하자. [새 씬] 으로 새로운 씬을 만들고 CanvasLayer 루트 노드를 생성한뒤 이름을 HUD로 변경한다.HUD 하위에 Timer와 MarginContainer 를 추가한다. 1Timer 노드는 One Shot 속성에 체크해주고 Wait Time을 2로 설정한다. 3MarginContainer 에는 점수와 남은 목숨 두가지가 들어갈것이다. 앵커 프리셋 설정을 '위쪽 넓게'로 해준다.그리고 [인스펙터] 탭의 Theme Overrides - Constants 옵션에서 margin을 네 부분 모두 20으로 설정한다. 2MarginContainer 하위 노드로 HBoxContainer를 추가한다..

토이프로젝트 2024.10.29

고도 엔진 슈팅게임 #3: 바위 씬

[바위 씬 생성]RigidBody2D로 새 씬을 생성한 후 Rock 으로 이름을 변경한다.Rock의 자식으로 Sprite2D를 추가하고 Texture 에 바위 이미지를 추가한다.Rock의 자식으로 CollisionShape2D를 추가한다. 히트박스는 생성될 바위의 모양에 맞게 동적으로 생성해 줄 것이므로 아직 설정하지 않는다. 바위는 플레이어처럼 움직이다가 멈추면 안되고 계속 날아다녀야 하니 Linear와 Angular의 Damp는 0으로, Damp Mode 는 Replace로 변경한다.또 바위를 서로 튕기게 만들어야 하므로 Physics Material Override 에서 '새 Physics Material'을 눌러주고 상세 옵션에서 Bounce를 1로 설정한다. Rock 에 스크립트를 붙여서 다음 ..

토이프로젝트 2024.10.01

고도 엔진 슈팅게임 #2: 화면이동, 슈팅

[화면 이동]screen wrap 기능을 넣을 것이다.플레이어가 화면의 끝에 다다르면 반대편으로 나오는 것을 말한다. 스크립트 상단에 다음 코드를 추가하고 var screensize = Vector2.ZERO _ready() 에 다음 코드를 추가한다.screensize = get_viewport_rect().size # 화면 크기  그리고 플레이어가 한쪽 끝에 다다르면 반대편으로 이동시켜야 하는데, 여기서 문제가 있다.다음과 같은 코드로 플레이어를 이동시키면 된다고 생각할 수 있지만func _physics_process(delta): ... if position.x > screensize.x: position.x = 0 if position.x screensize.y: position.y = 0 ..

토이프로젝트 2024.09.24

고도 엔진 슈팅게임 #1: 플레이어 움직임 구현

[프로젝트 설정]새 프로젝트를 생성한다.커스텀 입력 액션을 설정할건데, 사용자가 어떤 키, 마우스 혹은 어떤 디바이스로 게임을 하는지 알 필요 없이 '점프' 입력에 반응하도록 설정할 수 있다.그리고 사용자가 게임 설정에서 키 입력을 커스터마이징 할 수 있는 옵션을 제공할 수 있게 된다. 상단 메뉴의 [프로젝트] -> [프로젝트 설정] 에서 [입력 맵] 탭으로 이동한다.다음의 입력 액션 4가지를 생성해준다.rotate_leftrotate_righttrustshoot그 후 리스트 오른쪽의 + 를 클릭 해 어떤 입력이 있을때 액션으로 간주할 지 설정한다.다음과 같이 WASD와 방향키를 둘 다 입력으로 설정할수도 있다.   [물리엔진]고도는 3가지 physics body 를 제공한다.StaticBody2D: 정..

토이프로젝트 2024.09.23

고도 엔진으로 게임 만들기 #4: 효과, 아이템, 장애물 등

이번 편에서 할 것게임 기능과는 무관하지만 있으면 게임을 풍성하게 만들어줄 juice 요소들 추가하기그리고 마지막으로 배포하기  [이펙트]동전을 주울때 크기가 커졌다가 사라지는 효과를 줄 것이다.트위닝(=이징) 예제는 다음 링크를 참고하면 여러가지 예제를 볼 수 있다.https://easings.net/ 그런데 플레이어가 동전에 닿은 순간 동전이 바로 제거되지 않으면 곧바로 area_entered 시그널이 다시 트리거되어 점수가 중복으로 증가 되어버린다.이때문에 collision shape 를 비활성화해서 동전이 충돌이 트리거되지 못하게 해야한다.coin 의 pickup 함수에 코드를 추가해보자.func pickup(): $CollisionShape2D.set_deferred("disabled", tru..

토이프로젝트 2024.09.20

고도 엔진으로 게임 만들기 #3: 유저 인터페이스

[미리보기]이번 편에서는 시간이나 점수 같은 유저 인터페이스를 업데이트 해서 보여주고, Game Start & Game Over 를 구현할 것이다.    [사용자 인터페이스]이번에는 사용자 인터페이스를 만들 차례다.점수, 시간, 게임 오버 메시지, 시작 버튼 등이 그려질 것이다. [새 씬]으로 새로운 씬을 생성한 뒤 CanvasLayer 노드를 추가해 주자.CanvasLayer 에 그리는 UI 요소는 다른 요소들의 위에 위치해서 다른 게임 오브젝트로 가려지지 않는다. 만든 노드의 이름은 HUD (Heads-Up Display)로 변경한다.   (1) 게임 타이틀Label 노드를 추가한다. 이 노드는 게임 제목이 될 것이기 때문에 화면 중앙에 위치할 것이다.직접 조정해도 되지만 [앵커 프리셋] 에서 '가로..

토이프로젝트 2024.09.18

고도 엔진으로 게임 만들기 #2: 동전씬과 메인씬

[미리보기]이번 편에서 할 것: 플레이어가 모을 동전 씬과 게임 요소들이 그려질 수 있는 메인 씬 만들기   [동전 씬 만들기]Player 씬을 만들었던 것처럼 Coin 씬을 만들어보자. [씬] - [새 씬] 으로 동전 씬을 만든다.Player와 동일하게 노드를 만들어준다. Area2D 노드를 만든 후 자식으로 AnimatedSprite2D, CollisionShape2D 노드를 만들어준다.Area2D 는 Coin으로 이름을 변경해주자. 그 후 반드시 저장을 해서 coin.tscn 파일로 저장을 해주자.    [애니메이션]여기까지 완료되면 애니메이션을 추가할 차례다.플레이어와는 다르게 동전은 한가지 애니메이션만 있으면 된다.동전을 반짝여 보이게 해 줄 애니메이션용 이미지를 추가해준다.  ([불러오면 자동..

토이프로젝트 2024.09.14