49 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			49 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C#
		
	
	
	
| 
								 | 
							
								/*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);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |