Skip to content

راه‌حل برای مشکل آپدیت نشدن متن راست‌چین در یونیتی 6 و بالاتر(Solution for RTL Text Not Updating in Unity 6) #147

@sahandSaedi

Description

@sahandSaedi

Solution for RTL Text Not Updating in Unity 6

تیتر فارسی:
راه‌حل برای مشکل آپدیت نشدن متن راست‌چین در یونیتی 6 و بالاتر

متن پیام:

سلام به همگی،

اگر شما هم بعد از آپدیت به نسخه‌های جدید یونیتی (مخصوصا 2022 و بالاتر) با این مشکل مواجه شده‌اید که متن کامپوننت RTLTMPro هنگام تغییر از طریق کد آپدیت نمی‌شود، یک راه‌حل ساده و کارآمد برای آن وجود دارد.

مشکل اصلی:
در نسخه‌های جدید یونیتی، ساختار داخلی Text Mesh Pro تغییر کرده و پکیج RTLTMPro دیگر به صورت خودکار از تغییرات متن مطلع نمی‌شود.

راه‌حل (Workaround):
بعد از اینکه متن کامپوننت TMP_Text اصلی را از طریق کد تغییر دادید، باید به صورت دستی به کامپوننت RTL هم بگویید که متن را دوباره پردازش کند. این کار را با تنظیم مجدد پراپرتی text روی خود اسکریپت RTL انجام می‌دهیم.

نکته مهم: نام کامپوننت RTL در نسخه‌های مختلف این پکیج ممکن است متفاوت باشد. در مثال زیر از RTLTextMeshPro استفاده شده است. شما باید نام دقیق کامپوننتی که در Inspector خود می‌بینید را جایگزین کنید (ممکن است RTLTMPro یا نام دیگری باشد).

مثال کد:

فرض کنید یک TMP_Text به نام myRtlText دارید:

Generated csharp
using UnityEngine;
using TMPro;
// فراموش نکنید که فضای نام پکیج RTL را اضافه کنید
// نام آن ممکن است RTLTMPro یا RTLTextMeshPro باشد
using RTLTMPro;

public class YourTextManager : MonoBehaviour
{
public TMP_Text myRtlText;

public void UpdateText(string newDescription)
{
    if (myRtlText == null) return;
    
    // ۱. ابتدا متن کامپوننت اصلی TMP را تنظیم کنید
    myRtlText.SetText(newDescription);

    // ۲. کامپوننت RTL را از همان آبجکت بگیرید
    // !!! توجه: نام "RTLTextMeshPro" را با نام دقیق کامپوننت خود جایگزین کنید !!!
    var rtlComponent = myRtlText.GetComponent<RTLTextMeshPro>();

    // ۳. با تنظیم مجدد متن روی کامپوننت RTL، آن را مجبور به آپدیت کنید
    if (rtlComponent != null)
    {
        rtlComponent.text = newDescription;
    }
    else
    {
        Debug.LogWarning("RTL Component not found on the displayText object.");
    }
}

}

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

امیدوارم این راه‌حل به دیگران هم کمک کند.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions