即使使用印地语字体,印地语文本也无法与 TMPro 一起使用

问题描述 投票:0回答:1

我已经研究这个问题很长时间了,我正在尝试使用专门为其制作的字体来显示印地语文本

问题在于,将

印地语从 Google Translator 复制粘贴到 Unity TMPro 文本似乎不起作用,因为显示了经典的 NULL 方块

在下图中你可以看到我在说什么:

NiriHindiIssue

我确实尝试将 TMPro Unicode 范围设置为

0900–097F

,因为印地语字体具有该范围,但
它不会从文件中收集单个字符

我在使用其他语言

时遇到了同样的问题,例如俄语。我确实通过添加特定字体和 Unicode 范围到401-40C,40E-44F,451-45C,45E-45F,490-491

来解决了这个问题。

提前谢谢您。

我已经尝试过:

    在多种印地语字体之间进行更改
  • 更改字体的 Unicode 范围
unity-game-engine localization textmeshpro
1个回答
0
投票
由于我在网上找到的脚本,我实际上能够解决这个问题。

运行脚本之前:

issue1

运行脚本后:

issue2

剧本:

using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Text; public class UnicodeToKrutidev { private static string[] array_one = new string[] {"‘", "’", "“", "”", "(", ")", "{", "}", "=", "।", "?", "-", "µ", "॰", ",", ".", "् ", "०", "१", "२", "३", "४", "५", "६", "७", "८", "९", "x", "फ़्", "क़", "ख़", "ग़", "ज़्", "ज़", "ड़", "ढ़", "फ़", "य़", "ऱ", "ऩ", "त्त्", "त्त", "क्त", "दृ", "कृ", "ह्न", "ह्य", "हृ", "ह्म", "ह्र", "ह्", "द्द", "क्ष्", "क्ष", "त्र्", "त्र","ज्ञ", "छ्य", "ट्य", "ठ्य", "ड्य", "ढ्य", "द्य","द्व", "श्र", "ट्र", "ड्र", "ढ्र", "छ्र", "क्र", "फ्र", "द्र", "प्र", "ग्र", "रु", "रू", "्र", "ओ", "औ", "आ", "अ", "ई", "इ", "उ", "ऊ", "ऐ", "ए", "ऋ", "क्", "क", "क्क", "ख्", "ख", "ग्", "ग", "घ्", "घ", "ङ", "चै", "च्", "च", "छ", "ज्", "ज", "झ्", "झ", "ञ", "ट्ट", "ट्ठ", "ट", "ठ", "ड्ड", "ड्ढ", "ड", "ढ", "ण्", "ण", "त्", "त", "थ्", "थ", "द्ध", "द", "ध्", "ध", "न्", "न", "प्", "प", "फ्", "फ", "ब्", "ब", "भ्", "भ", "म्", "म", "य्", "य", "र", "ल्", "ल", "ळ", "व्", "व", "श्", "श", "ष्", "ष", "स्", "स", "ह", "ऑ", "ॉ", "ो", "ौ", "ा", "ी", "ु", "ू", "ृ", "े", "ै", "ं", "ँ", "ः", "ॅ", "ऽ", "् ", "्" }; private static string[] array_two = new string[] {"^", "*", "Þ", "ß", "¼", "½", "¿", "À", "¾", "A", "\\", "&", "&", "Œ", "]","-","~ ", "å", "ƒ", "„", "…", "†", "‡", "ˆ", "‰", "Š", "‹","Û", "¶", "d", "[k", "x", "T", "t", "M+", "<+", "Q", ";", "j", "u", "Ù", "Ùk", "Dr", "–", "—", "à", "á", "â", "ã", "ºz", "º", "í", "{", "{k", "«", "=","K", "Nî", "Vî", "Bî", "Mî", "<î", "|","}", "J", "Vª", "Mª", "<ªª", "Nª", "Ø", "Ý", "æ", "ç", "xz", "#", ":", "z", "vks", "vkS", "vk", "v", "bZ", "b", "m", "Å", ",s", ",", "_", "D", "d", "ô", "[", "[k", "X", "x", "?", "?k", "³", "pkS", "P", "p", "N", "T", "t", "÷", ">", "¥", "ê", "ë", "V", "B", "ì", "ï", "M", "<", ".", ".k", "R", "r", "F", "Fk", ")", "n", "/", "/k", "U", "u", "I", "i", "¶", "Q", "C", "c", "H", "Hk", "E", "e", "¸", ";", "j", "Y", "y", "G", "O", "o", "'", "'k", "\"", "\"k", "L", "l", "g", "v‚", "‚", "ks", "kS", "k", "h", "q", "w", "`", "s", "S", "a", "¡", "%", "W", "·", "~ ", "~"}; public static string UnicodeToKrutiDev(string unicode_substring){ int array_one_length = array_one.Length; string modified_substring = unicode_substring; int position_of_quote = modified_substring.IndexOf("'"); while (position_of_quote >= 0){ modified_substring = ReplaceFirstOccurrence(modified_substring,"'","^"); modified_substring = ReplaceFirstOccurrence(modified_substring,"'","*"); position_of_quote = modified_substring.IndexOf("'"); } int position_of_Dquote = modified_substring.IndexOf("\""); while (position_of_Dquote >= 0){ modified_substring = ReplaceFirstOccurrence(modified_substring,"\"","ß"); modified_substring = ReplaceFirstOccurrence(modified_substring,"\"","Þ"); position_of_Dquote = modified_substring.IndexOf("\""); } // first Replace the two-byte nukta_varNa with corresponding one-byte nukta varNas. modified_substring = modified_substring.Replace ( "क़", "क़" ); modified_substring = modified_substring.Replace ( "ख़", "ख़" ); modified_substring = modified_substring.Replace ( "ग़", "ग़" ); modified_substring = modified_substring.Replace ( "ज़", "ज़" ); modified_substring = modified_substring.Replace ( "ड़", "ड़" ); modified_substring = modified_substring.Replace ( "ढ़", "ढ़" ); modified_substring = modified_substring.Replace ( "ऩ", "ऩ" ); modified_substring = modified_substring.Replace ( "फ़", "फ़" ); modified_substring = modified_substring.Replace ( "य़", "य़" ); modified_substring = modified_substring.Replace ( "ऱ", "ऱ" ); // code for replacing "ि" (chhotee ee kii maatraa) with "f" and correcting its position too. var position_of_f = modified_substring.IndexOf( "ि" ) ; while ( position_of_f != -1 ) //while-02 { var character_left_to_f = modified_substring[position_of_f - 1]; modified_substring = modified_substring.Replace( character_left_to_f + "ि" , "f" + character_left_to_f ) ; position_of_f = position_of_f - 1; while (( position_of_f != 0 ) && ( modified_substring[position_of_f - 1] == '्' ) ) { var string_to_be_Replaced = modified_substring[position_of_f - 2 ] + "्" ; modified_substring = modified_substring.Replace( string_to_be_Replaced + "f", "f" + string_to_be_Replaced ) ; position_of_f = position_of_f - 2 ; } position_of_f = modified_substring.IndexOf("ि", position_of_f + 1 ) ; // search for f ahead of the current position. } // end of while-02 loop //************************************************************ // modified_substring = modified_substring.Replace( /fर्", "£" ) ; //************************************************************ // Eliminating "र्" and putting Z at proper position for this. string set_of_matras = "ािीुूृेैोौं:ँॅ"; modified_substring += " "; // add two spaces after the string to avoid UNDEFINED char in the following code. var position_of_half_R = modified_substring.IndexOf( "र्" ) ; while ( position_of_half_R > 0 ) // while-04 { // "र्" is two bytes long var probable_position_of_Z = position_of_half_R + 2 ; var character_right_to_probable_position_of_Z = modified_substring[probable_position_of_Z + 1]; // trying to find non-maatra position right to probable_position_of_Z . while ( set_of_matras.IndexOf( character_right_to_probable_position_of_Z ) != -1 ) { probable_position_of_Z = probable_position_of_Z + 1 ; character_right_to_probable_position_of_Z = modified_substring[probable_position_of_Z + 1]; } // end of while-05 var string_to_be_Replaced = modified_substring.Substring( position_of_half_R + 2 , ( probable_position_of_Z - position_of_half_R - 1 )) ; modified_substring = modified_substring.Replace( "र्" + string_to_be_Replaced , string_to_be_Replaced + "Z" ) ; position_of_half_R = modified_substring.IndexOf( "र्" ) ; } // end of while-04 modified_substring = modified_substring.Substring( 0 , modified_substring.Length - 2 ); //substitute array_two elements in place of corresponding array_one elements for( int input_symbol_idx = 0; input_symbol_idx < array_one_length; input_symbol_idx++ ) { int idx = 0 ; // index of the symbol being searched for Replacement while (idx != -1 ) //whie-00 { modified_substring = modified_substring.Replace (array_one [input_symbol_idx], array_two [input_symbol_idx]); idx = modified_substring.IndexOf (array_one [input_symbol_idx]); } // end of while-00 loop } // end of for loop return modified_substring; } public static string ReplaceFirstOccurrence (string Source, string Find, string Replace) { int Place = Source.IndexOf(Find); string result = Source.Remove(Place, Find.Length).Insert(Place, Replace); return result; } }
    
© www.soinside.com 2019 - 2024. All rights reserved.