Skip to content

sajadspeed/unity-persian-font

Repository files navigation

استفاده از فونت دلخواه برای موتور یونیتی

روش استفاده از فونت دلخواه برای Text Mesh Pro یا همان TMP در موتور بازی‌سازی یونیتی. هنگام استفاده از TMP برای متون فارسی، حروف جدا جدا نوشته می‌شن و این یه مشکل بزرگه، پس به ناچار از برنامه‌های فارسی‌نویس استفاده می‌کنیم. به شکل عادی وقتی متن تبدیل شده را از این جور نرم‌افزارها به یونیتی میاریم به خطای «Missing character» برخورد می‌کنیم. حتی در استفاده از RTLTMPro هم این مشکل پابرجاست. دلیلش رو در ادامه شرح می‌دهم.

چه نوع فونت‌هایی می‌توان استفاده کرد

ببینید معمولا فونت‌هایی که با پیشوند LMU هستند که حدس می‌زنم مال نرم‌افزار LeoMoon باشند کار می‌کنند. چراییش هم اینه که این نرم‌افزارهای فارسی‌ساز برای حروف پیوسته، سرهم یا هر چیز دیگه‌ای که اسمش هست معمولا از کاراکترهایی در بازه U+FE80 تا U+FEFC استفاده می‌کنند. خیلی از فونت‌ها اینا رو ندارند، چون قاعدتا هم نباید داشته باشند اصلا استانداردهای یونیکد فارسی اینطوری نیست. خلاصه که یه سری از دوستان گل این موارد رو درست می‌کنن توی فونت‌ها که مشکلی نداشته باشه. به عنوان مثال فونت «لاله‌زار» به شکل پیش‌فرض این بازه کاراکترها رو نداره. حالا آقای مهدی برقگیر عزیز زحمت کشیدن و این موارد رو اصلاح کردن و فونت «لاله‌زار» رو تحت عنوان «لاله‌زارپلاس» توسعه دادن. الان می‌تونیم این کاراکترها رو ببینیم:

LalezarPlusCharacters

فقط کافیه فونتی که می‌خواید استفاده کنید رو با یه نرم‌افزاری مثل همین FontForge یا هر چیز دیگه‌ای باز کنید، یا اصلا ببرید توی یونیتی ببینید Missing Character می‌ده یا نه و این کاراکترها رو چک کنید وجود داشته باشند. حالا اگه نداشتند چکار کنیم؟ اول برید بگردید ورژن جدیدتری چیزی که کس دیگه‌ای اصلاح کرده باشه پیدا کنید. اگر نشد و هنوز اصرار به استفاده از اون فونت رو دارید با یه نرم‌افزار فونت‌ادیتور مثل همین FontForge بازش کنید و کاراکترهای مربوطه را که معمولا توی رنج U+FE80 تا U+FEFC هستند رو اصلاح کنید. می‌تونید از یه فونت دیگه‌ای که این مقادیر رو داره ببینید تا حداقل کاراکترهای لازم رو اصلاح کنید. معمولا شکل سرهم حروف توی خود فونت هم طراحی می‌شن فقط جاشون توی این رنج نیست، بیاریدشون توی این بازه تا اصلاح بشه. اگر اصلاح هم شد خواهشا به اشتراک بگذارید تا دیگران هم استفاده بکنند.

نحوه استفاده

خوب حالا که فونت خودتون رو انتخاب کردید کار خاص دیگه‌ای نداره، فقط کافیه از Windows > TextMeshPro > Font Asset Creator یه Font Asset ایجاد بکنید. فونت رو انتخاب کنید و قسمت Character Set رو روی Unicode Range (Hex) قرار بدید و در فیلد Character Sequence (Hex) این مقادیر رو بنویسید:

0000-007F,00A0,00AB,00BB,00D7,00F7,060C,060D,061B,061F,0621-063A,0640-0656,0660-066D,067E,0686,0698,06A9,06AF,06CC,06F0-06F9,200C,200D,2018-201F,2022,2026,202F,2039-203A,2044,FB56-FB59,FB7A-FB7D,FB8A-FB8B,FB8E-FB95,FBA4-FBA5,FBE8-FBE9,FBFC-FBFF,FD3E-FD3F,FDF2,FDFC,FE80-FEFC

در آخر می‌تونید جزئیات اینکه اینا چی هستند رو مطالعه کنید. حالا روی Generate Font Atlas بزنید. یه بیست سی‌تایی Missing Character طبیعیه، محض احتیاط من توی Range آوردمشون که اگه کسی استفاده داشت به مشکل برنخوره. حالا هم ذخیره کنید و تمام! دیگه با نرم‌افزارهای فارسی‌نویس مشکل نخواهید داشت.

جزئیات فنی‌تر

اون چیزهایی که توی فیلد Character Sequence (Hex) وارد کردیم در واقع Unicodeهای کاراکترهایی بوده که ما می‌خواستیم استفاده کنیم. یا به قول معروف Atlas آن‌ها رو ایجاد کنیم. حالا اونا یونیکدهای چه کاراکترهایی بودند:

  • حروف، اعداد، علائم نگارشی و نگاره‌های پرکاربرد انگلیسی
  • حروف، اعداد، علائم نگارشی و نگاره‌های پرکاربرد فارسی
  • موارد پرکاربرد عربی که معمولا در فارسی هم استفاده می‌شوند مثل همزه،تنوین و...

لیست دقیق این‌ها رو می‌تونید توی فایل Unicodes.txt مشاهده کنید؛ شکل صحیح نوشتاری برای فیلد Character Sequence (Hex) هم داخل Unicode_Ranges_Hex.txt هست.

پ.ن: این لیست Unicodeها رو من دستی نشستم در آوردم، چون نمی‌خواستم کاراکترهای اضافه زیادی داخلشون باشه؛ تا الان چیزی از قلم نیفتاده ولی اگه به موردی برخورد کردید حتما بگید تا اصلاح کنم.

نکات تکمیلی

  1. خود فونت «لاله‌زارپلاس» وقتی توی یونیتی از اون استفاده می‌شه و کاراکتر نیم‌فاصله درج می‌شه یک خط عمودی اضافه از خودش به جا می‌گذارد که این مورد رو اصلاح کردم و فونت اصلاح شده به اسم Digi Lalezar Plus Unity.ttf قرار گرفت.

About

How to use persian(fa) font in Unity

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published