teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

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

2021/07/27 11:02

投稿

masutake0
masutake0

スコア3

title CHANGED
File without changes
body CHANGED
@@ -89,4 +89,62 @@
89
89
  これでwebglを起動させると画像が反映されるのですが、アプリを動かしている状態で画像の上書きをしてもテクスチャ変更することができませんでした。
90
90
 
91
91
  そもそもwebglではアプリ起動中にファイルを参照をすることができないのでしょうか。
92
- 知っている方がいれば教えていただきたいです。
92
+ 知っている方がいれば教えていただきたいです。
93
+
94
+ ###追記
95
+ System.IOを使うスクリプトで試してみました。
96
+
97
+ ```C#
98
+ using System.Collections;
99
+ using System.Collections.Generic;
100
+ using UnityEngine;
101
+ using System.IO;
102
+
103
+ public class TextLoad : MonoBehaviour
104
+ {
105
+ private float timeleft;
106
+ //テクスチャをマテリアル化するので生成しておく
107
+ [SerializeField] Material material;
108
+
109
+ void Start()
110
+ {
111
+ //先にマテリアルのシェーダを変更しておく
112
+ string shader = "Legacy Shaders/Diffuse";
113
+ material.shader = Shader.Find(shader);
114
+ //StartCoroutine(Connect());
115
+ }
116
+
117
+ void Update()
118
+ {
119
+ timeleft -= Time.deltaTime;
120
+ if (timeleft <= 0.0)
121
+ {
122
+ timeleft = 10.0f;
123
+ StartCoroutine(textLoad());
124
+ }
125
+ }
126
+
127
+ IEnumerator textLoad()
128
+ {
129
+ string filepath = Application.streamingAssetsPath + "/blue.png";
130
+ byte[] bytes;
131
+ var load_texture = new Texture2D(1, 1);
132
+ if (filepath.Contains("://") || filepath.Contains(":///"))
133
+ {
134
+ WWW www = new WWW(filepath);
135
+ yield return www;
136
+ byte[] result = www.bytes;
137
+ load_texture.LoadImage(result);
138
+ }
139
+ else
140
+ {
141
+ bytes = File.ReadAllBytes(filepath);
142
+ load_texture.LoadImage(bytes);
143
+ yield return load_texture;
144
+ Renderer renderer = GetComponent<Renderer>();
145
+ renderer.material.mainTexture = load_texture;
146
+ }
147
+ }
148
+ }
149
+
150
+ ```

3

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

2021/07/27 11:02

投稿

masutake0
masutake0

スコア3

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

2

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

2021/07/16 04:42

投稿

masutake0
masutake0

スコア3

