Contents

如何在 Godot 中添加隨機移動對象

在遊戲開發中,隨機性和不可預測性元素可以極大地促進整體遊戲體驗。引入此類元素的一種特殊方法是通過隨機移動對象,這增加了額外的交互和挑戰層。

人們可以利用 GDScript(Godot 的本土編程語言)在與 Godot 合作的同時實現這一結果。

設置你的 Godot 遊戲

首先,通過創建新的 2D 場景並結合

本出版物中使用的源代碼可以通過特定的 GitHub 存儲庫訪問,該存儲庫授予用戶在 MIT 許可證的支持下免費使用它的權限。

CollisionShape2D 模塊將通過定義的碰撞邊界實現與遊戲對象的交互,以及具有視覺吸引力的 Sprite2D 組件,它將作為虛擬環境中玩家角色的美學表現。

為了使角色具有運動感,可以使用以下用 GDScript 編寫的代碼片段:

 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)

為了在所有方向上為玩家的角色建立統一的速度,有必要引入一個命名變量“速度”,它將作為用戶輸入時角色的默認速度。可以通過調用“_physical\_process(delta)”函數來調整該值,該函數根據對操縱桿或鍵盤輸入所做的任何更改來調節主角的運動。通過在應用這些修改之前標準化角色的速度和方向,我們可以創建均勻節奏的體驗,而不管玩家選擇的軌跡如何。

/bc/images/simple-player-in-godot-game.jpg

使用 StaticBody2D 創建靜態對象

為了促進遊戲主角與其環境之間的交互,必須在 Unity3D 中生成可由用戶操作的動態實體。實現此目的的一種方法是利用 Unity 的網格渲染器工具集提供的 StaticBody2D 組件。此功能允許開發人員將碰撞器和物理屬性分配給場景中的各種元素,使他們能夠有效地模擬與這些對象的交互。通過利用 StaticBody2D 的強大功能,設計師能夠在沉浸式虛擬世界中將他們的創意願景變為現實。

 extends StaticBody2D

func _ready():
    var collision_shape = CollisionShape2D.new()
    collision_shape.shape = RectangleShape2D.new()
    add_child(collision_shape) 

為靜態物體添加隨機移動算法

為了在主要由固定元素組成的遊戲中引入不可預測的元素,人們可以通過採用一種簡單的基於機會的方法來實現基本的隨機移動系統。

 extends StaticBody2D

var speed = 100
var value = randf_range(-1, 1)
var direction = Vector2(value,value).normalized()

func _physics_process(delta):
    position \+= direction * speed * delta 

為了使您的靜止實體具有特定的速度,請指定其速度。此外,建立一個 Vector2 方向並通過在兩個維度上隨機生成-1 和 1 範圍內的數字作為軸值來初始化它。

在物理過程函數中,通過將代表其方向的向量乘以其速度和時間增量的標量值來增加對象的位置,從而使對像根據其指定的速度沿其軌跡前進。

靜態物體的隨機位置和軌跡

為了增強機會和自發性的元素,建議您不僅改變視覺元素的速度和方向,還要引入其起點和軌跡模式的多樣性。

 extends StaticBody2D

var speed = randf_range(50, 150)
var value = randf_range(-1, 1)
var direction = Vector2(value,value).normalized()

func _ready():
    var val1 = randf_range(0, get_viewport().size.x)
    var val2 = randf_range(0, get_viewport().size.y)
    position = Vector2(val1, val2)

func _physics_process(delta):
    position \+= direction * speed * delta 

在此實現中,在“_ready()”方法內部初始化期間,射彈的速度被設置為每秒 50 到 250 像素的隨機值。此外,彈丸的起始位置是在畫布尺寸的邊界內隨機選擇的。隨後,與之前的迭代類似,通過基於“_physical_process(delta)”方法中的物理處理更新其位置來維持射彈的運動。

/bc/images/random-moving-objects.jpg

調整速度、方向和隨機性

為了增強遊戲中的交互性和沈浸感,人們可以通過使用 GDScript 來操縱各種參數,例如靜止元素的速度、方向和運動的不可預測性。這允許創建可以豐富遊戲體驗的動態控制機制。

 extends StaticBody2D

