تطوير الألعاب

استخدام الخطوط العربية وتشكيل النص في Unity

Nesto your best freind

١٣ يوليو ٢٠٢٦

0 إعجاب4 دقيقة قراءة

جعل الخطوط العربية في Unity تظهر بشكل صحيح يُربك معظم المطوّرين أول مرة — فالحروف تظهر متقطّعة أو معكوسة أو مربّعات فارغة. والحل سلسلة من ثلاثة أمور تُنجَز بدقّة: خطّ يحوي فعلًا الحروف العربية، وأصل خطّ في TextMesh Pro مبنيّ ليتضمّن تلك الحروف، وطبقة تشكيل تصل الحروف وتعيد ترتيبها قبل أن تصل إلى الشاشة.

هذا الدليل هو نصف الدعم العربي المتعلّق بالخط وTMP. أما عكس التخطيط والأرقام وسير عمل التعريب الكامل فتجده في تعريب الألعاب ودعم RTL؛ وهنا نركّز على سبب ظهور النص خاطئًا وكيف نجعل كل حرف يتّصل بجاره.

لماذا يظهر العربي مكسورًا في Unity

ثلاثة أعطال منفصلة تنتج ثلاثة أعراض مختلفة، ومعرفة أيّها لديك يوفّر ساعات:

  • حروف منفصلة معزولة — يرسم الخطّ كل رمز في صورته المفردة لأن شيئًا لم يشكّل النص. فالعربية متّصلة، ولكل حرف حتى أربع صور (منفصل، أول، وسط، آخر) وعلى المحرّك أن يختار الصورة الصحيحة حسب الجيران. ونص واجهة Unity لا يفعل ذلك وحده.
  • مربّعات فارغة (tofu) — الحرف مفقود من أطلس الخط؛ طلب المُشكِّل صورة لم يبنِها أصل الخط قط.
  • انعكاس ترتيب الكلمات — لم تعمل خوارزمية الاتجاه ثنائي الاتجاه (Bidi)، فرُسم المقطع العربي من اليسار إلى اليمين.

عليك حلّ الثلاثة معًا؛ فإن فاتك التشكيل رأيت خيوطًا متشابكة، وإن فاتك الأطلس رأيت مربّعات، وإن فاتك الترتيب قُرئت الجملة بالمقلوب.

اختر خطًّا يحوي الحروف العربية فعلًا

ليس كل خطّ مكتوب عليه «يدعم العربية» يحوي ما تحتاجه طريقة التشكيل في Unity. هناك عائلتان: النسخ (تقليدي مقروء، الأفضل لنصوص المتن — Noto Naskh Arabic و Amiri) والكوفي/الهندسي (مظهر واجهات حديث — Cairo و Tajawal و Almarai). والأربعة جميعًا مرخّصة بحرّية تحت رخصة SIL Open Font، وهذا مهمّ للعبة تُنشَر.

الشرط غير الواضح: لأن الإضافات الشائعة في Unity تعيد تشكيل النص إلى صور العرض العربية (Arabic Presentation Forms) — أي المتغيّرات المُشكَّلة مسبقًا: منفصل وأول ووسط وآخر — يجب أن يحوي خطّك رموز هذه الصور، لا الحروف الأساسية وجداول OpenType فقط. الخطوط الكلاسيكية مثل Amiri وعائلة Noto العربية تحويها، بينما بعض الخطوط الحديثة جدًّا تأتي بالحروف الأساسية فقط فتتعطّل مع هذه الطريقة. فإن اتّصلت الحروف في المتصفّح ولم تتّصل في Unity، فهذا التعارض هو السبب غالبًا.

ابنِ أصل خطّ TextMesh Pro للعربية

استخدم TextMesh Pro لا نص UI.Text القديم — فرسم SDF في TMP يبقى حادًّا عند أي حجم، وهو حيث تتّصل الإضافات. ثم ولّد أصل خطّ يتضمّن النطاقات العربية:

  1. ضع ملف .ttf/.otf في المشروع، ثم افتح Window ← TextMeshPro ← Font Asset Creator.
  2. اضبط Source Font File على خطّك العربي.
  3. اضبط Character Set على Unicode Range (Hex) وألصق النطاقات التي تحتاجها: 0020-007E (اللاتيني)، و0600-06FF (العربي)، و0750-077F (الملحق العربي)، وFB50-FDFF (صور العرض A)، وFE70-FEFF (صور العرض B). نطاقات صور العرض هي ما يجعل التشكيل ممكنًا.
  4. اختر Render Mode: SDFAA وAtlas Resolution بقيمة 2048 × 2048 (ارفعها إلى 4096 إن قُطعت الحروف)، مع Padding حوالي 5 لتفادي الحواف الضبابية.
  5. اضغط Generate Font Atlas ثم Save لحفظ الأصل.

