-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathunityjsonandroid.html
More file actions
195 lines (152 loc) · 8.78 KB
/
Copy pathunityjsonandroid.html
File metadata and controls
195 lines (152 loc) · 8.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Unity - Carregando o json da pasta StreamingAssets</title>
<link rel="stylesheet" href="https://unpkg.com/purecss@1.0.1/build/pure-min.css" integrity="sha384-" crossorigin="anonymous">
<link rel="stylesheet" href="https://unpkg.com/purecss@1.0.1/build/grids-responsive-min.css">
<link rel="stylesheet" href="css/side-menu.css">
<link rel="stylesheet" href="css/blog/blog.css">
<link href="css/prism/prism.css" rel="stylesheet" />
</head>
<body>
<div id="layout">
<!-- Menu toggle -->
<a href="#menu" id="menuLink" class="menu-link">
<span></span>
</a>
<div id="menu">
<div class="pure-menu">
<ul class="pure-menu-list">
<li class="pure-menu-item"><a href="index.html" class="pure-menu-link">Home</a></li>
<li class="pure-menu-item"><a href="projects.html" class="pure-menu-link">Projects</a></li>
<li class="pure-menu-item menu-item-divided pure-menu-selected">
<a href="devlog.html" class="pure-menu-link">Devlog</a>
</li>
<li class="pure-menu-item"><a href="contact.html" class="pure-menu-link">Contact</a></li>
</ul>
</div>
</div>
<div id="layout" class="pure-g">
<div class="content pure-u-1 pure-u-md-3-4">
<div>
<!-- A wrapper for all the blog posts -->
<div class="posts">
<h1 class="content-subhead">Devlog</h1>
<!-- A single blog post -->
<section class="post">
<header class="post-header">
<img width="48" height="48" alt="Tilo Mitra's avatar" class="post-avatar" src="img/common/user.png">
<h2 class="post-title">Unity - Carregando o json da pasta StreamingAssets no Android</h2>
<p class="post-meta">
By <a href="#" class="post-author">Fred Oliveira</a> sobre
<a class="post-category post-category-design" href="#">Unity</a>
<br><b>22 de setembro de 2020</b>
</p>
</header>
<div class="post-description">
<p>
Um grande problema quando queremos utilizar um arquivo do tipo json, para por exemplo, traduzir um aplicativo/jogo no Android,
não conseguimos ter acesso a pasta StreamingAssets diretamente. A pasta StreamingAssets é uma pasta que o
Unity não criptografa, sendo excelente para colocar arquivos de tradução ou até arquivos de configuração do
seu aplicativo/jogo.<br>
Depois de algumas pesquisas, descobri como resolver este problema relacionado ao Android, quero deixar registrado para
ajudar quem tiver dificuldades.
A pasta StreamingAssets não é criada por padrão nos projetos, então crie na raiz do seu projeto.<br>
Primeiro vamos entender o funcionamento da leitura do json na game engine Unity.<br>
Existem diversos métodos para fazer a leitura de um json na engine, tive a oportunidade de estudar diversos métodos, este eu
considero o mais simplificado.
Vamos construir um json bem simples, bem direto ao ponto, exatamente o que preciso em uma aplicação que estou desenvolvendo no momento.<br>
Na pasta StreamingAssets, crie o arquivo "pt.json", você pode criar com qualquer nome, mas para este exemplo, lembre que vamos tratar o
nome do arquivo como "pt.json".<br>
Veja o json abaixo.
<pre><code class="language-json">{
"gameName": "Nome do jogo",
"gameMode1": "Modo de jogo 1",
"gameMode2": "Modo de jogo 2",
}
</code></pre>
Criado o json, também precisamos criar um novo script que será a classe que a engine vai inicializar.<br>
Crie conforme o exemplo abaixo.<br><br>
<pre><code class="language-csharp">public class Translate : MonoBehaviour
{
public TranslateDB translateDB = default;
void Start()
{
translateDB = new TranslateDB();
translateDB.LoadJson();
}
}
</code></pre>
Para este exmplo, apenas isso já é o suficiente, primeiro vamos criar uma referência para a outra classe que vamos criar mais adiante.<br>
Inicializamos ela e vamos chamar o método de tradução.<br>
Depois vamos montar a classe que contém as variáveis com os mesmos nomes das keys do arquivo json, coloquei o nome de TraslateDB neste script.<br><br>
<pre><code class="language-csharp">public class TranslateDB
{
public string gameName = default;
public string gameMode1 = default;
public string gameMode2 = default;
}</code></pre>
Dentro da mesma classe <b>TranslateDB</b> crie o método que faz a leitura do json<br>
<pre><code class="language-csharp">public void LoadJson()
{
string fileName = "pt.json";
string filePath = Application.streamingAssetsPath + "/" + fileName;
string jsonString = "";
jsonString = File.ReadAllText(filePath);
//... continua
}</code></pre>
<b>Obs¹</b> Devido a limitação do plugin de exibir códigos no html sobre o <>, fizemos uma separação no código do método de leitura do json.<br>
Insira o código abaixo logo após a última linha jsonString... <br><br>
<b>var jsonData = JsonUtility.FromJson<span><</span>translatedb<span>></span>(jsonString);</b><br><br>
Agora pode copiar o restante das linhas também no final do método.<br>
<pre><code class="language-csharp">gameName = jsonData.gameName;
gameMode1 = jsonData.gameMode1;
gameMode2 = jsonData.gameMode2;</code></pre>
Continuando, a método de acesso a arquivos da pasta StreamingAssets é a padrão da engine, como já mencionamos, no Android, o json
está dentro do apk, não sendo possível ter acesso diretamente, precisando ser necessário fazer um ajuste no método de leitura para que
seja verificado dentro do apk pela o arquivo.json especificado.<br><br>
<pre><code class="language-csharp">public void LoadJson()
{
string fileName = "pt.json";
string filePath = Application.streamingAssetsPath + "/" + fileName;
string jsonString = "";
if (Application.platform == RuntimePlatform.Android)
{
WWW reader = new WWW(filePath);
while (!reader.isDone) { }
jsonString = reader.text;
}
else
{
jsonString = File.ReadAllText(filePath);
}
//... continua
}</code></pre>
<b>Obs²</b> Como disse acima, insira a linha abaixo no método de leitura do json.<br><br>
<b>var jsonData = JsonUtility.FromJson<span><</span>TranslateDB<span>></span>(jsonString);</b><br><br>
Por fim, vamos finalizar o método com as 3 linhas abaixo.
<pre><code class="language-csharp">gameName = jsonData.gameName;
gameMode1 = jsonData.gameMode1;
gameMode2 = jsonData.gameMode2;</code></pre>
Desta forma, você consegue realizar a tradução também no Android<br>
Não foram feitos testes no IOS, pois não possuo equipamentos da Apple.<br>
Qualquer dúvida, pode me contactar pelas minhas redes sociais.
</p>
<p>
<a href="devlog.html">Voltar</a>
</p>
</div>
<div class="content">
</section>
</div>
</div>
</div>
</div>
</div>
<script src="js/ui.js"></script>
<script src="js/prism/prism.js"></script>
<script src="js/tittleChange.js"></script>
</body>
</html>