1. Coin 만들기
- new scene > Area2D(Coin) 노드추가, Coin Image추가
- CollisionShape2D추가, circle shape 선택 후 사이즈 조정합니다.
- AnimationPlayer추가 (Objects폴더 생성 후 scene저장)
- animation - new animation: bouncing
- timeline 오른쪽에 시간을 1.8로 전체 애니메이션 시간을 설정
- timeline 오른쪽의 반복기능 on
- 뷰포트의 rotation mask for inserting keys를 언체크함
- 뷰포트의 Translation mask for inserting keys만 체크함
- Coin 노드 선택 후 ins키나 뷰포트의 key를 누르면 애니메이션에 key가 추가됨
- 0.9초에 key frame추가 후 y 값을 -10으로 설정
- 첫 key frame의 y값을 +10으로 설정
- 첫 프레임의 easing 진동하는 속도...를 상향 조정한다.
- 두번째 프레임의 easing 을 하향 조정한다.
- animation time을 1.2로 수정하여 짧게 변경하고, 두번째 프레임의 위치도 중간인 0.6정도로 위치를 변경합니다.
- animation - new animation: fade_out 애니메이션을 추가합니다.
- Coin(Area2D)선택
- transform에서 원점인지 확인 후 작업을 진행합니다.
- canvasItem > visibility > modulate 오른쪽의 key를 클릭하여 0에서, 0.6초에서 프레임을 추가하면 Modulate속성이 애니메이션에 추가됩니다.
- 0.6초로 key frame이동 후 Modulate 오른쪽의 key를 클릭 후 alpha를 0으로 수정
- animation 시간을 0.6초로 변경
- shift+D로 프리뷰 가능
- bouncing에서 첫 프레임에 modulate에서 key 추가하여 alpha 100%를 추가
- fade_out에서 마지막 프레임에 add track버튼 - call method track 버튼 - method 추가
- coin(Area2D)노드 선택 후 프레임의 오른쪽클릭 후 insert method 클릭
- queue free()선택
- Coin 스크립트 추가
extends Area2D
onready var anim_player: AnimationPlayer = get_node("AnimationPlayer")
#_ready 실행하기 전에 실행
func _on_body_entered(body:PhysicsBody2D) ->void:
anim_player.play("fade_out")
- Coin에서 layer는 coin, Mask는 player로 선택
- signal 추가: body_entered(PhysicsBody2D body)
- bouncing 클릭 후 오른쪽의 버튼을 누르면 기본 animation으로 선택됨
- 여기까지 따라하면 코인의 움직임이 안보입니다. animation이 Coin(Area2D)에 설정되어있어서 Play를 시작하면 animation이 원점에서 실행되고 있습니다. 이를 방지하려면 coin(sprite) 노드가 애니메이션되도록 해야합니다. 코인의 AnimationPlayer노드로 가서 ".:position" 으로되어있는 부분을 "coin:position"으로 바꿔줍니다.
- fade_out 에니메이션을 0.4초로 변경
2. Portal 생성
- Portal2D(Area2D)노드를 추가하고 Portal 이미지를 추가합니다.
- CollisionShape2D 추가
- CapsuleShape 설정
- TransitionLayer(canvaslayer) 노드를 추가해주고, 다른 어떤 것보다도 앞에 있어야하므로 Layer 값을 +100 정도로 설정해줍니다.
- TransitionLayer에 ColorRect 노드를 추가하여 Black으로 색깔 변경하고(layout-Full rect)하고 alpha는 0으로하여 기본적으로는 안보이게 설정합니다.
- AnimationPlayer 추가
○ start애니메이션 추가. 시작될 때 검은 화면이 다시 투명하게 바꾸는 역할을 하는 애니메이션입니다.
○ autoplay 체크
○ ColorRect선택-color key 지정(투명, 처음엔 안나타나게)
○ Visible: off(value: off)로 선택하고 key 지정
○ 지속시간은 0으로 하여 한번 투명하게 값을 설정하고 끝내도록 합니다.
○ fade_in애니메이션 생성 (START애니메이션 복제(Ctrl+D))
Q Visibility는 On
○ 지속시간 1초
○ 1초에 key frame 추가 - color 선택에서 alpha 255%(블랙)으로 설정 후 키 추가
- Portal2D Monitoring: on, Monitorable: off, Layer: none, Mask: player 로 설정
3. Portal 스크립트
tool
extends Area2D
onready var anim_player: animationPlayer = $AnimationPlayer
export var next_scene: PackedScene
func _on_body_entered(body: PhysicsBody2D) -> void:
teleport()
func _get_configuration_warning() -> String:
return "The next scene property can't be empty" if not next_scene else ""
func teleport() ->void:
anim_player.play("fade_in")
yield(anim_player, "animation_finished") #anim_player가 끝나서 animation_finished 시그널을 보낼 때까지 기다림
get_tree().change_scene_to(next_scene)
- nextscene을 export로 추가하고, 없으면 에러메세지 popup띄우는 기능 추가
- teleport함수 추가
- body_entered(PhysicsBody2D body) 시그널 연결 : _on_body_entered
- Level을 우선 복제하여 테스트
#참고로...터치패드에서 대량으로 tilemap을 지울 때에는 우클릭에 해당하는 두손가락 클릭을 하는데,,,한번하면 생성, 두번하면 삭제
#한손가락은 패드도 눌러야하고, 검지손가락은 터치도 해야함...두번씩....
'Programming > Godot' 카테고리의 다른 글
Godot 시작하기#2 - Mob Scene (0) | 2021.12.22 |
---|---|
Godot 시작하기#1 - 프로젝트 설정 및 Player Scene (0) | 2021.12.22 |
고도 엔진 횡스크롤 게임 예제 (Godot Platformer) - 3 (0) | 2020.01.29 |
고도 엔진 횡스크롤 게임 예제 (Godot Platformer) -1 (0) | 2020.01.29 |
고도 엔진 횡스크롤 게임 예제 시작하기 (Godot Platformer) (0) | 2020.01.29 |