Godot 遊戲引擎關鍵字指南 (3.x)
- 關鍵字
Godot 中的關鍵字是 GDScript 中使用的特殊詞語。不幸的是,其中一些詞語在 Godot 的類文件中沒有詳細記錄。
break 關鍵字結束迴圈程式碼段。對於“永遠”迴圈很有用。
var counter = 0 while true: counter += 1 if counter == 15: break
這將在程式碼執行 15 次後結束迴圈。
continue 關鍵字用於迴圈內部。類似於 break,continue 跳過迴圈的單次執行。就像中斷它一樣,但它不是結束整個迴圈,而是隻跳過單次迭代。
for num in range( 1,5 ): if num == 4: continue print( num )
上面執行 5 次。Num 分別為 1、2、3、4 然後是 5。如果 num 為 4,它將“繼續”迴圈。否則它將列印。所以 4 不會被列印,但 1、2、3 和 5 會被列印。
const 關鍵字可以用來代替 var 來建立一個 常量,一個 不能 更改的值。
與變數不同,常量可以在 靜態函式 中使用。
enum {
DRAW_MODE_PEN,
DRAW_MODE_FILL,
DRAW_MODE_ERASER,
DRAW_MODE_LINE,
DRAW_MODE_BOX,
DRAW_MODE_SHADING,
DRAW_MODE_CONTRAST,
DRAW_MODE_BLEND
}
上面的程式碼是我以前在 Godot 中製作的影像編輯器的程式碼片段。它顯示了可能的繪製模式,如線條和填充,作為 命名整數 以便於程式碼除錯。
不要與 匯出 混淆。export 關鍵字是一個非常強大的關鍵字。
它允許在 Inspector 視窗中編輯值,並且它為每個例項儲存更改。
對於基本示例,請嘗試 export var max_health:int。
你甚至可以使用模板和範圍
# This allows a range of 0 to 100 with a step of 2 export ( int, 0, 100, 2 ) var number = 50 # This allows linking a file path export ( String, FILE ) var file_path # This asks for a file path that ends with ".json" or ".md" export ( String, FILE, ".json;Json file, .md;Mark Down file" ) var specific_extension_file_path # You can also try "String" with this one export ( int, Number1, Number2, Number3 ) var dropdown_menu_int = 0 # This creates a slider to change the float with a step of 0.0001 export ( float, 0, 1, 0.0001 ) var float_with_range = 0.5
extends 關鍵字告訴 Godot 指令碼繼承了給定物件的屬性。
它必須位於指令碼的最頂部。只有 tool 可以放在它之前。
for 關鍵字在給定值的每個專案之後執行其縮排的程式碼塊。
for i in ["Hello", "I", "am", "human", 1, 2, 3]: print( i )
通常用於 if 語句 中。如果其前面的值 在 其後面的值 內部,它將評估為真。它可以檢查
- 如果一個值在陣列中
- 如果一個鍵在字典中
- 如果一段文字包含另一段文字
- 如果一個物件包含一個具有相同名稱的屬性或常量
以及其他事物。"h" in "Hello" 將為假。“Hello” 中沒有小寫字母“h”。如果你想要進行不區分大小寫的搜尋,請對兩個值都呼叫 to_lower() 將每個字母轉換為小寫(或 to_upper() 用於大寫 - 全部大寫)。
通常用於 if 語句中。它檢查其前面的值是否為其後面的型別。
print( "Hello" is String ) # True print( 52434 is int ) # True print( bool( "52434" ) is bool ) # True print( load( "res://icon.png" ) is StreamTexture ) # True print( load( "res://icon.png" ) is Texture ) # True
好的,load 在技術上是在 全域性範圍 中描述的。但是,它被明確定義為關鍵字,因此如果它不在此,將毫無意義。
它在被呼叫時從你的檔案系統載入檔案。它接受一個引數:檔案路徑。
檔案路徑 必須相對於你的專案資料夾 或玩家儲存資料夾,並且 不能超出!
有效示例
load( "res://assets/weapons/sword.png" ) load( "res://entities/chicken_egg.tscn" ) load( "user://custom_entities/mutant_monster.tscn" )
res 指向你的專案資料夾。user 指向玩家的儲存資料夾。這通常是 %appdata%/roaming/godot/app_userdata/<project_name>,除非 ProjectSetting Config/Use Custom User Dir 和 Config/Custom User Dir Name 被設定,在這種情況下,它將是 %appdata%/roaming/<ProjectSettings:Config/Custom User Dir Name>。
master 關鍵字是 5 個多玩家關鍵字系列的一部分。如果使用它,它將使只有“master”呼叫函式。
remote master func take_damage( damage ): health -= damage rpc( "set_health", health )
你不應該在 傀儡 上呼叫它,以幫助防止錯誤。
onready
[edit | edit source]onready 關鍵字放在 var 關鍵字之前。它允許使用在 _ready() 函式呼叫之前設定的動態數字。
onready var random_number = randi( )
pass
[edit | edit source]pass 關鍵字用作空白程式碼行。在 "if" 語句或 "for" 語句之後或在函式宣告之後使用它,以作為 "程式碼塊"(消除錯誤),而不執行任何操作。這被稱為 "空" if 語句或 "樁函式"。
if true: pass
preload
[edit | edit source]參見 load。檔案可以相對於呼叫它的指令碼或 "res"。當指令碼載入時,資源會被載入,從而防止在遊戲執行過程中出現停頓。但是,檔案**必須**存在,否則會發生錯誤,並且路徑**必須**是常量(即:不可更改)。
res://game/game.gd
preload( "entities/thing.tscn" )
或
preload( "res://game/entities/thing.tscn" )
puppet
[edit | edit source]puppet 關鍵字是 5 個多玩家關鍵字中的一個。在 "func" 之前但 "remote" 之後使用它。它使函式只調用 非主機。
remote puppet func set_health( v ): health = v
為了阻止玩家作弊,你不想將它呼叫到 主機。
remote
[edit | edit source]在 "func" 關鍵字之前使用 remote 關鍵字,以允許在呼叫 "rpc"、"rpc_id"、"rpc_unreliable" 或 "rpc_unreliable_id" 時,在多玩家環境中被其他對等體遠端呼叫函式。注意作弊和安全威脅!
func hit( ): health -= 1 rpc( "player_hit", health ) remote func player_hit( hp ): if get_tree().get_rpc_sender_id( ) != get_network_master( ): return # This means a player is trying to cheat health = hp
有關更多資訊,請參閱 puppet 和 master。使用 remotesync 在本地以及透過網路呼叫函式。
警告:如果您不新增阻止它們的檢查,惡意駭客可以使用您的遊戲檢索或刪除資料,或者玩家可以作弊。除非您知道自己在做什麼,否則不要在刪除或建立檔案的函式中新增 remote。
remotesync
[edit | edit source]參見 remote。此關鍵字還會在本地呼叫函式,而不是僅透過網路呼叫它們。對於告訴其他對等體以及主機角色已跳躍的情況很有用。
return
[edit | edit source]return 關鍵字用於結束函式。對於被呼叫並 "返回" 值的函式,return 關鍵字是返回值的地方。
func get_some_value( ): return "some string"
它還會結束函式呼叫,因此可以在 if 語句中使用它來跳過函式的其餘部分。它不需要返回值,預設情況下返回 null。
setget
[edit | edit source]在 變數 宣告的末尾使用。語法:var points = 0 setget set_points get_points。getter 是可選的。setter 必須有一個引數(要設定的值),而 getter 必須返回一個值。例如
export var points = 0 setget set_points get_points func set_points( value ): points = value func get_points( ): return points
static
[edit | edit source]通常,要呼叫物件的函式,您需要它的例項。如果在 "func" 關鍵字之前使用 static 關鍵字,您將能夠從非例項呼叫它。但是,您只能使用其他靜態函式或全域性範圍內的函式。您不能使用成員 變數。
在以下示例中,Weapon 是一個自定義的 資源。
- Weapon.gd
extends Resource class_name Weapon export var damage = 5 const DAMAGE = 5 static func get_damage( ): # Cannot use an outside variable here return DAMAGE # Can use a constant though
Weapon.new( ).get_damage( ) 變為 Weapon.get_damage( ),如果您想查詢值,則可以節省記憶體和 CPU 資源。
tool
[edit | edit source]tool 關鍵字告訴 Godot 指令碼在編輯器中執行。這類指令碼通常被稱為工具指令碼。如果指令碼僅在指令碼編輯螢幕中開啟,則它不會執行。它必須附加到場景中的節點,或者具有指令碼的節點必須在編輯器中。
它必須始終放在extends關鍵字之前。
如果您有一個工具指令碼,它繼承的指令碼和繼承它的指令碼將不會執行,除非它們也是工具指令碼。所有節點本身都在編輯器中執行,但只有在使用編輯器外掛將其放置到其介面中時才會執行。
var
[edit | edit source]var 關鍵字建立一個變數。當它們離開作用域(例如,縮排的程式碼塊取消縮排)時,它們會自動從記憶體中釋放。
var global_varible := 1 func _ready(): some_function(7) func some_function(argument): print(argument) print(global_variable) var temporary_variable = 2 print(temporary_variable) if true: var another_variable = 3 print(another_variable) print(temporary_variable) print(another_variable) # Error: the identifier "another_variable" isn't declared in the current scope, since it is not declared in an lower indentation.
while
[edit | edit source]while 關鍵字在其之後執行縮排的程式碼塊,直到它之後的 if 語句不再為真。如果它一開始為假,則不會執行。
var i = 0 while i < 50: print(i) i += 1
yield
[edit | edit source]目前,yield 接受 2 個引數:一個物件和一個訊號名稱(作為字串)。呼叫它將等待,直到從該物件呼叫該訊號。
print(1) # Creates a 1 second timer yield(get_tree().create_timer(1), "timeout") print(2)