title CHANGED
File without changes
body CHANGED
@@ -70,89 +70,6 @@
70
70
  ```
71
71
 
72
72
  画像はデスクトップ上に配置しています。
73
- 同じ名前の画像をデスクトップの画像に上書き保存するとアプリ上のテクスチャが上書きした画像に変更されました。
74
- ([前回](https://teratail.com/questions/345726)のgifのようなテクスチャの切り替わりが画像を変更するたびに行われます。)
75
-
76
- ###発生している問題
77
- 上記のwindowsアプリで行ったことをwebgl上で行いたいのですが、うまくいきません。
78
- webglでビルドしてlocalhostで試してみたところchromeのコンソール上で以下のようなエラーが出ました。
79
-
80
- Not allowed to load local resource
81
-
82
-
83
- よろしくお願いいたします。
84
- ### 前提・実現したいこと
85
-
86
- 今回は[前回](https://teratail.com/questions/345726)の続きになります。
87
- ローカルフォルダにある画像を入れ替えることで、unityのwebgl上でオブジェクトのテクスチャを自由に変えられるようにしたいです。
88
-
89
- ### 試したこと
90
-
91
- 今回はwindowsアプリで上記のことができないか試してみたところ、無事にファイルを変更することでアプリを起動したままテクスチャを変更することができました。
92
-
93
- 行った手順を以下に示します。
94
-
95
- まず、以下のスクリプトをCubeにアタッチしてビルドしました。
96
-
97
- ```C#
98
- using System.Collections;
99
- using System.Collections.Generic;
100
- using UnityEngine;
101
- using UnityEngine.Networking;
102
-
103
- public class CubeTexture : MonoBehaviour
104
- {
105
- private float timeleft;
106
- //画像リンクから画像をテクスチャにする
107
- Texture texture;
108
- //テクスチャをマテリアル化するので生成しておく
109
- [SerializeField] Material material;
110
- //画像リンク
111
- string url = " file:///c:/Users/xxx/Desktop/blue.png";
112
- void Start()
113
- {
114
- //先にマテリアルのシェーダを変更しておく
115
- string shader = "Legacy Shaders/Diffuse";
116
- material.shader = Shader.Find(shader);
117
- //StartCoroutine(Connect());
118
- }
119
-
120
- void Update()
121
- {
122
- timeleft -= Time.deltaTime;
123
- if (timeleft <= 0.0)
124
- {
125
- timeleft = 10.0f;
126
- StartCoroutine("Connect");
127
- }
128
- }
129
-
130
- //テクスチャを読み込む
131
- private IEnumerator Connect()
132
- {
133
- UnityWebRequest www = UnityWebRequestTexture.GetTexture(url);
134
-
135
- yield return www.SendWebRequest();
136
-
137
- if (www.isNetworkError || www.isHttpError)
138
- {
139
- Debug.Log(www.error);
140
- }
141
- else
142
- {
143
- //textureに画像が入るよ
144
- texture = ((DownloadHandlerTexture)www.downloadHandler).texture;
145
- //textureをマテリアルにセット
146
- material.SetTexture("_MainTex", texture);
147
-
148
- gameObject.GetComponent<Renderer>().material = material;
149
- Debug.Log(www.error);
150
- }
151
- }
152
- }
153
- ```
154
-
155
- 画像はデスクトップ上に配置しています。
156
73
  同じ名前の画像をデスクトップの画像に上書き保存するとアプリ上のテクスチャが上書きした画像に変更することできました。
157
74
  ([前回](https://teratail.com/questions/345726)のgifのようなテクスチャの切り替わりが画像を変更することで行えるようになりました。)
158
75
 

1

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

2021/07/15 10:11

投稿

masutake0
masutake0

スコア3

title CHANGED
File without changes
body CHANGED
@@ -80,4 +80,96 @@
80
80
  Not allowed to load local resource
81
81
 
82
82
 
83
- よろしくお願いいたします。
83
+ よろしくお願いいたします。
84
+ ### 前提・実現したいこと
85
+
86
+ 今回は[前回](https://teratail.com/questions/345726)の続きになります。
87
+ ローカルフォルダにある画像を入れ替えることで、unityのwebgl上でオブジェクトのテクスチャを自由に変えられるようにしたいです。
88
+
89
+ ### 試したこと
90
+
91
+ 今回はwindowsアプリで上記のことができないか試してみたところ、無事にファイルを変更することでアプリを起動したままテクスチャを変更することができました。
92
+
93
+ 行った手順を以下に示します。
94
+
95
+ まず、以下のスクリプトをCubeにアタッチしてビルドしました。
96
+
97
+ ```C#
98
+ using System.Collections;
99
+ using System.Collections.Generic;
100
+ using UnityEngine;
101
+ using UnityEngine.Networking;
102
+
103
+ public class CubeTexture : MonoBehaviour
104
+ {
105
+ private float timeleft;
106
+ //画像リンクから画像をテクスチャにする
107
+ Texture texture;
108
+ //テクスチャをマテリアル化するので生成しておく
109
+ [SerializeField] Material material;
110
+ //画像リンク
111
+ string url = " file:///c:/Users/xxx/Desktop/blue.png";
112
+ void Start()
113
+ {
114
+ //先にマテリアルのシェーダを変更しておく
115
+ string shader = "Legacy Shaders/Diffuse";
116
+ material.shader = Shader.Find(shader);
117
+ //StartCoroutine(Connect());
118
+ }
119
+
120
+ void Update()
121
+ {
122
+ timeleft -= Time.deltaTime;
123
+ if (timeleft <= 0.0)
124
+ {
125
+ timeleft = 10.0f;
126
+ StartCoroutine("Connect");
127
+ }
128
+ }
129
+
130
+ //テクスチャを読み込む
131
+ private IEnumerator Connect()
132
+ {
133
+ UnityWebRequest www = UnityWebRequestTexture.GetTexture(url);
134
+
135
+ yield return www.SendWebRequest();
136
+
137
+ if (www.isNetworkError || www.isHttpError)
138
+ {
139
+ Debug.Log(www.error);
140
+ }
141
+ else
142
+ {
143
+ //textureに画像が入るよ
144
+ texture = ((DownloadHandlerTexture)www.downloadHandler).texture;
145
+ //textureをマテリアルにセット
146
+ material.SetTexture("_MainTex", texture);
147
+
148
+ gameObject.GetComponent<Renderer>().material = material;
149
+ Debug.Log(www.error);
150
+ }
151
+ }
152
+ }
153
+ ```
154
+
155
+ 画像はデスクトップ上に配置しています。
156
+ 同じ名前の画像をデスクトップの画像に上書き保存するとアプリ上のテクスチャが上書きした画像に変更することできました。
157
+ ([前回](https://teratail.com/questions/345726)のgifのようなテクスチャの切り替わりが画像を変更することで行えるようになりました。)
158
+
159
+ ###発生している問題
160
+ 上記のwindowsアプリで行ったことをwebgl上で行いたいのですが、うまくいきません。
161
+ webglでビルドしてlocalhostで試してみたところchromeのコンソール上で以下のようなエラーが出ました。
162
+
163
+ Not allowed to load local resource
164
+
165
+ そこで、以下のようなファイル構成にして画像リンクを./image/blue.pngに変更しました。
166
+ ```
167
+ sample
168
+ ┣ image/
169
+ ┃ ┗ blue.png
170
+ ┗ index.html
171
+ ```
172
+ これでwebglを起動させると画像が反映されるのですが、アプリを動かしている状態で画像の上書きをしてもテクスチャ変更することができませんでした。
173
+
174
+ そもそもwebglではアプリ起動中にファイルを参照をすることができないのでしょうか。
175
+ 知っている方がいれば教えていただきたいです。