回答編集履歴
2
マテリアルのnullチェックを追加
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
マテリアル変更案を追記
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
|
+
```
|