public GameObject Spawn(GameObject obj, Vector3 pos, Quaternion q, Vector3 add_vel, Transform parent = null, float attach_duration = -1f, bool keep_y = false)
 {
     obj.transform.SetParent(parent, false);
     obj.transform.position = pos;
     obj.transform.rotation = q;
     ParticleSystem[] componentsInChildren = obj.GetComponentsInChildren <ParticleSystem>();
     if (add_vel.magnitude > 0f)
     {
         for (int i = 0; i < componentsInChildren.Length; i++)
         {
             int particleCount = componentsInChildren[i].particleCount;
             ParticleSystem.Particle[] array = new ParticleSystem.Particle[particleCount];
             componentsInChildren[i].GetParticles(array);
             for (int j = 0; j < particleCount; j++)
             {
                 ParticleSystem.Particle[] array2 = array;
                 int num = j;
                 array2[num].velocity = array2[num].velocity + add_vel;
             }
             componentsInChildren[i].SetParticles(array, particleCount);
         }
     }
     ParticlesManager.ParticlesData particlesData = new ParticlesManager.ParticlesData();
     particlesData.m_ParticleSystem = componentsInChildren;
     particlesData.m_AttachDuration = attach_duration;
     particlesData.m_AttachTime     = Time.time;
     particlesData.m_KeepY          = keep_y;
     particlesData.m_Y        = pos.y;
     particlesData.m_LocalPos = obj.transform.localPosition;
     particlesData.m_LocalRot = obj.transform.localRotation;
     this.m_PartcleSystems.Add(obj, particlesData);
     return(obj);
 }
    public GameObject Spawn(string name, Vector3 pos, Quaternion q, Vector3 add_vel, Transform parent = null, float attach_duration = -1f, bool keep_y = false)
    {
        GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(GreenHellGame.Instance.GetPrefab(name), Vector3.zero, Quaternion.identity);

        gameObject.transform.SetParent(parent, false);
        gameObject.transform.position = pos;
        gameObject.transform.rotation = q;
        ParticleSystem[] componentsInChildren = gameObject.GetComponentsInChildren <ParticleSystem>();
        if (add_vel.magnitude > 0f)
        {
            for (int i = 0; i < componentsInChildren.Length; i++)
            {
                int particleCount = componentsInChildren[i].particleCount;
                ParticleSystem.Particle[] array = new ParticleSystem.Particle[particleCount];
                componentsInChildren[i].GetParticles(array);
                for (int j = 0; j < particleCount; j++)
                {
                    ParticleSystem.Particle[] array2 = array;
                    int num = j;
                    array2[num].velocity = array2[num].velocity + add_vel;
                }
                componentsInChildren[i].SetParticles(array, particleCount);
            }
        }
        ParticlesManager.ParticlesData particlesData = new ParticlesManager.ParticlesData();
        particlesData.m_ParticleSystem = componentsInChildren;
        particlesData.m_AttachDuration = attach_duration;
        particlesData.m_AttachTime     = Time.time;
        particlesData.m_KeepY          = keep_y;
        particlesData.m_Y        = pos.y;
        particlesData.m_LocalPos = gameObject.transform.localPosition;
        particlesData.m_LocalRot = gameObject.transform.localRotation;
        this.m_PartcleSystems.Add(gameObject, particlesData);
        return(gameObject);
    }