[TUTORIAL] Trocar jogo de linguagem facilmente com UI Dropdown v2.
4 participantes
Página 1 de 1
[TUTORIAL] Trocar jogo de linguagem facilmente com UI Dropdown v2.
Andei pesquisando na internet e achei um projeto de manipulação de arquivos ini muito interessante e util. Resolvi criar então um sistema que faça a troca facil de linguagens com esses arquivos. Sendo possivel usuarios criarem suas proprias traduções e seu jogo as reconhecerá.
Funciona bem simples. O jogo lê um arquivo .ini com os textos, identifica qual linguagem é, e seta na sua cena texto por texto.
Primeiramente vamos instalar o projeto de manipulação de arquivos .ini. Baixe: https://github.com/rickyah/ini-parser/archive/development.zip
Abra o zip e vá em src e extraia apenas a pasta IniFileParser para seu projeto no unity.
Pronto agora crie esses 2 scripts:
Agora para fazer funcionar basta que voce coloque o script SetTextsScript em cada UI Text que voce criar e colocar na variavel index de cada o index correto.
Se voce colocar 0 o texto vai ser o primeiro que estiver no arquivo de traducao...se botar 1 será o segundo... 2 o terceiro.....
Bem simples.
Veja que no primeiro script há um evento OnLanguageFilesMissed(string error)
Abra o script e edite o que acontecerá caso os arquivos ou a pasta não possam ser encontrados no pc do jogador.
Como criar suas traduções:
Basta copiar algum arquivo da pasta StreamingAssets/Local/Languages/, renomear com o nome da linguagem (exemplo: frances) e traduzir todas as frases. Depois abra o jogo novamente para as novas linguagens aparecerem na lista do dropdown.
O resultado:
Link para baixar o projeto junto com os arquivos de linguagem utilizados (IMPORTANTE BAIXAR ! QUALQUER MUDANÇA NA ESTRUTURA DOS ARQUIVOS FARÁ O SISTEMA NÃO FUNCIONAR).
https://github.com/RenanMsV/Unity-3D-Language-System-with-rickyah-ini-parser/
Funciona bem simples. O jogo lê um arquivo .ini com os textos, identifica qual linguagem é, e seta na sua cena texto por texto.
Primeiramente vamos instalar o projeto de manipulação de arquivos .ini. Baixe: https://github.com/rickyah/ini-parser/archive/development.zip
Abra o zip e vá em src e extraia apenas a pasta IniFileParser para seu projeto no unity.
Pronto agora crie esses 2 scripts:
- Código:
using UnityEngine;
using UnityEngine.UI;
using System;
using System.Collections;
using System.IO;
using System.Text;
using IniParser;
using IniParser.Model;
public class Language : MonoBehaviour {
IniData data;
FileIniDataParser fileIniData;
string patch;
public string[] languageFiles;
public string[] gameTexts;
public Dropdown languageDropdown;
void Start () {
InitializeLanguageSystem ();
SetDropdownOptions ();
}
/// <summary>
/// Initializes the language system.
/// </summary>
void InitializeLanguageSystem(){
patch = Application.dataPath + "/StreamingAssets/Local/Languages/";
fileIniData = new FileIniDataParser();
}
/// <summary>
/// Sets the dropdown options.
/// </summary>
void SetDropdownOptions (){
try {
languageFiles = Directory.GetFiles (patch,"*.ini",SearchOption.TopDirectoryOnly);
if (languageFiles.Length == 0) {
OnLanguageFilesMissed("Not find any files in '" + patch + "'");
return;
}
} catch (Exception e) {
OnLanguageFilesMissed(e.Message);
return;
}
foreach (string local in languageFiles) {
data = fileIniData.ReadFile (local);
languageDropdown.options.Add( new Dropdown.OptionData{ text = data ["LanguageName"] ["NAME"]} );
}
languageDropdown.value = 1; // corrige bug do dropdown ficar vazio
if (PlayerPrefs.HasKey ("languageValue")) {
languageDropdown.value = PlayerPrefs.GetInt ("languageValue");
} else {
languageDropdown.value = 0;
PlayerPrefs.SetInt ("languageValue", 0);
}
languageDropdown.onValueChanged.AddListener((int arg)=>{
HandleTexts ();
});
HandleTexts ();
}
/// <summary>
/// Handles the texts.
/// </summary>
void HandleTexts (){
data = fileIniData.ReadFile (languageFiles[languageDropdown.value]);
KeyDataCollection keys = data.Sections.GetSectionData ("Language").Keys;
int i = 0;
gameTexts = new string[keys.Count];
foreach (KeyData k in keys) {
gameTexts[i] = k.Value;
i++;
}
PlayerPrefs.SetInt ("languageValue",languageDropdown.value);
SetTextsScript[] tempTexts = FindObjectsOfType<SetTextsScript> ();
foreach (SetTextsScript t in tempTexts) {
t.Handle ();
}
}
// Eventos a gosto do Desenvolvedor :
/// <summary>
/// Raises the language files missed event.
/// </summary>
/// <param name="error">Error string.</param>
void OnLanguageFilesMissed(string error){
// o que fazer quando a pasta ou os arquivos não puderem ser recuperados!
// crie novos arquivos, mande a pessoa reinstalar ou sla.
print("Erro: " + error + " Reinstale o jogo!");
}
}
- Código:
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class SetTextsScript : MonoBehaviour {
Text txt;
Language lang;
public int index;
void Awake(){
lang = FindObjectOfType<Language>().GetComponent<Language>();
txt = GetComponent<Text> ();
}
public void Handle(){
if (!lang) {
print ("Object not Found");
return;
}
txt.text = lang.gameTexts[index];
}
}
Agora para fazer funcionar basta que voce coloque o script SetTextsScript em cada UI Text que voce criar e colocar na variavel index de cada o index correto.
Se voce colocar 0 o texto vai ser o primeiro que estiver no arquivo de traducao...se botar 1 será o segundo... 2 o terceiro.....
Bem simples.
Veja que no primeiro script há um evento OnLanguageFilesMissed(string error)
Abra o script e edite o que acontecerá caso os arquivos ou a pasta não possam ser encontrados no pc do jogador.
Como criar suas traduções:
Basta copiar algum arquivo da pasta StreamingAssets/Local/Languages/, renomear com o nome da linguagem (exemplo: frances) e traduzir todas as frases. Depois abra o jogo novamente para as novas linguagens aparecerem na lista do dropdown.
O resultado:
Link para baixar o projeto junto com os arquivos de linguagem utilizados (IMPORTANTE BAIXAR ! QUALQUER MUDANÇA NA ESTRUTURA DOS ARQUIVOS FARÁ O SISTEMA NÃO FUNCIONAR).
https://github.com/RenanMsV/Unity-3D-Language-System-with-rickyah-ini-parser/
Última edição por RenanMSV em Qui Set 15, 2016 12:58 pm, editado 1 vez(es)
RenanMSV- Instrutor
- PONTOS : 4485
REPUTAÇÃO : 356
Áreas de atuação : Programação em C#, PHP. SQL, JavaScript (Web)
Respeito as regras :
Re: [TUTORIAL] Trocar jogo de linguagem facilmente com UI Dropdown v2.
Legal cara, vai ajudar muita gente! Parabéns pela iniciativa!
Re: [TUTORIAL] Trocar jogo de linguagem facilmente com UI Dropdown v2.
artplayer escreveu:Legal cara, vai ajudar muita gente! Parabéns pela iniciativa!
Obrigado ! :lol!:
@edit Adicionado link para download dos scripts junto com os arquivos de linguagem. É importante baixar e seguir a estrutura desses arquivos. Apenas adicione novos campos de texto usando MSG0008,MSG0009,MSG0010............. e por ai vai.
Qualquer mudança na estrutura do arquivo ini irá dar erro.
Na verdade o nome de cada campo não importa, voce pode botar qualquer coisa no nome, mas é bom manter a ordem não é mesmo?
O que importa é a posição deles.
RenanMSV- Instrutor
- PONTOS : 4485
REPUTAÇÃO : 356
Áreas de atuação : Programação em C#, PHP. SQL, JavaScript (Web)
Respeito as regras :
Re: [TUTORIAL] Trocar jogo de linguagem facilmente com UI Dropdown v2.
Parabéns brother! Excelente tutorial! Abraços!
WiredD- Avançado
- PONTOS : 3327
REPUTAÇÃO : 14
Respeito as regras :
Tópicos semelhantes
» [TUTORIAL] Trocar jogo de linguagem facilmente com UI Dropdown via script.
» Como fazer um sistema para trocar musica da cena com DROPDOWN?
» [TUTORIAL] Salvar dados com playerprefs facilmente.
» [TUTORIAL] Criar árvores fácilmente com o criador de árvores da Unity
» [TUTORIAL] Evitar Sombras ULTRA escuras após trocar de cena
» Como fazer um sistema para trocar musica da cena com DROPDOWN?
» [TUTORIAL] Salvar dados com playerprefs facilmente.
» [TUTORIAL] Criar árvores fácilmente com o criador de árvores da Unity
» [TUTORIAL] Evitar Sombras ULTRA escuras após trocar de cena
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos