AmirCollider
Unity DirectTMP v1.0.0
A س

Unity DirectTMP

فایل فونت رو مستقیم بده به TextMeshPro — هر زبونی، همون‌جوری که هست.

به‌جای فونت‌اسِت SDF از پیش پخته‌شده، خودِ فایل .ttf یا .otf رو به TextMeshPro می‌ده. گلیف‌ها همون لحظه‌ای که قراره کشیده بشن از فایل ساخته می‌شن، پس فارسی، عربی، ژاپنی، چینی و کره‌ای بدون هیچ تنظیمی رندر می‌شن.

رایگان · MIT · بدون کد لایسنس

مشکل، در یک تصویر

یه فونت پیدا می‌کنی، می‌ندازیش توی یونیتی، یه ساعت توی Font Asset Creator رِنج کاراکترها رو انتخاب می‌کنی — و همین که یه بازیکن اسم خودش رو فارسی تایپ می‌کنه، این رو می‌بینی:

□□□□□□□□
با فونت‌اسِت پخته‌شده
سلام دنیا
با DirectTMP

فایل فونت از قبل دقیقاً می‌دونه چه گلیف‌هایی داره. DirectTMP فقط دست از این برداشته که وانمود کنه نمی‌دونه.

و روی خودِ یونیتی هم اثر می‌ذاره تازه در ۱.۰

یه GameObject رو «敵スポーナー» اسم بذار یا یه پوشه رو «فونت‌ها» — یونیتی درست ذخیره‌ش می‌کنه و بعد تا ابد بهت مربع خالی نشون می‌ده. اسست سالمه؛ رابط خودِ یونیتی با فونت خودِ یونیتی کشیده می‌شه و هیچ پکیج TextMeshPro ای تا حالا بهش دست نزده بود.

از مسیر Unity DirectTMP ▸ Editor Font می‌تونی نوار منو، Hierarchy، Inspector، پنجره‌ی Project و Console رو با فونتی که خودت انتخاب می‌کنی بکشی.

هیچ‌چیزی روی نصب یونیتی نوشته نمی‌شه. تغییر فقط توی حافظه‌ی همون سشن زندگی می‌کنه، پس بستن یونیتی همیشه همه‌چیز رو برمی‌گردونه — و فونتی که نتونه حروف لاتین و عدد رو بکشه اصلاً اعمال نمی‌شه، چون اون‌وقت خودِ گزینه‌ی «برگردون» هم مربع خالی می‌شد.

کاتالوگ فونت

همه‌ی فونت‌های پروژه و همه‌ی فونت‌های نصب‌شده روی سیستم توی یه لیست، و هر فایل مستقیم خونده می‌شه تا حقیقتش رو بگه: اسم خانواده‌ای که سازنده‌ی فونت نوشته، تعداد واقعی گلیف‌ها، و اینکه دقیقاً چه خط‌هایی رو می‌تونه بنویسه.

LatinCyrillicKanaHanArabic script ~HebrewThai

سبز یعنی پوشش کامل، کهربایی یعنی ناقص. همون کهربایی نکته‌ی اصلیه: فونتی که عربی داره ولی پ گ چ ژ نداره نمی‌تونه فارسی بنویسه، و یه فلگ ساده‌ی «از عربی پشتیبانی می‌کند» با خیال راحت بهت می‌گه می‌تونه.

چه‌کار می‌کند

فایل فونت رو بده، نه فونت‌اسِت رو

یه .ttf یا .otf رو بکش روی کامپوننت، تموم. کارهای SDF بی‌سروصدا پشت صحنه انجام می‌شه.

هر خطی که فونت داره، همون لحظه

فونتی که ۲۰٬۰۰۰ کانجی داره، واقعاً ۲۰٬۰۰۰ کانجی داره. دیگه هیچ‌وقت لازم نیست لیست کاراکترها رو دستی بنویسی.

زنجیره‌ی فال‌بک با ترتیب خودت

یه فونت لاتین، یه CJK و یه فونت نماد رو پشت سر هم بچین؛ برای هر کاراکتر اولین فونتی که اون رو داره انتخاب می‌شه.

لود فونت در زمان اجرا

از StreamingAssets، از persistentDataPath، از یه byte[] دانلودشده، یا از فونت‌های نصب‌شده‌ی خود کاربر.

کش می‌شه، دوباره ساخته نمی‌شه

یه صفحه با ۲۰۰ لیبل که همه یه فونت دارن، فقط و فقط یه اطلس می‌سازه.

بررسی سلامت که خودش رو توضیح می‌ده

می‌گه چی کار می‌کنه، چی کار نمی‌کنه و چرا؛ هرچی رو بشه با یه کلیک درست می‌کنه و کل گزارش رو برای ثبت باگ کپی می‌کنه.

نصب

  1. برو به Window ← Package Manager
  2. کلیک کن روی + ← Add package from git URL…
  3. این آدرس رو بچسبون و Add رو بزن: https://github.com/AmirCollider/UnityDirectTMP.git

پیش‌نیازها

  • یونیتی 2021.3 LTS به بعد (یونیتی ۶ هم پشتیبانی می‌شه)
  • TextMeshPro 3.0 به بعد — همراه خودِ یونیتی میاد
  • بدون هیچ وابستگی دیگه‌ای به کتابخونه‌ی شخص‌ثالث
  • بدون هزینه، بدون کد لایسنس، بدون حساب کاربری، بدون درخواست شبکه

سؤال‌های پرتکرار

واقعاً رایگانه؟ گیرش کجاست؟

گیری نداره. لایسنس MIT، کل سورس روی گیت‌هاب، بدون تله‌ی نسخه‌ی پولی و بدون تلمتری. اگه به کارت اومد، یه ستاره روی ریپازیتوری تنها هزینه‌شه.

عوض کردن فونت ادیتور خطرناک نیست؟

برای همینه که فونتی که نتونه رابط خود ادیتور رو بکشه اصلاً اعمال نمی‌شه، نه اینکه فقط هشدار بگیره. تغییر هم فقط توی حافظه‌ی همون سشنه: چیزی روی نصب یونیتی نوشته نمی‌شه و بستن برنامه همیشه همه‌چیز رو برمی‌گردونه.

روی پرفورمنس بازی اثر می‌ذاره؟

هر گلیف فقط یه بار ساخته می‌شه و بعدش کَش می‌مونه؛ هزینه‌ش بار اوله، نه هر فریم. فونت‌ها هم بر اساس (فایل + سایز + حالت رندر) کش می‌شن، پس صفحه‌ای با ۲۰۰ لیبل که همه یه فونت دارن فقط یه اطلس می‌سازه. برای متن‌های سنگین CJK هم Preload هست.

حروف فارسی به هم می‌چسبن؟

گلیف‌ها رندر می‌شن، ولی شکل‌دهی و اتصال حروف (Shaping) هنوز توی نقشه‌ی راهه. فعلاً برای متن‌های آماده‌ی از قبل شکل‌داده‌شده یا همراه یه کتابخونه‌ی RTL کار می‌کنه.

باید فونت رو توی بیلد بذارم؟

اگه فونت همراه بازی ارسال می‌شه، بله — و بررسی لایسنس فونت با خودته، چون قرار دادن یه .ttf داخل بیلد یعنی بازنشر. ویژگی فونتِ ادیتور اما چیزی رو بازنشر نمی‌کنه؛ فقط ادیتور رو به فونتی که از قبل روی سیستمته وصل می‌کنه.

از همین قفسه