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); }
public static void SetPosition(this ClothParticleSystem physicSystem, int index, Vector3 position) { physicSystem.SetPosition(index, position.x, position.y, position.z, true); }