質問編集履歴

4

System.IOを使うスクリプトで試してみました。

2021/07/27 11:02

投稿

masutake0
masutake0

スコア3

test CHANGED
File without changes
test CHANGED
@@ -181,3 +181,119 @@
181
181
  そもそもwebglではアプリ起動中にファイルを参照をすることができないのでしょうか。
182
182
 
183
183
  知っている方がいれば教えていただきたいです。
184
+
185
+
186
+
187
+ ###追記
188
+
189
+ System.IOを使うスクリプトで試してみました。
190
+
191
+
192
+
193
+ ```C#
194
+
195
+ using System.Collections;
196
+
197
+ using System.Collections.Generic;
198
+
199
+ using UnityEngine;
200
+
201
+ using System.IO;
202
+
203
+
204
+
205
+ public class TextLoad : MonoBehaviour
206
+
207
+ {
208
+
209
+ private float timeleft;
210
+
211
+ //テクスチャをマテリアル化するので生成しておく
212
+
213
+ [SerializeField] Material material;
214
+
215
+
216
+
217
+ void Start()
218
+
219
+ {
220
+
221
+ //先にマテリアルのシェーダを変更しておく
222
+
223
+ string shader = "Legacy Shaders/Diffuse";
224
+
225
+ material.shader = Shader.Find(shader);
226
+
227
+ //StartCoroutine(Connect());
228
+
229
+ }
230
+
231
+
232
+
233
+ void Update()
234
+
235
+ {
236
+
237
+ timeleft -= Time.deltaTime;
238
+
239
+ if (timeleft <= 0.0)
240
+
241
+ {
242
+
243
+ timeleft = 10.0f;
244
+
245
+ StartCoroutine(textLoad());
246
+
247
+ }
248
+
249
+ }
250
+
251
+
252
+
253
+ IEnumerator textLoad()
254
+
255
+ {
256
+
257
+ string filepath = Application.streamingAssetsPath + "/blue.png";
258
+
259
+ byte[] bytes;
260
+
261
+ var load_texture = new Texture2D(1, 1);
262
+
263
+ if (filepath.Contains("://") || filepath.Contains(":///"))
264
+
265
+ {
266
+
267
+ WWW www = new WWW(filepath);
268
+
269
+ yield return www;
270
+
271
+ byte[] result = www.bytes;
272
+
273
+ load_texture.LoadImage(result);
274
+
275
+ }
276
+
277
+ else
278
+
279
+ {
280
+
281
+ bytes = File.ReadAllBytes(filepath);
282
+
283
+ load_texture.LoadImage(bytes);
284
+
285
+ yield return load_texture;
286
+
287
+ Renderer renderer = GetComponent<Renderer>();
288
+
289
+ renderer.material.mainTexture = load_texture;
290
+
291
+ }
292
+
293
+ }
294
+
295
+ }
296
+
297
+
298
+
299
+ ```

3

タイトルを少し変えました

2021/07/27 11:02

投稿

masutake0
masutake0

スコア3

test CHANGED
@@ -1 +1 @@
1
- WebGL上のテクスチャの差し替えについて
1
+ UnityWebGL上のテクスチャの差し替えについて
test CHANGED
File without changes

2

途中段階で投稿してしまったため、更新しました。

2021/07/16 04:42

投稿

masutake0
masutake0

スコア3