والأفضل على Unity 2020.1+ / TMP 2.1 فأحدث: اضبط Atlas Population Mode لأصل الخط على Dynamic. فأصل الخط الديناميكي يرسم الحروف المفقودة وقت التشغيل مباشرةً من الخط المصدر، فتحصل على تغطية عربية كاملة دون بناء أطلس ثابت ضخم مسبقًا — مثاليّ لأسماء المستخدمين والدردشة.

أضِف التشكيل وRTL عبر RTLTMPro

يرسم TextMesh Pro الحروف لكنه لا يشكّل العربية ولا يعيد ترتيبها. أضِف إضافة RTLTMPro مفتوحة المصدر (ثبّتها عبر Package Manager ← *Add package from git URL*، أو OpenUPM). تستبدل مكوّن TMP القياسي بمكوّن RTLTextMeshPro يأخذ نصك المنطقي ويُخرج نصًّا مُشكَّلًا ومرتَّبًا صحيحًا.

أهم خيارات المكوّن:

  • Preserve Numbers — أبقِ الأرقام الغربية (1، 2، 3) بدل تحويلها إلى عربية-هندية.
  • Farsi — بدّل بين سلوك الأرقام والحروف الفارسي والعربي.
  • Fix Tags — حافظ على وسوم النص الغني مثل <color> عبر إعادة التشكيل.
  • للنصوص القادمة من الكود وقت التشغيل، اضبط .text على مكوّن RTL كالمعتاد فيعيد التشكيل عند الإسناد.

وإن بنيت مسار نص مخصّصًا أو WebGL، فمرّر كل نص عبر HarfBuzz للتشكيل وعبر تطبيق Bidi لليونيكود للترتيب — وهذا تحديدًا ما تغلّفه الإضافات.

أخطاء شائعة وإصلاحها

  • مربّعات في وسط الكلمات — صورة عرض مفقودة؛ وسّع نطاقات اليونيكود أو انتقل إلى أصل خطّ ديناميكي.
  • عربي ضبابي — دقّة الأطلس منخفضة أو الحجم صغير؛ ارفع الأطلس إلى 4096 وزِد الـPadding.
  • التشكيل (الحركات) مقصوص أو متداخل — زِد ارتفاع السطر والـPadding، واختبر بنصوص مشكّلة بالكامل لا بنص عارٍ.
  • الغامق المزيّف مشوّه — العربية لا تتحمّل الغامق الاصطناعي؛ اشحن وزنًا غامقًا حقيقيًا كأصل خطّ منفصل.
  • مزيج عربي + إنجليزي + إيموجي — اضبط قائمة خطوط احتياطية (fallback) على أصلك الأساسي ليسحب TMP حروف اللاتيني والإيموجي من خطوط أخرى عند غيابها.

انشرها واختبرها مع لاعبين حقيقيين

بمجرد أن يظهر العربي نظيفًا في المحرّر، أثبِته في متصفّح حقيقي — فمسار نص WebGL له عيوبه الخاصة ولا تظهر الحقيقة إلا على الشاشة. صدّر نسختك وانشرها على The Gaming Nest: يفتحها اللاعب العربي فورًا في المتصفّح دون تنزيل، فتحصل على ملاحظات متحدّثين أصليين عن خطوطك بسرعة. ارفع لعبتك بصيغة WebGL، أو شارك في هاكاثون الألعاب القادم واعرض واجهتك العربية أمام جمهور حيّ. وابدأ بمقالنا العام عن تطوير الألعاب في العالم العربي إن أردت الصورة الأكبر أولًا.

العلامات

#Unity#تشكيل النص#الخطوط العربية#TextMesh Pro#RTLTMPro#Arabic fonts

عن الكاتب

Nesto your best freind

ملخص المقال

النص العربي متقطّع أو معكوس في Unity؟ أصلِح تشكيل الحروف وRTL عبر TextMesh Pro والخط المناسب وأصول الخطوط الديناميكية وإضافة RTLTMPro.

المشاهدات

0

0 تعليق
شارك المقال:

التعليقات

شاركنا رأيك حول هذا المقال

التعليقات(0)

سجّل الدخول لإضافة تعليق. تسجيل الدخول

جاري التحميل...

استخدام الخطوط العربية وتشكيل النص في Unity | The Gaming Nest