當玩家腳色掉落時,會出現一畫面跑離關卡的問題。會出現這樣情況原因如下。
- 攝影機跟隨玩家但沒有限制範圍
- 掉入後沒有世界邊界限制玩家
攝影機跟隨玩家但沒有限制範圍
這個問題只要限制攝影機可以動範圍就可以達成。

如圖所示,只要在攝影機的 “Limit” 中設定限制範圍就好。由於腳色是會往下掉,所以只要設定其中 “Bottom” 即可。
至於要設定多少就要根據關卡的底部自行拿捏,這邊可以使用一個尺標工具,這樣可以很快地知道大約要抓多少PX。

工具就如圖所示,快捷鍵為 R。可以輕鬆的抓出大概PX與角度。
只要設定好攝影機限制,當腳色掉下去,就不會讓玩家看到灰色的未建置區塊。
掉入後沒有世界邊界限制玩家
另一個最大問題就是,當腳色掉落會無止境往下掉。所以需要一個世界邊界區塊,當玩家碰到區塊就要觸發死亡重置。
由於世界邊界可以看成一個可碰撞的節點,只是這節點的碰撞範圍是無止境,所以結構如下。
Killzone(Area2D) ← 角色根節點
├── Timer ← 等待多久後執行重置
└── CollisionShape2D ← 碰撞框
由於世界邊界與金幣類似,所以用 Area2D 作為根結點,因為沒有要移動。再來就是要添加一個碰撞偵測的 CollisionShape2D ,但與金幣不一樣的是,在屬性面板要選擇 WorldBoundaryShape2D,這就是可以無限延生的區塊。
同時不要忘記 Area2D 的碰撞層與碰撞遮罩設定。
再來就是 Killzone 的腳本
extends Area2D
// 這邊要載入 Timer 是用來當碰到死亡區後不會馬上觸發
// @onready var timer: Timer = $Timer 可以用滑鼠按住並拖拉到腳本上,再放開滑鼠前用 ctrl 在放開,就可以生成語法,不然只會顯示一個 TIMER
// $Timer 路徑是根據節點層級顯示的
@onready var timer: Timer = $Timer
// 當物體進入 死亡區 觸發
func _on_body_entered(body: Node2D) -> void:
print("dead")
Engine.time_scale = 0.5 // 調慢整體世界時間; 死亡效果
body.get_node("CollisionShape2D").queue_free() // 讓進入_on_body_entered的節點清除CollisionShape2D
timer.start()
func _on_timer_timeout() -> void:
print("timer out")
Engine.time_scale = 1 //恢復世界時間
get_tree().reload_current_scene()
get_tree().reload_current_scene()
在 Godot 中的作用是 重新載入當前場景,相當於「重新開始這一關」,會把場景恢復到初始狀態。
使用情境
- 玩家死亡後重新開始關卡
- 重置場景中所有物件到最初狀態
- 測試開發時快速重新載入場景

關於 Timer 的設定則是在屬性面板設定。可以看到等待了0.5秒且只觸發一次。

上圖顯示了 路徑結構