欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

unity多語言管理器-創(chuàng)新互聯(lián)

多語言是游戲中比較長見的功能,實現(xiàn)起來也相對比較簡單,在這里簡單說一下思路,稍后代碼附上

成都創(chuàng)新互聯(lián)主要從事成都做網(wǎng)站、網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)梁平,10多年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220

簡單說一下步驟:

步驟一、設(shè)計多語言配置表。在這里說一下多語言配置表。就是一個json格式文件,每種語言的簡寫作

             為當(dāng)前語言的鍵,比如簡體用zh-hans,值是一個json對象。比如游戲中有一個需要多語言的

             label,內(nèi)容是“登陸游戲”,我們簡單寫一下這個表

            {

               "zh-hans": {

                    "登陸游戲": "",

                       " 輸入昵稱": "",

                    "***力增加{0}%":""

               },

               "zh-hant": {

                 "登陸游戲": "登錄遊戲",

                  "輸入昵稱": "輸入暱稱",

                   "***力增加{0}%":"攻擊力增加{0}%"

               }

           }

        “zh-hans”表示簡體表,“zh-hant”表示繁體表,可能還會有其他語言,比如,英文,德

            文,法文等等,都可以加。您可能也注意到了,不管是哪個語言表,他們的鍵都是簡體中文,

            這樣設(shè)計的好處就是直觀,后面隨著語言的增多,和表中的鍵值對增多,給鍵取名也是很難的

            事。所以,干脆就是用簡體中文作為鍵,其他的語言都通過它來翻譯,這樣既直觀又省事。

            配置表設(shè)計好了以后,將游戲各個模塊中用到的,需要進(jìn)行多語言設(shè)置的label中的文字,以

            label為單位,每個label中的文本作為一對鍵值,添加到配置表里。這里有一種特殊情況,就

            是label中可能有不斷變化的數(shù)值,例如:“***力增加5%”,“英雄獲得200金幣”等,這樣

            的情況,這時就不能直接寫到配置表里,需要一個字符串格式化處理,例如:“***力增加

            5%”改為“***力增加{0}%”;“英雄獲得200金幣”改為“英雄獲得{0}金幣”。在下面的代

            碼中也提供相應(yīng)的方法。

步驟二、初始化,主要工作就是解析多語言配置表,加載對應(yīng)語言的字庫。

