الترقية من جودو 3 إلى جودو 4
تتبع جودو نظام الإصدار الدلالي بشكل فضفاض، إذ تُعد التوافقية موجودة بين الإصدارات البسيطة والترقيعية، بينما يمكن للإصدارات الكبيرة أن تتسبب ببعض المشكلات، وبناءً على ذلك، لا يُنصح بنقل المشروع من إصدار كبير إلى آخر خلال عملية تطويره وخصوصًا إن كنت تعمل على المشروع لوقت طويل.
إلا أن بعض المزايا الجديدة التي تحسن من تجربتك أو بعض الأنماط المختلفة في نواة المحرك قد تحفّزك على الترقية، وفي هذه الحالة يجب عليك قراءة ما يلي لتحقيق ترقية ناجحة، إذ نحاول هنا توثيق كل نقطة هامة بخصوص الترقية بالإضافة إلى طريقة للترقية.
هل يجب علي الترقية إلى جودو 4؟
قبل البدء بعملية التحديث يجب الأخذ بعين الاعتبار المحاسن والمساوئ التي يمكن أن تحصل للمشروع الخاص بك.
محاسن التحديث
مع الخاصيات الموجودة في 4.0 يعطيك التحديث المحاسن التالية.
- حل العديد من المشكلات في 4.0 التي لا يمكن حلها في 3.× لعدد من الأسباب (مثل الفروقات في الرسومات في واجهة برمجة التطبيقات أو التوافق العكسي).
- سيحصل الإصدار 4.× على فترة دعم أكبر، إذ سيستمر الدعم لجودو 3.× لبعض الوقت بعد إصدار 4.0 ولكنه سيتوقف عن الحصول على دعم بنهاية المطاف.
أنظر توثيق سجل التعديلات للحصول على لائحة من الصفحات التي توثق المزايا الجديدة في جودو 4.0.
مساوئ التحديث
ستُفضل البقاء على 3.× إذا لم ترد أي مزايا موجودة في جودو 4.0 للأسباب التالية:
- أن جودو 3.× مجرب وفعال ولكن لا يزال جودو 4 في المراحل الأولى
- متوقع أن يكون لجودو 4.0 بعض المشاكل في الأداء ومسار العمل ليست موجودة في جودو 3.×، ولكن سيتم حل هذه المشاكل في المستقبل مع إصدارات جودو 4.×
- لا يوجد دلائل من طرف ثالث لجودو 4 منها لجودو مقارنة بجودو 3.× ، إذا كُنت جديدًا في العمل على محركات الألعاب ستجد تجربة أفضل باستخدام جودو 3.×
- متطلبات عتاد الحاسوب لجودو 4 (مثل استخدام الذاكرة) هي أعلى قليلًا من أجل المحرر والمشاريع المُصدرة. كان هذا ضروريًا لتنفيذ بعض التحسينات
- بما أن جودو 4 يحتوي على ميزات أكثر من جودو 3 ، يُصبح حجم الملف الثنائي لجودو 4 للمشاريع المُصدرة أكبر، يمكننا تفادي ذلك بتحسين الإنشاء ليخفف الحجم. سيبقى البناء باستخدام 4.0 مع نفس الوحدات المفعلة أكبر من البناء باستخدام 3.× مع نفس الوحدات. هذا سيسبب مشكلة عند التصدير إلى الويب لأن حجم الثنائي يؤثر بشكل مباشر على سرعة تهيئة المحرك (بغض النظر عن سرعة التنزيل).
- لم ولن يدعم جودو 4 لتصيير GLES2 (لا يزال هناك دعم لتصيير GLES3 باستخدام واجهة خلفية OpenGL جديدة، هذا يعني أن الأجهزة بدون دعم Vulkan يمكنها تشغيل جودو 4).
- يمنع التحديث المشاريع من العمل على عتاد قديم ،إذا كنت تستهدف عتاد قديم جدًا مثل كروت الشاشة المدمجة من انتل (الجيل الثاني) Sandy Bridge. يمكن تفادي ذلك باستخدام تنفيذات برمجيات OpenGL ولكنها بطيئة وقت اللعب.
تحفظات التحديث
بما أن جودو 4 هو إعادة كتابة للغة في العديد من النواحي، حدث فقدان بعض الميزات أثناء التعديل. وسيتم إعادة بعض هذه الميزات في إصدارات جودو القادمة.
- فيزياء الطلقة تم إزالتها على حساب GodotPhysics. إن هذا يؤثر على المشاريع ثلاثية الأبعاد التي تستخدم المحرك الفيزيائي الافتراضي (الذي كان Bullet) ولم تُغير يدويًا إلى GodotPhysics. لا يوجد نية لإعادة إضافة فيزياء Bullet في الأساس، ولكن يمكن إنشاء إضافة من طرف ثالث بالاعتماد على GDExtention
- لم يعد يُستخدم HDR في التصيير الثنائي الأبعاد، أي أنه لا يوجد تأثير لقيم الوحدات "الأكثر إضاءة"، ويتم العمل على إعادتها في المستقبل
- لن تعيد الإطارات المعروضة أي بيانات HDR حتى لو كان التصيير ثلاثي الأبعاد يستخدم HDR باستخدام Forward Plus أو Forward Mobile، ويتم العمل على إعادتها في المستقبل.
- تم استبدال Mono بـ .NET 6 أي أن تصدير مشاريع C# إلى أندرويد و iOS وHTML5 لم يعد مدعومًا الآن. ولكن تصدير مشاريع C# إلى الحاسب المكتبي لا يزال مدعومًا، يتم العمل على دعم تصدير مشاريع C# إلى منصات أخرى في إصدارات 4.× عندما يتحسن الدعم الأولي.
يمكن الحصول على لائحة كاملة من التراجعات عن طريق البحث عن المشاكل المسماة تراجعات regression وليس مشاكل bug على GitHub.
تحضيرات ما قبل التحديث (اختياري)
إذا أردت ان تكون مستعدًا للتحديث إلى جودو 4 في المستقبل تذكر استخدام المتفرّدتين Tweener وTime في المشروع الخاص بك. تتوافر هذه الأصناف في جودو 3.5 وما بعد.
بهذه الطريقة، لن تعتمد على عقدة Tween ودوال OS time المهملتين واللتين تم إزالتهما من جودو 4.0
من الأفضل إعادة تسمية التظليلات الخارجية ليكون امتدادها .gdshader
بدلًا من .shader
، إن جودو 3.× تدعم كلًا من الامتدادين ولكن جودو 4.0 تدعم فقط gdshader.
تشغيل أداة تحديث المشروع
تنبيه: أنشئ نسخة احتياطية كاملة للمشروع قبل التحديث! لن تنسخ الأداة مشروعك نسخًا احتياطيًا خلال عملية التحديث يمكنك إجراء بالنسخ الاحتياطي باستخدام التحكم بالإصدار، أو نسخ مجلد المشروع إلى مكان أخر.
استخدام مدير المشروع
لاستخدام أداة تحديث المشروع:
- افتح مدير المشروع الخاص بجودو 4
- استورد مشروع جودو 3.× باستخدام زر استيراد Import أو استخدم زر مسح Scan لإيجاد المشروع داخل المجلد
- انقر نقرة مزدوجة على المشروع المستورد (أو اختر المشروع واختر تعديل Edit)
- سترى مربع حوار بخيارين: تحويل project.godot فقط Convert project.godot Only أو تحويل كامل المشروع Convert Full Project. بعد التأكد من أن المشروع لديه نسخة احتياطية (راجع التنبيه السابق)، اختر تحويل كامل المشروع Convert Full Project. إن خيار تحويل project.godot فقط Convert project.godot Only هو للاستعمالات المتقدمة فقط إذا فشلت أداة التحويل.
- انتظر لينتهي تحويل المشروع. قد يستغرق عدة دقائق للمشاريع الكبيرة ذات المَشاهد المتعددة
- عندما تصبح واجهة مدير المشروع متاحة مجددًا انقر نقرة مزدوجة على المشروع (أو اختر المشروع واختر تعديل Edit) لفتح المحرر
إذا واجهت مشكلة تحويل كون ملفات المشروع كبيرة أو طويلة يمكن استخدام سطر الأوامر لتحديث المشروع (راجع ما يلي) هذا سيسمح لك لتجاوز حدود المحول.
استخدام سطر الأوامر
يُفضل التأكد من صحة تحويل المشروع لاستخدام أداة التحديث سطر الأوامر عن طريق تنفيذ هذه الوسطاء باستخدام ملف جودو الثنائي.
# [<max_file_kb>] [<max_line_size>] الوسطاء التالية هي وسطاء اختيارية
# يمكنك التخلي عنهما إذا لم ترد تغيير قيمهما
path/to/godot.binary --path /path/to/project/folder --validate-conversion-3to4 [<max_file_kb>] [<max_line_size>]
تفذ الأمر التالي في ثنائي محرر جودو إذا كانت لائحة التحديثات جيدة لتحديث ملفات المشروع
# [<max_file_kb>] [<max_line_size>] الوسطاء التالية هي وسطاء اختيارية
# يمكنك التخلي عنهما إذا لم ترد تغيير قيمهما
path/to/godot.binary --path /path/to/project/folder --convert-3to4 [<max_file_kb>] [<max_line_size>]
إن الوسيطين [<max_file_kb>]
و[<max_line_size>]
هما اختياريان لتحديد الحد الأقصى لحجم ملفات للتحويل (باستخدام كيلوبايت وسطر). الحد الافتراضي هو 4 ميغابايت و 100000 سطر على الترتيب. إذا تم الوصول لأحد هذين الحدين لن يتم تحديثه من محّول المشروع. هذا يفيد في الحد من إبطاء التحديث للموارد الكبيرة.
زد حدود الحجم عند تشغيل أداة تحديث المشروع إذا أردت تحويل الملفات الكبيرة باستخدام أداة تحديث المشروع، مثلًا تشغيل محرر جودو الثنائي مع هذه الوسطاء يزيد الحدين عشرة أضعاف.
path/to/godot.binary --path /path/to/project/folder --convert-3to4 40000 1000000
ملاحظة: فقط مشاريع جودو 3.0 وما بعد يمكن تحديثها باستخدام أدارة تحويل المشروع الموجود في محرر جودو 4 يُفضل التأكد من أن المشروع محدث بأخر إصدار مستقر من 3.× قبل تشغيل أداة تحديث المشروع
إصلاح المشروع بعد تشغيل أداة تحديث المشروع.
ستلاحظ بعد تحديث المشروع أن بعض الأشياء لا تكون كما يجب. ستحتوي السكربتات أخطاء عديدة (المئات في المشاريع الكبيرة). هذا لأن أداة تحديث المشروع لا يمكنها التعامل مع كل الحالات لذا يبقى قسم كبير يتطلب التحديث يدويًا.
إعادة تسمية العقد والموارد
تشير اللائحة التالية إلى العقد التي تم إعادة تسميتها لتكون أوضح في جودو 4.0، تقوم أداة تحديث المشروع بإعادة تسميتهم بشكل تلقائي في السكربتات الخاصة بك
واحد من أهم المجموعات المعاد تسميتها هي العقد ثلاثية الأبعاد حيث تم إضافة اللاحقة 3D
للحفاظ على التناسق مع مشابهاتهم ثنائية البعد. مثلا أصبحت Area
الآن Area3D
لسهولة البحث، في الجدول الآتي يوجد أسماء كل العقد والموارد التي أُعيد تسميتها تلقائيًا، ماعدا التي أُضيف 3D
لاسمها القديم
الاسم القديم (جودو 3.×) | الاسم الجديد (جودو 4) |
AnimatedSprite | AnimatedSprite2D |
ARVRCamera | XRCamera3D |
ARVRController | XRController3D |
ARVRAnchor | XRAnchor3D |
ARVRInterface | XRInterface |
ARVROrigin | XROrigin3D |
ARVRPositionalTracker | XRPositionalTracker |
ARVRServer | XRServer |
CubeMesh | BoxMesh |
EditorSpatialGizmo | EditorNode3DGizmo |
EditorSpatialGizmoPlugin | EditorNode3DGizmoPlugin |
GIProbe | VoxelGI |
GIProbeData | VoxelGIData |
GradientTexture | GradientTexture1D |
KinematicBody | CharacterBody3D |
KinematicBody2D | CharacterBody2D |
Light2D | PointLight2D |
LineShape2D | WorldBoundaryShape2D |
Listener | AudioListener3D |
NavigationMeshInstance | NavigationRegion3D |
NavigationPolygonInstance | NavigationRegion2D |
Navigation2DServer | NavigationServer2D |
PanoramaSky | Sky |
Particles | GPUParticles3D |
Particles2D | GPUParticles2D |
ParticlesMaterial | ParticleProcessMaterial |
Physics2DDirectBodyState | PhysicsDirectBodyState2D |
Physics2DDirectSpaceState | PhysicsDirectSpaceState2D |
Physics2DServer | PhysicsServer2D |
Physics2DShapeQueryParameters | PhysicsShapeQueryParameters2D |
Physics2DTestMotionResult | PhysicsTestMotionResult2D |
PlaneShape | WorldBoundaryShape3D |
Position2D | Marker2D |
Position3D | Marker3D |
ProceduralSky | Sky |
RayShape | SeparationRayShape3D |
RayShape2D | SeparationRayShape2D |
ShortCut | Shortcut |
Spatial | Node3D |
SpatialGizmo | Node3DGizmo |
SpatialMaterial | StandardMaterial3D |
Sprite | Sprite2D |
StreamTexture | CompressedTexture2D |
TextureProgress | TextureProgressBar |
VideoPlayer | VideoStreamPlayer |
ViewportContainer | SubViewportContainer |
Viewport | SubViewport |
VisibilityEnabler | VisibleOnScreenEnabler3D |
VisibilityNotifier | VisibleOnScreenNotifier3D |
VisibilityNotifier2D | VisibleOnScreenNotifier2D |
VisibilityNotifier3D | VisibleOnScreenNotifier3D |
VisualServer | RenderingServer |
VisualShaderNodeScalarConstant | VisualShaderNodeFloatConstant |
VisualShaderNodeScalarFunc | VisualShaderNodeFloatFunc |
VisualShaderNodeScalarOp | VisualShaderNodeFloatOp |
VisualShaderNodeScalarClamp | VisualShaderNodeClamp |
VisualShaderNodeVectorClamp | VisualShaderNodeClamp |
VisualShaderNodeScalarInterp | VisualShaderNodeMix |
VisualShaderNodeVectorInterp | VisualShaderNodeMix |
VisualShaderNodeVectorScalarMix | VisualShaderNodeMix |
VisualShaderNodeScalarSmoothStep | VisualShaderNodeSmoothStep |
VisualShaderNodeVectorSmoothStep | VisualShaderNodeSmoothStep |
VisualShaderNodeVectorScalarSmoothStep | VisualShaderNodeSmoothStep |
VisualShaderNodeVectorScalarStep | VisualShaderNodeStep |
VisualShaderNodeScalarSwitch | VisualShaderNodeSwitch |
VisualShaderNodeScalarTransformMult | VisualShaderNodeTransformOp |
VisualShaderNodeScalarDerivativeFunc | VisualShaderNodeDerivativeFunc |
VisualShaderNodeVectorDerivativeFunc | VisualShaderNodeDerivativeFunc |
VisualShaderNodeBooleanUniform | VisualShaderNodeBooleanParameter |
VisualShaderNodeColorUniform | VisualShaderNodeColorParameter |
VisualShaderNodeScalarUniform | VisualShaderNodeFloatParameter |
VisualShaderNodeCubeMapUniform | VisualShaderNodeCubeMapParameter |
VisualShaderNodeTextureUniform | VisualShaderNodeTexture2DParameter |
VisualShaderNodeTextureUniformTriplanar | VisualShaderNodeTextureParameterTriplanar |
VisualShaderNodeTransformUniform | VisualShaderNodeTransformParameter |
VisualShaderNodeVec3Uniform | VisualShaderNodeVec3Parameter |
VisualShaderNodeUniform | VisualShaderNodeParameter |
VisualShaderNodeUniformRef | VisualShaderNodeParameterRef |
إعادة تسمية التوابع والخاصيات والإشارات والثوابت
نظرًا لكيفية عمل أداة تحديث المشروع، لا يمكن إعادة تسمية كل واجهة برمجة التطبيقات بشكل تلقائي. تحتوي اللائحة التالية كل عمليات إعادة التسمية التي يجب القيام بها يدويًا باستخدام محرر السكربت.
راجع الجدول السابق إذا لم تجد أي عقدة أو مورد في اللائحة التالية لإيجاد الاسم الجديد
ملاحظة: يمكن استخدام نافذة حوار الاستبدال في الملفات Replace in Files لتسريع الاستبدال عن طريق ضغط Ctrl+Shift+R
عندما يكون محرر السكربت مفتوحًا ولكن انتبه لأن نافذة حوار لا تقدم أي طريقة للرجوع عن أي تبديل. استخدم التحكم في الإصدار للالتزام بعمل التحديث بشكل منتظم. يمكن استخدام أدوات سطر الأوامر مثل sd إذا احتجت القيام بشيء أكثر مرونة من نافذة حوار الاستبدال في الملفات Replace in Files الخاصة بالمحرر.
تذكر بالبحث عن استخدامات واجهات برمجة التطبيقات القديمة بمحارف من نمط باسكال إذا كنت تستخدم C# في المشروع (واستبدلها بمحارف من نمط باسكال)
التوابع
- تم استبدال مسارات الأصناف والملف بـ FileAccess وDirAccess التي لديها واجهة برمجة تطبيقات مختلفة. العديد من العقد أصبحت ساكنة أي يمكن استدعائها بشكل مباشر في FileAccess وDirAccess بدون الحاجة لإنشاء نسخة عن ذلك الصنف.
- تم نقل التوابع الخاصة بالشاشة والنافذة (مثل
OS.get_screen_size()
) من متفرّدة OS إلى متفرّدة DisplayServer. وتغيرت تسمية التوابع لاستخدامDisplayServer.<object>_<get/set>_property(). مثلًا OS.get_screen_size()
تصبحDisplayServer.screen_get_size()
- تم نقل توابع الوقت والتاريخ من المتفرّدة OS إلى المتفردّة Time. (متفرّدة Time موجودة أيضًا في جودو 3.5 وما بعد)
- ستحتاج لتبديل بعض استدعاءات
instance()
باستدعاءاتinstantiate()
، ويجب على المحول أن يقوم بذلك تلقائيًا ولكن هذا يعتمد على شيفرة مخصصة قد لا تعمل في كل الحالات - أصبح
()set_autowarp
الخاص بـ AcceptDialog الآن هوset_autowarp_mode()
- أصبح
process()
الآن _proccess()
(لاحظ الشرطة السفلية البادئة التي تدل على تابع افتراضي). - أصبح
get_points()
الخاص بـ AStar2D و Astar3D الآنget_points_id()
- أصبح
set_event()
الخاص بـ BaseButton الآنset_shortcut()
- أصبح
get_v_offset()
الخاص بـ Camera2D الآنget_drag_vertical_offset()
- أصبح
set_v_offset()
الخاص بـ Camera2D الآنset_drag_vertical_offset()
- أصبح
set_tooltip()
الخاص بـ control الآنset_tooltip_text()
- أصبح
create_gizmo()
الخاص بـ EditorNode3DGizomoPlugin الآن _create_gizmo()
(لاحظ الشرطة السفلية البادئة التي تدل على تابع افتراضي) - أصبح
get_peer_port()
الخاص بـ EnetMultiplayerPeer الآنget_peer()
- أصبح
get_mode()
الخاص بـ FileDialog الآنget_file_mode()
- أصبح
set_mode()
الخاص بـ FileDialog الآنset_file_mode()
- أصبح
get_offset()
الخاص بـ GraphNode الآنget_position_offset()
- أصبح
world_to_map()
الخاص بـ GridMap الآنlocal_to_map()
- أصبح
map_to_world()
الخاص بـ GridMap الآنmap_to_local()
- أصبح
get_rect()
الخاص بـ Image الآنget_region()
- أصبح
get_v_scroll()
الخاص بـ ItemList الآنget_v_scroll_bar()
- أصبح
get_network_connected_peers()
الخاص بـ MultiplayerAPI الآنget_peers()
- أصبح
get_network_peer()
الخاص بـ MultiplayerAPI الآنget_peer()
- أصبح
get_network_unique_id()
الخاص بـ MultiplayerAPI الآنget_unique_id()
- أصبح
has_network_peer()
الخاص بـ MultiplayerAPI الآنhas_multiplayer_peer()
- أصبح
is_listening()
الخاص بـ PacketPeerUDP الآنis_bound()
- أصبح
listen()
الخاص بـ PacketPeerUDP الآنbound()
- أصبح
set_flag()
الخاص بـ ParticleProcessMaterials الآنset_particle_flag()
- أصبح
get_dependancies()
الخاص بـ ResourceFormatLoader الآن_get_dependancies()
(لاحظ الشرطة السفلية البادئة التي تدل على تابع افتراضي) - أصبح
is_valid()
الخاص بـ Shortcut الآنhas_valid_event()
- أصبح
world_to_map()
الخاص بـ TileMap الآنlocal_to_map()
- أصبح
map_to_world()
الخاص بـ TileMap الآنmap_to_local()
الخاصيات
ملاحظة: يجب إعادة تسمية توابع الضبط والجلب الخاصة بهذا التابع يدويًا في حال كانت موجودة في هذه القائمة ومستخدمة في المشروع. مثلًا، التوابع
set_offset()
وget_offset()
الخاصة بـ PathFollow2D وPathFollow3D. يجب إعادة تسميتهاset_progress()
وget_progress()
على الترتيب
- أصبحت
margin
الخاصة بـ Control الآنoffset
- أصبحت
percent_visible
الخاصة بـ Label الآنvisible_ratio
- أصبحت
refuse_new_network_connections
الخاصة بـ MultiPlayerAPI الآنrefuse_new_connections
- أصبحت
offset
الخاصة بـ PathFollow2D وPathFollow3D الآنprogress
- أصبحت
percent_visible
الخاصة بـ TextureProgressBar الآنshow_percentage
- يجب تغيير خاصية
extents
في عقد CSG و VoxelIGI بـsize
، مع تنصيف القيمة المضبوطة (لم يبقوا الآن نصف امتداد). يؤثر هذا أيضًا على التوابع الجالبة/الضابطةset_extents()
وget_extents()
المعدّدات
- أصبحت
FLAG_MAX
الخاصة بـ CPUParticles2D الآنPARTICLE_FLAG_MAX
الإشارات
- أصبحت
instantiate
الخاصة بـ FileSystemDock الآنinstance
- أصبحت
hide
الخاصة بـ CanvasItem الآنhidden
. لا تطبق إعادة التسمية على التابعhide()
فقط الإشارة - أصبحت
tween_all_completed
الخاص بـ Tween الآنloop_finished
- أصبحت
change
الخاص بـ EditorSettings الآنsettings_changed
الثوابت
- أصبحت أسماء الألوان بالحروف الكبيرة ومع شرطة سفلية بين الكلمات. مثلًا، أصبح
Color.palegreen
الآنColor.PLAE_GREEN
- تم نسخ ثوابت
NOTIFICATION_
الخاصة بـ MainLoop إلىNode
ما يعني أنه يمكن إزالة بادئةMainLoop.
عند الرجوع إليهم. - أصبحت
NOTIFICATION_MW_QUIT_REQUEST
الخاصة بـ MainLoop الآنNOTIFICATION_CLOSE_REQUEST
التحقق من إعدادات المشروع
تم إعادة تسمية العديد من إعدادات المشروع وبعضهم تم تغيير المعدّدات الخاصة بهم بطرق غير متوافقة (مثل نوعية تصفية الظلال). هذا يعني أنك تحتاج إلى ضبط بعض قيم إعدادات المشروع مجددًا. تأكد من تفعيل متقدم Advanced في إعدادات المشروع لرؤية كل إعدادات المشروع
التحقق من إعدادات البيئة
تم نقل إعدادات الرسوميات من إعدادات البيئة إلى إعدادات المشروع. تم القيام بذلك لجعل التعديلات وقت التنفيذ أسهل بدون الحاجة للوصول إلى مورد البيئة الفعال ومن ثم تعديل خصائصه.
نتيجة لذلك يجب تعديل إعدادات نوعية البيئة في إعدادات المشروع لأن إعدادات نوعية البيئة لم تحوّل تلقائيًا إلى إعدادات المشروع.
يجب تغيير شيفرة قائمة إعدادات الرسوميات في جودو 3.× التي تغير خصائص البيئة لاستدعاء توابع RenderingServer التي تؤثر على نوعية البيئة إذا كانت هذه القائمة موجودة. يبقى فقط الزر "الأساسي" لكل تأثير في البيئة موجودًا داخل مورد البيئة مع كل التأثيرات المتعلقة به.
تحديث التظليل
يوجد بعض التغييرات التي لم تُغطى من أداة التحسين.
لم يعد مدعومًا امتداد الملف shader.
وبالتلي جيب إعادة تسمية ملفات shader.
إلى gdshader.
وتحديث المراجع كما يجب في ملفات مشهد/مورد باستخدام محرر نصوص خارجي
بعض أهم التعديلات التي ستحتاج للقيام بها في التظليل هي:
- أصبحت فلترة الملمس وحالات الإعادة مضبوطة بشكل موحد، بدلًا من ملفات الملمس لوحدها.
- أصبحت
hint_albedo
الآنsource_color
- تم إعادة تسمية متغيرات المصفوفة المضمنة
- لم تعد تستخدم مظللات الجزيئات دالة المعالجة
vertex()
بل أصبحت تستخدمstart()
وprocess()
راجع لغة التظليل لمزيد من المعلومات.
تحديث السكربتات لأخذ التعديلات غير المتوافقة رجوعيًا بعين الاعتبار
بعض التغيرات الحاصلة بين جودو 3.× و 4.0 ليست فقط إعادة تسمية ولكنها تعطل التوافقية الرجوعية بسبب سلوك افتراضي مختلف
من أشهر الأمثلة على ذلك
- أصبح كل من String وStringName معرضين لـ GDScript. هذا يسمح لتحسينات أكثر حيث أن StringName مصمم بشكل خاص للاستخدام مع السلاسل النصية "الثابتة" المُنشأة مرة واحدة ويعاد استخدامها العديد من المرات. هذه الأنواع ليست بالضرورة متساوية لبعضها، أي أن
is_same("example", &"example")
تعيدfalse
. على الرغم من كونها متبادلة في العديد من الحالات("example" ==&"example" تعيد true)
ستحتاج في بعض الأحيان تبديل"example"
بـ&"example"
. - تم تغيير صياغة الجالب والضابط الخاص بـ GDScript ولكن قامت أداة التحويل بتحويله جزئيًا، وتحتاج لتعديل يدوي في معظم الحالات لجعل التوابع الجالبة والضابطة تعمل مجددًا
- تم تغيير صياغة اتصال الإشارة الخاص بـ GDScript. تستخدم أداة التحويل الصياغة المبينة على السلاسل النصية التي لا تزال موجودة في جودو 4 ولكن يفضل التبديل إلى الصياغة المبنية على الإشارة المشروحة في صفحة الرابط. بهذه الطريقة لا تتدخل السلاسل النصية وبالتالي يمكن أن تواجهنا أخطاء باسم الإشارة وقت التنفيذ فقط.
- لا تحصل السكربتات المضمنة التي هي سكربتات أداة على الكلمة المفتاحية
tool
على التوصيف@tool
- تم إزالة عقدة Tween واستبدالها بـ Tweeners المتوافرة أساسًا في جودو 3.5 وما بعد . راجع طلب السحب الأساسي لتفاصيل أكثر
- يتم استدعاء
randomize()
تلقائيًا عند تحميل المشروع لذا العشوائية المحددة باستخدام النسخة العامة RandomNumberGenerate تحتاج ضبط الأصل يدويًأ في دالة_ready()
الخاصة بالسكربت - أصبحت
call_group()
وset_group()
وnotify_group()
أصبحت فورية افتراضيًا. هذا يقود إلى تباطؤ عندا يتم استدعاء تابع كبير على مجموعة تحتوي على عدد كبير من العقد. لاستخدام الاستدعاءات المؤجلة كما قبل استبدلcall_group(…)
بـcall_group_flags(SceneTree.GROUP_CALL_DEFERRED,..)
(وافعل الشيء ذاته معset_group()
وnotify_group()
على الترتيب) - أصبحت خاصية
rotation
معرضة للمحرر بدلًا منrotation_degrees
الذي يظهر تلقائيًا كدرجات في نافذة المفتش. هذا يمكنه أن يسبب مشاكل في التحريك لأن التحويل لم يتم التعامل مه بشكل تلقائي من أداة التحويل. - تم عكس وإعادة تسمية
has_no_surface()
الخاص بـ AABB إلىhas_surface()
- تم عكس وإعادة تسمية
has_no_area()
الخاص بـ AABB وRect2 إلىhas_area()
- تم استبدال خاصية
fps
الخاص بـ AnimatedTexture إلىspeed_scale
التي تعمل بنفس طريقة خاصيةplayback_speed
الخاصة بـ AnimationPlayer - تسمح الآن
speed_scale
الخاصة بالصنفين AnimatedSprite2D وAnimatedSprite3D بقيم سلبية. هذا سيسبب مشاكل في التحريك إذا اعتمدت أن يكونspeed_scale
داخليًا ثابتًا على القيمة 0.0 - تم إزالة خاصية
playing
الخاصة بـ AnimatedSprite2D وAnimatedSprite3D، استخدم التوابعplay()
/stop()
بدلًا عنه أو اضبط حركةautoplay
عن طريق اللائحة السفلية الخاصة بـ SpriteFrames (ولكن ليس الاثنين نفس الوقت) - أصبحت إشارات BaseButton الآن
button_up
وbutton_down
. وأصبحت خاصيةpressed
الآنbutton_pressed
- تم استبدال خاصية
rotating
الخاصة بـ Camera2D إلىignore_rotation
التي لديها سلوك عكسي - تم عكس خاصية
zoom
الخاصة بـ Camera2D: القيم الأكبر تعني تكبير أكثر بدلًا من أقل - تم إزالة تابع
remove_and_skip
الخاص بـ Node. إذا اردت إعادة تنفيذه في سكربت يمكن استخدام تنفيذ C++ القديم كمرجع - يجب تحويل
OS.get_system_time_secs()
إلىTime.get_time_dict_from_system()["second"]
- تم تبديل وسائط التابع
save()
الخاص بـ ResourceSaver (resource: Resource, path: String
). هذا يطبق أيضًا على تابع_save()
الخاص بـ ResorceFormatSaver - يجب استدعاء
poll()
على StraemPeerTCP لتحديث حالته بدلًا من الاعتماد على أن تقومget_status()
بالاقتراع تلقائيًا: GH-59582 - تم تغيير سلوك التابع
right()
الخاص بـالسلاسل النصية: الآن يعيد عدد من المحارف من يمين السلسلة النصية بدلًا من الطرف الطرف الأيمن من السلسلة النصية بدأ من موقع معين، استخدمsubstr()
إذا أردت السلوك القديم. - تم إزالة
is_connected_to_host()
من StreamPeerTCP وPacketPeerUDP كما في GH-59582. يمكن استخدامget_status()
بدلًا عنها في StreamPeerTCP و استخدامis_socket_connected()
في PacketPeerUDP - أصبح تلميح السلسلة النصية
or_lesser
الآن هوor_less
في _get_property_list()
- أصبح تلميح السلسلة النصية
noslider
الآن هوno_slider
في_get_property_list()
- أصبح VisualShaderNodeVec4Parameter يأخذ Vector4 كمعامل بدلًا من Quanternion
العقد/الموارد المُزال أو المستبدلة
هذه لائحة بكل العقد المستبدلة بعقد أخرى التي تحتاج إلى تنظيم مختلف. يجب القيام بهذا الضبط من الأول مجددًا لأن محول المشروع لا يدعم تحديث الضبط الحالي
العقدة المُزالة | التقريب | ملاحظات |
AnimationTreePlayer | AnimationTree | تم إهمال AnimationTreePlayer منذ جودو 3.1 |
BakedLightmap | LightmapGI | راجع استخدام الإنارة العامة Lightmap |
BakedLightmapData | LightmapGIData | |
BitmapFont | FontFile | راجع استخدام الخطوط |
DynamicFont | FontFile | |
DynamicFontData | FontFile | |
Navigation2D | Node2D | تم استبداله بعقد تحرك ثنائية الأبعاد أخرى |
Navigation3D | Node3D | تم استبداله بعقد تحرك ثلاثية الأبعاد أخرى |
OpenSimplexNoise | FastNoiseLite | لديه معاملات خاصة والمزيد من أنواع الضجيج مثل الخلوي. لا يوجد دعم للضجيج رباعي الأبعاد لأنه غير موجود من مكتبة FastNoiseLite |
ToolButton | Button | كان ToolButton هو Button مع خاصية Flat مفعلة افتراضيًا |
YSort | Node2D or Control | أصبح لدى CanvasItem خاصية Y Sort Enabled في 4.0 |
ProximityGroup | Node3D | يمكن استخدام VisibleOnScreenNotifier3D كبديل |
Portal | Node3D | تم استبدال إعدام الانسداد في الفتحات والغرف بإعدام الانسداد النقطي ( عقدة OccluderIntance3D) التي تتطلب طريقة ضبط مختلفة |
Room | Node3D | |
RoomManager | Node3D | |
RoomGroup | Node3D | |
Occluder | Node3D | تم استبدال إعدام الانسداد في الأبعاد الهندسية بإعدام الانسداد النقطي ( عقدة OccluderIntance3D) التي تتطلب طريقة ضبط مختلفة |
OccluderShapeSphere | Resource |
تُبدل العقد تلقائيًأ مع عمود "التقريب" إذا تم تحميل مشروع قديم (حتى لو لم يتم استخدام أداة تحسين المشروع).
تغيرات الخيوط
تم تغيير واجهات برمجة الخيوط في 4.0 مثلًا يجب تعديل هذا الجزء من الشيفرة في 3.x للعمل على 4.0
# 3.x
var start_success = new_thread.start(self, "__threaded_background_loader",
[resource_path, thread_num]
)
# 4.0
var start_success = new_thread.start(__threaded_background_loader.bind(resource_path, thread_num))
لم تعد Thread.is_active()
مستخدمة ويجب تحويلها إلى Thread.is_alive()
انظر إلى: راجع سجل التغييرات للحصول على لائحة كاملة للتغيرات بين جودو 3.× و جودو 4
تحطم توافقية موارد ArrayMesh
التنسيق للملفات المحفوظة في .res
و.tres
لموارد ArrayaMesh المستخدم في 4.0 لا يتوافق مع المستخدم في 3.× . ستحتاج إلى استيراد ملف شبكة الموارد وحفظه كمورد ArrayMesh مجددًا.
لائحة التوابع والخاصيات والإشارات والثوابت المُعاد تسميتها تلقائيًا
يوجد في الملف المصدري editor/renames_map_3_to_4.ccp لائحة لكل عمليات إعادة التسمية عن طريق أداة تحسين المشروع. الأسطر التي فيها تعليق تشير الى إعادة تسمية من واجهة برمجة التطبيقات التي لا يمكن القيام بها تلقائيًا.
إعدادات محرر النقل
تستخدم كلًّا من جودو 4.0 و 3.× إعدادات محرر مختلفة أي أن الإعدادات يمكن تغييرها بمعزل عن بعض
افتح مجلد إعدادات المحرر إذا اردت نقل إعدادات جودو 3.× إلى جودو 4.0 وانسخ editor_settings-3.tres
إلى editor_settings-4.tres
عندما يكون محرر جودو 4 مغلقًا.
ملاحظة: العديد من أسماء الإعدادات والفئات تم تغييرها منذ جودو 3.×. لا تنتقل إعدادات المحرر التي أسمائها أو فئاتها قد تغيرت إلى جودو4.0 يجب ضبط هذه القيم مجددًا