如何在 Godot 中創建 2D 遊戲的相機系統
精心設計的攝像頭機制有可能讓玩家沉浸在虛擬環境中,並增強對周圍環境的感知。在這種能力下,攝像頭可以作為玩家視覺視角的延伸,促進整個遊戲體驗中的導航和交互。
在 Godot 領域內實現相機機制為在遊戲過程中捕獲視覺效果提供了直觀且強大的解決方案。該過程包括毫不費力地引導攝像頭跟踪玩家的移動,將其軌跡限制在遊戲環境的範圍內,並採用動態調整(例如縮放和調整大小)來響應遊戲中發生的情況。
創建一個簡單的遊戲
為了啟動該過程,需要在 Godot 遊戲引擎內建立一個二維遊戲環境,並創建一個通過攝像機的跟踪功能可見的角色。
為了創建一個二維遊戲環境,需要建立一個新的2D場景並在該設置中引入一個CharacterBody2D對象。該CharacterBody2D實體的功能將是代表虛擬世界中的化身或玩家角色。為了實現這個目的,我們必須在CharacterBody2D中嵌入一個CollisionShape2D組件。至關重要的是,我們將 CollisionShape2D 的形狀指定為 RectangleShape2D,這將允許玩家與環境中存在的其他對象之間進行交互,從而使玩家角色在遊戲空間中具有有形的存在。
本出版物中使用的源代碼可以通過 GitHub 存儲庫訪問,該存儲庫作為開放訪問平台,供用戶根據 MIT 許可證條款自行決定使用。
MonoBehaviour{公共 float moveSpeed=5f;私有 Rigidbody2D rb;私有 BoxCollider2D boxCollider;私有 SpriteRenderer spriteRenderer;私有圖像 img;私有 Vector3 targetPos;私有 bool isGrounded=false;私有 bool canDoubleJump=true;void Start(){rb=GetComponent () ;boxCollider=GetComponent();spriteRenderer=GetComponent();img=
extends CharacterBody2D
var speed = 200
func _physics_process(delta):
var velocity = Vector2()
if Input.is_action_pressed('ui_right'):
velocity.x \+= 1
if Input.is_action_pressed('ui_left'):
velocity.x -= 1
if Input.is_action_pressed('ui_down'):
velocity.y \+= 1
if Input.is_action_pressed('ui_up'):
velocity.y -= 1
velocity = velocity.normalized() * speed
move_and_collide(velocity * delta)
利用此實現,化身角色現在能夠跨多個軸導航,並將與遇到它們的基礎進行交互。
實現跟隨攝像頭系統
為了實現實時跟踪角色運動的相機,我們需要添加一個“Camera2D”組件作為“CharacterBody2D”的子組件。通過這樣做,相機將自動調整其位置和方向以匹配角色的動作。此外,為“Camera2D”啟用“位置平滑”選項可能會有所幫助,這有助於提高遊戲過程中攝像機移動的平滑度。
$Camera2D.enabled = true
$Camera2D.position_smoothing_enabled = true
實現相機邊界和限制
在實現視頻遊戲時,調節玩家的視角以確保只有遊戲世界中的相關內容可見是至關重要的。如果不這樣做,可能會導致遊戲環境邊界之外的區域意外暴露,其中可能包括空白區域或不完整的部分。
Godot 提供了一種在遊戲世界範圍內建立攝像機移動和位置邊界的便捷方法,從而可以更受控和更精確地操縱玩家的視角。
Camera2D 類在其屬性中擁有多個參數,這些參數在二維空間中建立了視覺透視的範圍。這些參數包括左右移動以及上下移動的限制,分別由變量 limit\_left、limit\_top、limit\_right 和 limit\_bottom 表示。分配給這些參數的具體值可以基於遊戲內虛擬環境的尺寸來調整。
$Camera2D.limit_left = 0
$Camera2D.limit_top = 0
$Camera2D.limit_right = your_game_area_width
$Camera2D.limit_bottom = your_game_area_height
調整變量“your\_game\_area\_width”和“your\_game\_area\_height”以與遊戲環境的尺寸相對應,使該腳本能夠將相機的視角限制在指定的邊界內,為用戶帶來整潔、集中的遊戲體驗。
處理相機縮放
動態縮放和比例可以通過精確調整來強調遊戲中的關鍵時刻,從而有效地促進迷人的遊戲體驗。此類實例可能包括通過特寫鏡頭關注主角的重要動作,或擴大視角以顯示強大的對手或虛擬環境的令人驚嘆的景色。
圖片來源:Xbox Game Studios/orithegame.com
通過利用與 Godot 中的“Camera2D”節點關聯的“zoom”屬性,可以促進視覺透視的放大和縮小的實現。上述屬性被表徵為Vector2,其初始值為(1, 1),對應於默認的放大級別。提高該值將導致觀察視野擴大,從而縮小所描繪元素的表觀尺寸;另一方面,減小該值將導致顯示頻譜收縮,導致所表示項目的幅度放大。
要放大,您可以使用:
$Camera2D.zoom = Vector2(0.7, 0.7)
要重置縮放,請使用:
$Camera2D.zoom = Vector2(1, 1)
提供給 Vector2 函數的參數決定了沿 x 軸和 y 軸的放大程度。代表每個軸上 0.7 放大倍數的一對坐標會產生更近的視圖,而每個軸上代表 1.5 的放大倍數會產生更遠的視角。
通常建議您通過在兩個軸上保留一致的值來保持縱橫比的均勻性;然而,人們可以探索各種排列,以產生獨特的結果和視覺效果。
包括附加功能
將各種增強功能融入相機系統的設計中,有可能顯著改善整體遊戲體驗。
相機抖動
在許多視頻遊戲中,特別是平台類型的遊戲中,普遍採用的技術是相機抖動。此效果通常用於在遊戲中的重大事件(例如爆炸或強大的角色動作)期間喚起衝擊感和強度感。
為了將產生“搖動”效果的功能合併到被稱為Godot 的遊戲引擎中,人們可以創建一個定制的“shake()”函數,該函數允許根據特定的情況操縱各種參數,例如持續時間和強度。-遊戲發生。
攝像機聯動音效
音頻提示的利用可以通過喚起強烈的空間意識和動態感覺,顯著有助於創造身臨其境的遊戲體驗。此類效果的範圍可能包括使用極簡主義聲音元素,例如在相機快速移動期間加入“嗖嗖”噪音,到對環境氛圍進行更複雜的操縱,其中背景音樂和音景的音量或音調根據相機的位置進行調整或放大倍數。
一種可能的方法是根據視覺視角的變化來調整音頻級別。例如,當相機遠離拍攝對象時,通過減小軌道的音量,可能會產生空間深度和距離的錯覺。
動態光照
視頻遊戲中的動態光照效果可以根據攝像機的移動進行調整。當相機穿過虛擬景觀時,可以通過照明的變化來強調不斷變化的環境以及對某些區域或對象的強調。
增強該鏡頭視覺元素的一種可能方法是,當攝像機深入到海綿狀空間時調暗周圍區域的燈光,或者使用聚焦光束照亮重要物品。
相機過渡效果
有幾種方法可以在多個攝像機角度之間創建無縫過渡,包括稱為“剪切”的立即編輯,其中視覺視角突然從一個攝像機轉移到另一個攝像機,或者稱為“淡入淡出”的漸進變換。圖像巧妙地從一個相機的角度融合到另一個相機的角度。
可以通過合併補充代碼和動畫來採用更先進的技術,例如擦除、幻燈片和虹膜,以增強其在項目中的執行。
添加攝像頭系統的最佳實踐
在視頻遊戲中集成攝像頭系統是一個重要方面,可以顯著影響用戶體驗。為了保證最佳性能和沈浸感,在實現此功能時遵循某些最佳實踐至關重要。
避免相機突然移動
確保不同攝像機視角之間的無縫過渡對於保持玩家在遊戲體驗中的沉浸感至關重要。視角的突然變化可能會導致混亂或分心,從而可能干擾遊戲流程。因此,建議優先考慮平滑且漸進地調整攝像機位置,以避免任何可能妨礙遊戲整體享受的此類干擾。
限制相機抖動
在視頻遊戲中加入相機抖動時一定要保持克制,因為過度使用這種技術可能會損害玩家跟隨動作的能力,並導致不愉快的遊戲體驗。因此,建議明智且適度地使用相機抖動,以達到所需的效果,同時保持玩家的最佳遊戲舒適度。
測試不同的縮放級別
體育視頻遊戲中視野的調整可能會因各種因素而異,例如正在玩的特定遊戲或場景。進行徹底的測試以確定每種獨特情況的最佳縮放級別非常重要。
仔細考慮相機範圍
在確定關卡中攝像機的位置時,必須考慮整體設計和預期體驗。必須仔細考慮,以確保玩家始終沉浸在遊戲世界中,而無法超越其限製或忽略框架之外可能存在的關鍵細節。
優先考慮玩家體驗
攝像頭系統的優化對於通過提供最佳視覺視角、突出關鍵實例以及促進遊戲環境中的導航來增強整體玩家體驗至關重要。
通過攝像頭系統讓 Godot 遊戲更具吸引力
執行穩健的攝像頭系統能夠通過強調動作序列、增強敘事元素以及為玩家營造越來越身臨其境的環境來提升遊戲體驗的整體質量。
通過仔細操縱呈現給玩家的視覺信息及其時機,人們可以有效地指導他們在整個遊戲環境中的進展,同時增強體驗的整體興奮度和互動性。