步驟三、LanguageManager中提供了兩個重載的GetValue()方法,游戲中需要多語言顯示的label,普

            通文本就調(diào)用GetValue(string key,UILabel label)方法,有需要格式化字符的label,例

            如:“***力增加5%”就調(diào)用GetValue(string key,UILabel label, params object[]

            args),args是可變參數(shù),可以傳入數(shù)值,int,float,string都可以,如:GetValue("***力

            增加{0}%",label,5);因為多語言表中可以查到"***力增加{0}%"這個鍵,所以就可以顯示出與

            當(dāng)前語言對應(yīng)的文本。

步驟四、當(dāng)切換語言的時候,LanguageManager提供了一個ChangeLanguage方法,重新設(shè)置當(dāng)前的

             語言鍵值表,并且發(fā)送一個消息,通知所有模塊更新本模塊內(nèi)的所有涉及的多語言的label,所

            以在各個模塊需要監(jiān)聽一個多語言發(fā)生改變的事件方法,在方法里重新調(diào)用GetValue方法給

            label賦值。一般切換語言后需要做一下本地存儲,方便玩家下次進(jìn)入游戲就可以直接進(jìn)入上次

            選擇的語言環(huán)境。

代碼如下:

using UnityEngine;

using System.Collections;

using System.Collections.Generic;

using LitJson;

public class LanguageManager : Singleton<LanguageManager>

{

  private string dataPath = "data/language";

  //字體

  private Dictionary<string, Font> dicFonts = new Dictionary<string, Font>();

  private Dictionary<string, string> dicLanguagePack = new Dictionary<string, string>();

  private string currLanguageKey = "";

  private JsonData JDAllLanguages = null;

  private Dictionary<string, string> dicSupportLanguage = new Dictionary<string, string>();

  private Dictionary<int, string> dicLabelsimplifiedKeys = new Dictionary<int, string>();

  /// <summary>

  /// 獲取與當(dāng)前語言對應(yīng)的簡體中文的鍵

  /// </summary>

  /// <param name="val"></param>

  /// <returns></returns>

  public string GetSimplifiedKey(string val)

  {

    foreach (KeyValuePair<string, string> kvp in dicLanguagePack)

      if (kvp.Value == val)

        return kvp.Key;

    return string.Empty;

  }

  public string GetLanguageKey(string val)

  {

    foreach (KeyValuePair<string,string> kvp in dicSupportLanguage)

      if (kvp.Value == val)

        return kvp.Key;

    return string.Empty;

  }

  public string GetLanguageVal(string key)

  {

    if (dicSupportLanguage.ContainsKey(key))

      return dicSupportLanguage[key];

    return string.Empty;

  }

  public List<string> GetLanguageValues()

  {

    List<string> list = new List<string>();

    foreach (KeyValuePair<string,string> kvp in dicSupportLanguage)

      list.Add(kvp.Value);

    return list;

  }

  public void Init()

  {

    currLanguageKey = UserData.Instance.CurrentLanguage;

    //1.初始化多語言配置表

    TextAsset tex = Resources.Load(dataPath) as TextAsset;

    string data = tex.text;

    Debug.Log("data is " + data);

    JDAllLanguages = JsonMapper.ToObject(data);

    Debug.Log("jdalllanguages is " + JDAllLanguages.ToJson());

    //JsonData jd = JsonMapper.ToObject(data);

    if (JDAllLanguages != null)

      parse(JDAllLanguages);

    dicSupportLanguage.Clear();

    dicSupportLanguage.Add("zh-hans", "簡體中文");

    dicSupportLanguage.Add("zh-hant", "繁體中文");

    Font f = Resources.Load("font/hycchj") as Font;

    if(!dicFonts.ContainsKey("zh-hans")) dicFonts.Add("zh-hans", f);

    f = Resources.Load("font/jingdianfanghei_fanti") as Font;

    if (!dicFonts.ContainsKey("zh-hant")) dicFonts.Add("zh-hant", f);

  }

  void parse(JsonData jd)

  {

    JsonData jdLan = null;

    if (jd.Keys.Contains(currLanguageKey))

      jdLan = jd[currLanguageKey];

    dicLanguagePack.Clear();

    foreach (string key in jdLan.Keys)

      if (!dicLanguagePack.ContainsKey(key))

        dicLanguagePack.Add(key, jdLan[key].ToString());

  }

  /// <summary>

  /// 切換語言

  /// </summary>

  /// <param name="lan"></param>

  public void ChangeLanguage(string lan)

  {

    if (UserData.Instance.CurrentLanguage == lan)

      return;

    UserData.Instance.CurrentLanguage = lan;

    currLanguageKey = lan;

    RefreshGameLanguagePack();

    //應(yīng)該在這里發(fā)送一個語言環(huán)境改變的事件通知

    MessageController.Instance.SendNotification(MessageTypes.LocalMessageType.LanguageChanged.ToString(), this, null);

  }

  public string GetValue(string key,UILabel label)

  {

    if (label)

      label.trueTypeFont = GetFont();

    if (dicLanguagePack.ContainsKey(key))

    {

      if (currLanguageKey == "zh-hans")

        return key;

      else

        return dicLanguagePack[key];

    }

    return key;

  }

  public string GetValue(string key,UILabel label, params object[] args)

  {

    if (label)

    {

      label.trueTypeFont = GetFont();

      Debug.Log(label.trueTypeFont.name);

    }

    return GetValue(key, args);

  }

  string GetValue(string key, params object[] args)

  {

    if (dicLanguagePack.ContainsKey(key))

    {

      if(currLanguageKey == "zh-hans")

        return string.Format(key, args);

      else

        return string.Format(dicLanguagePack[key], args);

    }

    return key;

  }

  public Font GetFont()

  {

    if(dicFonts.ContainsKey(currLanguageKey))

      return dicFonts[currLanguageKey];

    return null;

  }

  /// <summary>

  /// 更新游戲語言環(huán)境,用于玩家切換語言環(huán)境

  /// </summary>

  public void RefreshGameLanguagePack()

  {

    parse(JDAllLanguages);

  }

  //給對象添加多語言腳本

  //public void AddMulLanguageTextScript(GameObject go)

  //{

  //   if (go == null) return;

  //   UILabel[] labels = go.GetComponentsInChildren<UILabel>();

  //   foreach (UILabel item in labels)

  //   {

  //     if(item.transform.gameObject.GetComponent<MultiLanguageText>() == null)

  //       item.transform.gameObject.AddComponent<MultiLanguageText>();

  //   }

  //}

}

這里只出里了文字性的多語言,另外圖片也會涉及到多語言,其實都差不多,可以存一下圖片的名字,在不同的語言環(huán)境調(diào)用不同的圖片名(或者路徑)就可以。

先寫到這,有什么錯誤的地方,歡迎大家留言指正,謝謝!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

當(dāng)前標(biāo)題:unity多語言管理器-創(chuàng)新互聯(lián)
當(dāng)前URL:http://chinadenli.net/article40/pdheo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化面包屑導(dǎo)航全網(wǎng)營銷推廣微信公眾號定制開發(fā)網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機網(wǎng)站建設(shè)