回答編集履歴

2

マテリアルのnullチェックを追加

2020/12/27 08:22

投稿

Bongo
Bongo

スコア10807

test CHANGED
@@ -178,7 +178,13 @@
178
178
 
179
179
 
180
180
 
181
+ if (snowMaterial != null)
182
+
183
+ {
184
+
181
- snowMaterial.color = Color.white;
185
+ snowMaterial.color = Color.white;
186
+
187
+ }
182
188
 
183
189
  rendererModule.mesh = snowMesh;
184
190
 

1

マテリアル変更案を追記

2020/12/27 08:22

投稿

Bongo
Bongo

スコア10807

test CHANGED
@@ -101,3 +101,119 @@
101
101
  }
102
102
 
103
103
  ```
104
+
105
+
106
+
107
+ ##マテリアル変更案
108
+
109
+
110
+
111
+ ```C#
112
+
113
+ public class UASUpdate : MonoBehaviour
114
+
115
+ {
116
+
117
+ Material snowMaterial;
118
+
119
+ ParticleSystem snowParticle;
120
+
121
+
122
+
123
+ void Start()
124
+
125
+ {
126
+
127
+ transform.position = new Vector3(0, 1000f, 0);
128
+
129
+
130
+
131
+ // 球からはメッシュだけを取得する
132
+
133
+ GameObject snow = GameObject.CreatePrimitive(PrimitiveType.Sphere);
134
+
135
+ Mesh snowMesh = snow.GetComponent<MeshFilter>().sharedMesh;
136
+
137
+ Destroy(snow);
138
+
139
+
140
+
141
+ // 「Legacy Shaders/Diffuse」を探し、それを使って雪のマテリアルを作る
142
+
143
+ // このシェーダーはデフォルトでAlways Included Shadersのリストに入って
144
+
145
+ // いるはずなので、ゲーム内でも使える見込みがあるかもしれないと考えました
146
+
147
+ // Standardと違って設定できるのはメインカラーとメインテクスチャだけで、
148
+
149
+ // 見た目もシンプルな拡散反射であり、表現力はStandardよりもしょぼいですが
150
+
151
+ // 雪の表現ぐらいならこれでもけっこうまかなえるんじゃないでしょうか?
152
+
153
+ // パフォーマンスは優れているはずなので、雪のように大量に描画する場合には
154
+
155
+ // むしろStandardよりも利点が大きいかもしれません
156
+
157
+ Shader snowShader = Shader.Find("Legacy Shaders/Diffuse");
158
+
159
+ snowMaterial = snowShader == null ? null : new Material(snowShader);
160
+
161
+
162
+
163
+ snowParticle = gameObject.AddComponent<ParticleSystem>();
164
+
165
+ snowParticle.Stop();
166
+
167
+ ParticleSystem.MainModule mainModule = snowParticle.main;
168
+
169
+ ParticleSystemRenderer rendererModule = GetComponent<ParticleSystemRenderer>();
170
+
171
+
172
+
173
+ mainModule.startSize = 10.0f;
174
+
175
+ mainModule.maxParticles = 1000;
176
+
177
+ mainModule.gravityModifier = 1.0f;
178
+
179
+
180
+
181
+ snowMaterial.color = Color.white;
182
+
183
+ rendererModule.mesh = snowMesh;
184
+
185
+ rendererModule.renderMode = ParticleSystemRenderMode.Mesh;
186
+
187
+ rendererModule.sharedMaterial = snowMaterial;
188
+
189
+ }
190
+
191
+
192
+
193
+ void Update()
194
+
195
+ {
196
+
197
+ if (Input.GetMouseButtonDown(1))
198
+
199
+ {
200
+
201
+ snowParticle.Play();
202
+
203
+ }
204
+
205
+ }
206
+
207
+
208
+
209
+ void OnDestroy()
210
+
211
+ {
212
+
213
+ Destroy(snowMaterial);
214
+
215
+ }
216
+
217
+ }
218
+
219
+ ```