परिचय: कीवर्ड्स से एनोटेशन तक
Godot 4 ने कई GDScript कीवर्ड्स को @-प्रीफ़िक्स वाले एनोटेशन से बदल दिया है। यह GDScript के सिंटैक्स को अधिक स्वच्छ और सुसंगत बनाने के एक बड़े प्रयास का हिस्सा था। तीन सबसे महत्वपूर्ण बदलाव हैं:
export→@exportonready→@onreadytool→@tool
एनोटेशन को उस घोषणा से पहले वाली पंक्ति में (या उसी पंक्ति में) रखा जाता है जिसे वे संशोधित करते हैं। Godot 4 ने @export_range, @export_group और @export_category जैसे कई नए एनोटेशन वैरिएंट भी पेश किए, जो Godot 3 में नहीं थे। यह गाइड इन सभी को कवर करता है।
बुनियादी @export
@export एनोटेशन किसी वैरिएबल को Godot Inspector में दिखाता है, जिससे आप कोड संपादित किए बिना मान कॉन्फ़िगर कर सकते हैं। Godot वैरिएबल के प्रकार के आधार पर स्वचालित रूप से सही एडिटर विजेट चुन लेता है।
@export var speed: float = 300.0
@export var player_name: String = "Player"
@export var health: int = 100
@export var color: Color = Color.WHITE
@export var texture: Texture2D
@export var scene: PackedScene
टिप: एक्सपोर्ट किए गए वैरिएबल्स में हमेशा टाइप एनोटेशन जोड़ें। इससे Inspector सही विजेट दिखाता है (जैसे Color के लिए एक कलर पिकर, Texture2D के लिए एक रिसोर्स स्लॉट)।
@export_range — संख्यात्मक स्लाइडर
@export_range किसी संख्यात्मक मान को न्यूनतम और अधिकतम तक सीमित करता है और Inspector में एक स्लाइडर दिखाता है। आप एक स्टेप साइज़ और "or_greater" या "or_less" जैसे संकेत भी निर्दिष्ट कर सकते हैं।
@export_range(0, 100) var health: int = 100
@export_range(0.0, 1.0, 0.01) var volume: float = 0.8
@export_range(0, 1000, 1, "or_greater") var damage: int = 10
"or_greater" संकेत स्लाइडर की सीमा को केंद्रित रखते हुए अधिकतम से अधिक मान टाइप करने की अनुमति देता है। इसी तरह, "or_less" न्यूनतम से कम मानों की अनुमति देता है।
@export_enum — ड्रॉपडाउन मेनू
@export_enum Inspector में एक ड्रॉपडाउन बनाता है। String के साथ उपयोग करने पर चयनित विकल्प का नाम संग्रहीत होता है। int के साथ उपयोग करने पर आप स्पष्ट मान असाइन कर सकते हैं।
# Stores the string name: "Warrior", "Mage", or "Rogue"
@export_enum("Warrior", "Mage", "Rogue") var character_class: String
# Stores the integer value: 0, 1, or 2
@export_enum("Easy:0", "Normal:1", "Hard:2") var difficulty: int = 1
@export_file और @export_dir — फ़ाइल/डायरेक्टरी पथ
@export_file Inspector में एक फ़ाइल डायलॉग दिखाता है। आप फ़ाइल एक्सटेंशन के अनुसार फ़िल्टर कर सकते हैं। @export_dir एक डायरेक्टरी चयन डायलॉग दिखाता है।
@export_file("*.tscn") var next_level: String
@export_dir var save_directory: String
फ़िल्टर स्ट्रिंग ग्लोब पैटर्न का उपयोग करती है। कई फ़िल्टर कॉमा से अलग किए जा सकते हैं: "*.png,*.jpg"।
@export_multiline और @export_placeholder
@export_multiline बहु-पंक्ति स्ट्रिंग्स के लिए एक बड़ा टेक्स्ट क्षेत्र प्रदान करता है (संवाद या विवरण के लिए बढ़िया)। @export_placeholder फ़ील्ड खाली होने पर उसके अंदर संकेत टेक्स्ट दिखाता है।
@export_multiline var description: String
@export_placeholder("Enter name...") var player_name: String
@export_group और @export_subgroup — Inspector प्रॉपर्टीज़ को व्यवस्थित करना
@export_group Inspector में एक संकुचित करने योग्य समूह हेडर बनाता है। इसके बाद आने वाले सभी @export वैरिएबल्स अगले समूह या श्रेणी तक उस समूह से संबंधित होते हैं। @export_subgroup वर्तमान समूह के भीतर नेस्ट होता है।
@export_group("Movement")
@export var speed: float = 300.0
@export var jump_force: float = 400.0
@export_group("Combat")
@export var attack_damage: int = 10
@export var defense: int = 5
@export_subgroup("Ranged")
@export var projectile_speed: float = 500.0
समूह और उपसमूह पूर्णतः संगठनात्मक हैं — वे कोड में वैरिएबल एक्सेस को प्रभावित नहीं करते, केवल यह प्रभावित करते हैं कि प्रॉपर्टीज़ Inspector में कैसे दिखती हैं।
@export_category — बोल्ड श्रेणी हेडर
@export_category Inspector में एक बोल्ड, शीर्ष-स्तरीय श्रेणी हेडर बनाता है। समूहों के विपरीत, श्रेणियों को संकुचित नहीं किया जा सकता और वे असंबंधित प्रॉपर्टी सेट के बीच एक मजबूत दृश्य विभाजक के रूप में काम करती हैं।
@export_category("Player Stats")
@export var level: int = 1
@export var experience: int = 0
Node संदर्भों के साथ @export
आप एक NodePath एक्सपोर्ट कर सकते हैं ताकि डिज़ाइनर सीन ट्री से एक नोड चुन सकें। Godot 4.2+ में, आप सीधे एक टाइप्ड नोड संदर्भ एक्सपोर्ट कर सकते हैं — कोई NodePath आवश्यक नहीं।
# Classic NodePath export
@export var target_path: NodePath
# Godot 4.2+: typed node export (direct reference, no NodePath needed)
@export var sprite: Sprite2D
@export var collision: CollisionShape2D
टाइप्ड नोड एक्सपोर्ट आधुनिक Godot 4 में अनुशंसित दृष्टिकोण है। Inspector निर्दिष्ट प्रकार तक फ़िल्टर किया गया एक नोड पिकर दिखाता है, और आपको स्क्रिप्ट एडिटर में पूर्ण ऑटो-कम्प्लीशन मिलता है।
@export_flags — बिटमास्क चेकबॉक्स
@export_flags चेकबॉक्स का एक सेट बनाता है जहाँ प्रत्येक विकल्प एक पूर्णांक में एक बिट के अनुरूप होता है। Godot भौतिकी और रेंडर लेयर्स के लिए अंतर्निहित फ़्लैग एक्सपोर्ट भी प्रदान करता है।
# Custom flags: Fire=1, Water=2, Earth=4, Wind=8
@export_flags("Fire", "Water", "Earth", "Wind") var elements: int
# Built-in physics layer flags
@export_flags_2d_physics var collision_layers: int
@export_flags_2d_render var render_layers: int
@export_flags_3d_physics var collision_layers_3d: int
@onready — विलंबित प्रारंभीकरण
@onready किसी वैरिएबल के प्रारंभीकरण को तब तक विलंबित करता है जब तक नोड सीन ट्री में प्रवेश नहीं कर लेता (_ready() में असाइन करने के समकक्ष)। यह $ के साथ चाइल्ड नोड्स को संदर्भित करते समय अनिवार्य है, क्योंकि चाइल्ड पार्स समय पर उपलब्ध नहीं होते।
# Godot 3 (old syntax):
# onready var sprite = $Sprite2D
# Godot 4:
@onready var sprite: Sprite2D = $Sprite2D
@onready var anim: AnimationPlayer = $AnimationPlayer
@onready var label: Label = $UI/ScoreLabel
सर्वोत्तम प्रथा: अपने @onready वैरिएबल्स को हमेशा टाइप करें। इससे ऑटो-कम्प्लीशन सक्षम होता है और टाइप त्रुटियाँ रनटाइम के बजाय पार्स समय पर पकड़ी जाती हैं।
@tool — एडिटर में स्क्रिप्ट चलाना
@tool किसी स्क्रिप्ट को Godot एडिटर के भीतर चलाता है (केवल रनटाइम पर नहीं)। यह कस्टम प्रीव्यू, गिज़्मो और लाइव-अपडेटिंग प्रॉपर्टीज़ बनाने के लिए शक्तिशाली है। इसे स्क्रिप्ट के बिल्कुल शीर्ष पर, extends से पहले रखें।
@tool
extends Node2D
@export var radius: float = 100.0:
set(value):
radius = value
queue_redraw() # Redraw in editor when value changes
func _draw() -> void:
draw_circle(Vector2.ZERO, radius, Color.WHITE)
सावधानी: @tool स्क्रिप्ट के साथ सावधान रहें। _process() और _physics_process() में कोड एडिटर में चलेगा। केवल-गेम लॉजिक को सुरक्षित रखने के लिए Engine.is_editor_hint() का उपयोग करें।
अन्य एनोटेशन
@icon
Scene dock और "Create Node" डायलॉग में स्क्रिप्ट के नोड प्रकार के लिए एक कस्टम आइकन सेट करता है।
@icon("res://icons/enemy.svg")
extends CharacterBody2D
@warning_ignore
अगले कथन के लिए विशिष्ट GDScript चेतावनियों को दबा देता है। तब उपयोगी होता है जब आप जानबूझकर किसी वैरिएबल को शैडो करते हैं या एक अनुपयोगी पैरामीटर रखते हैं।
@warning_ignore("unused_parameter")
func _on_body_entered(body: Node2D) -> void:
queue_free()
@warning_ignore("shadowed_variable")
var size: int = 10
@static_unload
किसी स्क्रिप्ट को इस तरह चिह्नित करता है कि जब कोई इंस्टेंस मौजूद न हो तो Godot उसे मेमोरी से अनलोड कर सके। यह उन स्क्रिप्ट्स की मेमोरी खपत को कम कर सकता है जो केवल अस्थायी रूप से उपयोग होती हैं। स्क्रिप्ट में कोई भी स्टैटिक वैरिएबल या डेटा नहीं होना चाहिए जिसे बना रहना आवश्यक हो।
@static_unload
extends RefCounted
# This script can be safely unloaded when not in use
स्टैटिक टाइपिंग की सर्वोत्तम प्रथाएँ
भले ही ये एनोटेशन नहीं हैं, स्टैटिक टाइप हिंट्स इनसे निकटता से संबंधित हैं और Godot 4 में दृढ़ता से अनुशंसित हैं। वे ऑटो-कम्प्लीशन को बेहतर बनाते हैं, कंपाइल-टाइम त्रुटि जाँच सक्षम करते हैं और परफॉर्मेंस को बेहतर कर सकते हैं।
# Variable type annotations
var speed: float = 300.0
var player: CharacterBody2D = null
var items: Array[String] = []
var scores: Dictionary = {}
# Function return types and parameter types
func get_damage() -> int:
return attack - defense
func apply_force(direction: Vector2, strength: float) -> void:
velocity += direction * strength
# Type inference with :=
var pos := Vector2(100, 200) # Inferred as Vector2
नोट: बिना-टाइप वाले array पर इटरेट करते समय for लूप में := के साथ सावधान रहें। इसके बजाय स्पष्ट टाइप एनोटेशन का उपयोग करें: for item: String in array।
माइग्रेशन चीट शीट: Godot 3 से 4
Godot 3 की एक्सपोर्ट सिंटैक्स को Godot 4 एनोटेशन में बदलने के लिए त्वरित संदर्भ:
| Godot 3 | Godot 4 | टिप्पणियाँ |
|---|---|---|
export var x |
@export var x |
बुनियादी एक्सपोर्ट |
export(int, 0, 100) var hp |
@export_range(0, 100) var hp: int |
टाइप हिंट के साथ रेंज |
export(String, "A", "B") var x |
@export_enum("A", "B") var x: String |
Enum ड्रॉपडाउन |
export(String, FILE) var path |
@export_file var path: String |
फ़ाइल पिकर |
export(String, MULTILINE) var text |
@export_multiline var text: String |
बहु-पंक्ति टेक्स्ट क्षेत्र |
export(int, FLAGS, ...) var f |
@export_flags(...) var f: int |
बिटमास्क फ़्लैग |
onready var x = $Node |
@onready var x: Type = $Node |
विलंबित प्रारंभीकरण |
tool |
@tool |
एडिटर निष्पादन |
| उपलब्ध नहीं | @export_group("...") |
Godot 4 में नया |
| उपलब्ध नहीं | @export_category("...") |
Godot 4 में नया |
| उपलब्ध नहीं | @export_subgroup("...") |
Godot 4 में नया |
Godot MCP Pro सभी @export एनोटेशन को समझता है
Godot MCP Pro उचित रूप से टाइप किए गए एक्सपोर्ट वाली स्क्रिप्ट बना सकता है, मौजूदा एक्सपोर्ट एनोटेशन को पढ़ और संशोधित कर सकता है, और आपके सीन में किसी भी नोड की एक्सपोर्ट की गई प्रॉपर्टीज़ का निरीक्षण कर सकता है — सब कुछ AI के माध्यम से।
- create_script
- edit_script
- read_script
- get_node_properties
- get_scene_exports
- update_property