Esempio n. 1
0
        public static Vector3 GetPosition(this ClothParticleSystem physicSystem, int index)
        {
            float x, y, z;

            physicSystem.GetPosition(index, out x, out y, out z);

            return(new Vector3(x, y, z));
        }
        private void Start()
        {
            m_clothParticleObjects = GetComponentsInChildren <ClothParticleObject>();

            ClothParticleConstraints[] clothParticleConstraints = GetComponentsInChildren <ClothParticleConstraints>();
            ParticleClothSettings      particleSettings         = new ParticleClothSettings();

            ParticleData[]         particleDatas   = new ParticleData[m_clothParticleObjects.Length];
            Stack <ConstraintData> constraintDatas = new Stack <ConstraintData>();

            for (int i = 0; i < m_clothParticleObjects.Length; i++)
            {
                ClothParticleObject obj = m_clothParticleObjects[i];
                obj.Index        = i;
                particleDatas[i] = obj.ToParticleData();
            }

            for (int i = 0; i < clothParticleConstraints.Length; i++)
            {
                ClothParticleConstraints obj = clothParticleConstraints[i];

                int indexA = obj.GetComponent <ClothParticleObject>().Index;
                for (int j = 0; j < obj.OtherClothParticles.Length; j++)
                {
                    if (obj.ValidConnection(j))
                    {
                        ClothParticleObject other          = obj.OtherClothParticles[j];
                        ConstraintData      constraintData = new ConstraintData();
                        constraintData.ParticleAIndex = indexA;
                        constraintData.ParticleBIndex = other.Index;
                        constraintData.Length         = Vector3.Distance(obj.transform.position, other.transform.position);
                        constraintDatas.Push(constraintData);
                    }
                }
            }
            particleSettings.SetGravity(m_gravity.x, m_gravity.y, m_gravity.z);
            particleSettings.SetParticles(particleDatas, constraintDatas.ToArray());

            //gather collision Objects
            ICollisionIntegrator[] collisions       = GetComponentsInChildren <ICollisionIntegrator>();
            ICollisionObject[]     collisionObjects = new ICollisionObject[collisions.Length];
            for (int i = 0; i < collisions.Length; i++)
            {
                collisionObjects[i] = collisions[i].CollisionObject();
            }
            particleSettings.SetCollisions(collisionObjects);

            m_clothParticleSystem = new ClothParticleSystem(particleSettings);
        }
Esempio n. 3
0
 public static void SetPosition(this ClothParticleSystem physicSystem, int index, Vector3 position)
 {
     physicSystem.SetPosition(index, position.x, position.y, position.z, true);
 }