blob: f9bf10ebb504266f0a10fd148e748ac3fbc3cf86 (
plain)
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
|
using System.Collections.Generic;
using UnityEngine;
[ExecuteInEditMode]
public class ParticleDecal : MonoBehaviour
{
public ParticleSystem m_decalSystem;
[Range(0f, 100f)]
public float m_chance = 100f;
private ParticleSystem part;
private List<ParticleCollisionEvent> collisionEvents = new List<ParticleCollisionEvent>();
private void Awake()
{
part = GetComponent<ParticleSystem>();
collisionEvents = new List<ParticleCollisionEvent>();
}
private void OnParticleCollision(GameObject other)
{
if (!(m_chance < 100f) || !(Random.Range(0f, 100f) > m_chance))
{
int num = part.GetCollisionEvents(other, collisionEvents);
for (int i = 0; i < num; i++)
{
ParticleCollisionEvent particleCollisionEvent = collisionEvents[i];
Vector3 eulerAngles = Quaternion.LookRotation(particleCollisionEvent.normal).eulerAngles;
eulerAngles.x = 0f - eulerAngles.x + 180f;
eulerAngles.y = 0f - eulerAngles.y;
eulerAngles.z = Random.Range(0, 360);
ParticleSystem.EmitParams emitParams = default(ParticleSystem.EmitParams);
emitParams.position = particleCollisionEvent.intersection;
emitParams.rotation3D = eulerAngles;
emitParams.velocity = -particleCollisionEvent.normal * 0.001f;
m_decalSystem.Emit(emitParams, 1);
}
}
}
}
|