You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
2.0 KiB
49 lines
2.0 KiB
3 years ago
|
/*This script created by using docs.unity3d.com/ScriptReference/MonoBehaviour.OnParticleCollision.html*/
|
||
|
using UnityEngine;
|
||
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
|
||
|
public class ParticleCollisionInstance : MonoBehaviour
|
||
|
{
|
||
|
public GameObject[] EffectsOnCollision;
|
||
|
public float DestroyTimeDelay = 5;
|
||
|
public bool UseWorldSpacePosition;
|
||
|
public float Offset = 0;
|
||
|
public Vector3 rotationOffset = new Vector3(0,0,0);
|
||
|
public bool useOnlyRotationOffset = true;
|
||
|
public bool UseFirePointRotation;
|
||
|
public bool DestoyMainEffect = true;
|
||
|
private ParticleSystem part;
|
||
|
private List<ParticleCollisionEvent> collisionEvents = new List<ParticleCollisionEvent>();
|
||
|
private ParticleSystem ps;
|
||
|
|
||
|
void Start()
|
||
|
{
|
||
|
part = GetComponent<ParticleSystem>();
|
||
|
}
|
||
|
void OnParticleCollision(GameObject other)
|
||
|
{
|
||
|
int numCollisionEvents = part.GetCollisionEvents(other, collisionEvents);
|
||
|
for (int i = 0; i < numCollisionEvents; i++)
|
||
|
{
|
||
|
foreach (var effect in EffectsOnCollision)
|
||
|
{
|
||
|
var instance = Instantiate(effect, collisionEvents[i].intersection + collisionEvents[i].normal * Offset, new Quaternion()) as GameObject;
|
||
|
if (!UseWorldSpacePosition) instance.transform.parent = transform;
|
||
|
if (UseFirePointRotation) { instance.transform.LookAt(transform.position); }
|
||
|
else if (rotationOffset != Vector3.zero && useOnlyRotationOffset) { instance.transform.rotation = Quaternion.Euler(rotationOffset); }
|
||
|
else
|
||
|
{
|
||
|
instance.transform.LookAt(collisionEvents[i].intersection + collisionEvents[i].normal);
|
||
|
instance.transform.rotation *= Quaternion.Euler(rotationOffset);
|
||
|
}
|
||
|
Destroy(instance, DestroyTimeDelay);
|
||
|
}
|
||
|
}
|
||
|
if (DestoyMainEffect == true)
|
||
|
{
|
||
|
Destroy(gameObject, DestroyTimeDelay + 0.5f);
|
||
|
}
|
||
|
}
|
||
|
}
|