test CHANGED
File without changes
test CHANGED
@@ -1,169 +1,3 @@
1
- ### 前提・実現したいこと
2
-
3
-
4
-
5
- 今回は[前回](https://teratail.com/questions/345726)の続きになります。
6
-
7
- ローカルフォルダにある画像を入れ替えることで、unityのwebgl上でオブジェクトのテクスチャを自由に変えられるようにしたいです。
8
-
9
-
10
-
11
- ### 試したこと
12
-
13
-
14
-
15
- 今回はwindowsアプリで上記のことができないか試してみたところ、無事にファイルを変更することでアプリを起動したままテクスチャを変更することができました。
16
-
17
-
18
-
19
- 行った手順を以下に示します。
20
-
21
-
22
-
23
- まず、以下のスクリプトをCubeにアタッチしてビルドしました。
24
-
25
-
26
-
27
- ```C#
28
-
29
- using System.Collections;
30
-
31
- using System.Collections.Generic;
32
-
33
- using UnityEngine;
34
-
35
- using UnityEngine.Networking;
36
-
37
-
38
-
39
- public class CubeTexture : MonoBehaviour
40
-
41
- {
42
-
43
- private float timeleft;
44
-
45
- //画像リンクから画像をテクスチャにする
46
-
47
- Texture texture;
48
-
49
- //テクスチャをマテリアル化するので生成しておく
50
-
51
- [SerializeField] Material material;
52
-
53
- //画像リンク
54
-
55
- string url = " file:///c:/Users/xxx/Desktop/blue.png";
56
-
57
- void Start()
58
-
59
- {
60
-
61
- //先にマテリアルのシェーダを変更しておく
62
-
63
- string shader = "Legacy Shaders/Diffuse";
64
-
65
- material.shader = Shader.Find(shader);
66
-
67
- //StartCoroutine(Connect());
68
-
69
- }
70
-
71
-
72
-
73
- void Update()
74
-
75
- {
76
-
77
- timeleft -= Time.deltaTime;
78
-
79
- if (timeleft <= 0.0)
80
-
81
- {
82
-
83
- timeleft = 10.0f;
84
-
85
- StartCoroutine("Connect");
86
-
87
- }
88
-
89
- }
90
-
91
-
92
-
93
- //テクスチャを読み込む
94
-
95
- private IEnumerator Connect()
96
-
97
- {
98
-
99
- UnityWebRequest www = UnityWebRequestTexture.GetTexture(url);
100
-
101
-
102
-
103
- yield return www.SendWebRequest();
104
-
105
-
106
-
107
- if (www.isNetworkError || www.isHttpError)
108
-
109
- {
110
-
111
- Debug.Log(www.error);
112
-
113
- }
114
-
115
- else
116
-
117
- {
118
-
119
- //textureに画像が入るよ
120
-
121
- texture = ((DownloadHandlerTexture)www.downloadHandler).texture;
122
-
123
- //textureをマテリアルにセット
124
-
125
- material.SetTexture("_MainTex", texture);
126
-
127
-
128
-
129
- gameObject.GetComponent<Renderer>().material = material;
130
-
131
- Debug.Log(www.error);
132
-
133
- }
134
-
135
- }
136
-
137
- }
138
-
139
- ```
140
-
141
-
142
-
143
- 画像はデスクトップ上に配置しています。
144
-
145
- 同じ名前の画像をデスクトップの画像に上書き保存するとアプリ上のテクスチャが上書きした画像に変更されました。
146
-
147
- ([前回](https://teratail.com/questions/345726)のgifのようなテクスチャの切り替わりが画像を変更するたびに行われます。)
148
-
149
-
150
-
151
- ###発生している問題
152
-
153
- 上記のwindowsアプリで行ったことをwebgl上で行いたいのですが、うまくいきません。
154
-
155
- webglでビルドしてlocalhostで試してみたところchromeのコンソール上で以下のようなエラーが出ました。
156
-
157
-
158
-
159
- Not allowed to load local resource
160
-
161
-
162
-
163
-
164
-
165
- よろしくお願いいたします。
166
-
167
1
  ### 前提・実現したいこと
168
2
 
169
3
 

1

途中段階で投稿してしまったため、更新しました。

2021/07/15 10:11

投稿

masutake0
masutake0

スコア3

test CHANGED
File without changes
test CHANGED
@@ -163,3 +163,187 @@
163
163
 
164
164
 
165
165
  よろしくお願いいたします。
166
+
167
+ ### 前提・実現したいこと
168
+
169
+
170
+
171
+ 今回は[前回](https://teratail.com/questions/345726)の続きになります。
172
+
173
+ ローカルフォルダにある画像を入れ替えることで、unityのwebgl上でオブジェクトのテクスチャを自由に変えられるようにしたいです。
174
+
175
+
176
+
177
+ ### 試したこと
178
+
179
+
180
+
181
+ 今回はwindowsアプリで上記のことができないか試してみたところ、無事にファイルを変更することでアプリを起動したままテクスチャを変更することができました。
182
+
183
+
184
+
185
+ 行った手順を以下に示します。
186
+
187
+
188
+
189
+ まず、以下のスクリプトをCubeにアタッチしてビルドしました。
190
+
191
+
192
+
193
+ ```C#
194
+
195
+ using System.Collections;
196
+
197
+ using System.Collections.Generic;
198
+
199
+ using UnityEngine;
200
+
201
+ using UnityEngine.Networking;
202
+
203
+
204
+
205
+ public class CubeTexture : MonoBehaviour
206
+
207
+ {
208
+
209
+ private float timeleft;
210
+
211
+ //画像リンクから画像をテクスチャにする
212
+
213
+ Texture texture;
214
+
215
+ //テクスチャをマテリアル化するので生成しておく
216
+
217
+ [SerializeField] Material material;
218
+
219
+ //画像リンク
220
+
221
+ string url = " file:///c:/Users/xxx/Desktop/blue.png";
222
+
223
+ void Start()
224
+
225
+ {
226
+
227
+ //先にマテリアルのシェーダを変更しておく
228
+
229
+ string shader = "Legacy Shaders/Diffuse";
230
+
231
+ material.shader = Shader.Find(shader);
232
+
233
+ //StartCoroutine(Connect());
234
+
235
+ }
236
+
237
+
238
+
239
+ void Update()
240
+
241
+ {
242
+
243
+ timeleft -= Time.deltaTime;
244
+
245
+ if (timeleft <= 0.0)
246
+
247
+ {
248
+
249
+ timeleft = 10.0f;
250
+
251
+ StartCoroutine("Connect");
252
+
253
+ }
254
+
255
+ }
256
+
257
+
258
+
259
+ //テクスチャを読み込む
260
+
261
+ private IEnumerator Connect()
262
+
263
+ {
264
+
265
+ UnityWebRequest www = UnityWebRequestTexture.GetTexture(url);
266
+
267
+
268
+
269
+ yield return www.SendWebRequest();
270
+
271
+
272
+
273
+ if (www.isNetworkError || www.isHttpError)
274
+
275
+ {
276
+
277
+ Debug.Log(www.error);
278
+
279
+ }
280
+
281
+ else
282
+
283
+ {
284
+
285
+ //textureに画像が入るよ
286
+
287
+ texture = ((DownloadHandlerTexture)www.downloadHandler).texture;
288
+
289
+ //textureをマテリアルにセット
290
+
291
+ material.SetTexture("_MainTex", texture);
292
+
293
+
294
+
295
+ gameObject.GetComponent<Renderer>().material = material;
296
+
297
+ Debug.Log(www.error);
298
+
299
+ }
300
+
301
+ }
302
+
303
+ }
304
+
305
+ ```
306
+
307
+
308
+
309
+ 画像はデスクトップ上に配置しています。
310
+
311
+ 同じ名前の画像をデスクトップの画像に上書き保存するとアプリ上のテクスチャが上書きした画像に変更することできました。
312
+
313
+ ([前回](https://teratail.com/questions/345726)のgifのようなテクスチャの切り替わりが画像を変更することで行えるようになりました。)
314
+
315
+
316
+
317
+ ###発生している問題
318
+
319
+ 上記のwindowsアプリで行ったことをwebgl上で行いたいのですが、うまくいきません。
320
+
321
+ webglでビルドしてlocalhostで試してみたところchromeのコンソール上で以下のようなエラーが出ました。
322
+
323
+
324
+
325
+ Not allowed to load local resource
326
+
327
+
328
+
329
+ そこで、以下のようなファイル構成にして画像リンクを./image/blue.pngに変更しました。
330
+
331
+ ```
332
+
333
+ sample
334
+
335
+ ┣ image/
336
+
337
+ ┃ ┗ blue.png
338
+
339
+ ┗ index.html
340
+
341
+ ```
342
+
343
+ これでwebglを起動させると画像が反映されるのですが、アプリを動かしている状態で画像の上書きをしてもテクスチャ変更することができませんでした。
344
+
345
+
346
+
347
+ そもそもwebglではアプリ起動中にファイルを参照をすることができないのでしょうか。
348
+
349
+ 知っている方がいれば教えていただきたいです。