var speed = randf_range(50, 150)
var value = randf_range(-1, 1)
var direction = Vector2(value,value).normalized()
var speed_variation_rate = 0.5
var direction_variation_rate = 0.5

func _ready():
    var val1 = randf_range(0, get_viewport().size.x)
    var val2 = randf_range(0, get_viewport().size.y)
    position = Vector2(val1, val2)

func _physics_process(delta):
    randomize_speed_and_direction()
    position \+= direction * speed * delta

func randomize_speed_and_direction():
    if randf() < speed_variation_rate:
        speed = randf_range(50, 150)

    if randf() < direction_variation_rate:
        direction = Vector2(value, value).normalized() 

針對隨機移動物體的附加功能

考慮結合各種先進的機制來完善和豐富您的遊戲體驗。一些可能性包括:

### 顏色變化

同樣,為了在遊戲中引入更生動、更具視覺吸引力的元素,人們也可以操縱視覺元素的速度和方向。這可以通過使用“modulate”屬性調整精靈的顏色屬性來實現。

 sprite.modulate = Color(randf(), randf(), randf()) 

尺寸變化

遊戲元素維度的隨機變化引入了進一步的複雜性和不確定性,要求玩家不斷修改策略以應對這些變化。可以修改每個項目的縮放屬性來實現此效果,從而為玩家提供了需要克服的額外挑戰。

 sprite.scale = Vector2(randf_range(0.5, 2.0), randf_range(0.5, 2.0)) 

對像生成

考慮結合一種基於特定標准或重複事件定期生成附加對象的機制,而不是維護預定數量的動態移動實體。這種方法會帶來額外的挑戰,因為玩家必鬚根據視野中不斷湧入的新元素來修改自己的策略。

對象壽命

為了保持整潔的視覺顯示並保持遊戲體驗的新穎性,遊戲內的對像有可能在預定的持續時間過去後自毀。

互動

在遊戲玩法中融入互動元素是一個好主意。與物體碰撞等交互可能會導致各種效果,例如增加玩家的分數、改變他們的速度或修改遊戲環境本身。此外,實施諸如允許玩家站在平台上跳躍之類的動作將增加交互性的另一個維度。

添加隨機移動對象的最佳實踐

為了在遊戲中融入隨機運動元素時創造身臨其境且引人入勝的體驗,遵守某些推薦的指南對於實現最佳結果至關重要:

性能考慮因素

雖然在遊戲中加入大量元素可能很誘人,但必須記住,添加更多對象會增加遊戲引擎的計算負擔。因此,評估遊戲在目標硬件上的性能以確保不會出現性能下降至關重要。

平衡隨機性和可玩性

在隨機元素和可預測的遊戲玩法之間取得平衡對於創造一種不會變得壓倒性或令人沮喪的引人入勝的體驗至關重要。為了達到這種平衡,應該對各種參數進行徹底的測試,確保挑戰和樂趣都以適當的方式呈現。

碰撞和響應

確保正確處理碰撞對於防止玩家角色和其他遊戲對象之間發生不可預見的交互至關重要。由於隨機運動可能導致各種潛在的碰撞情況,因此在開發過程中預測此類情況並進行徹底的測試以解決這些問題非常重要。

視覺清晰度

為了增強遊戲中隨機移動對象的可見性,重要的是它們與背景和屏幕上存在的任何非交互式元素形成有效對比。這使玩家能夠輕鬆了解當前的遊戲狀態並根據需要製定策略響應。實現這種效果的一種可能方法涉及以聲音效果的形式結合獨特的視覺提示或音頻提示,這有助於將這些對象與其周圍環境區分開來,從而提高玩家的意識。

隨機移動物體對 Godot 遊戲的影響

戈多遊戲中隨機移動的元素可以通過引入不可預測性和新穎性來極大地提高其參與度。這些元素的不斷變化的排列有助於提高遊戲的重玩價值,確保每次新的遊戲都為玩家提供新鮮的體驗。

此外,鑑於移動元素的軌跡是不可預見的,玩家必須保持高度的注意力和敏捷性,以便有效地在遊戲環境中進行操作。