الترقية من جودو 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 تدعم فقط gdshade‎r‎‎.

تشغيل أداة تحديث المشروع

تنبيه: أنشئ نسخة احتياطية كاملة للمشروع قبل التحديث! لن تنسخ الأداة مشروعك نسخًا احتياطيًا خلال عملية التحديث يمكنك إجراء بالنسخ الاحتياطي باستخدام التحكم بالإصدار، أو نسخ مجلد المشروع إلى مكان أخر.

استخدام مدير المشروع

لاستخدام أداة تحديث المشروع:

  1. افتح مدير المشروع الخاص بجودو 4
  2. استورد مشروع جودو 3‎.×‎ باستخدام زر استيراد Import أو استخدم زر مسح Scan لإيجاد المشروع داخل المجلد
  3. انقر نقرة مزدوجة على المشروع المستورد (أو اختر المشروع واختر تعديل Edit)
  4. سترى مربع حوار بخيارين: تحويل project.godot فقط Convert project.godot Only أو تحويل كامل المشروع Convert Full Project. بعد التأكد من أن المشروع لديه نسخة احتياطية (راجع التنبيه السابق)، اختر تحويل كامل المشروع Convert Full Project. إن خيار تحويل project.godot فقط Convert project.godot Only هو للاستعمالات المتقدمة فقط إذا فشلت أداة التحويل.
  5. انتظر لينتهي تحويل المشروع. قد يستغرق عدة دقائق للمشاريع الكبيرة ذات المَشاهد المتعددة
  6. عندما تصبح واجهة مدير المشروع متاحة مجددًا انقر نقرة مزدوجة على المشروع (أو اختر المشروع واختر تعديل 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 يجب ضبط هذه القيم مجددًا

مصادر