Я в настоящее время реплицирую систему частиц в Unity (C#). Я добавляю физику к каждой частице (представленной сферой), чтобы она могла отскакивать от плоскости, расположенной в начале координат. Частица отскакивает несколько раз, будучи затронутой гравитацией. По мере того, как отскоки становятся меньше, сфера начинает проходить через плоскость, пока, наконец, не провалится. Сила тяжести будет непрерывно воздействовать на частицу. Каков правильный способ остановить сферу на вершине самолета?Почему реакция столкновения, позволяющая прыгающей сфере в конечном счете проходить через плоскость?
Я включил в себя мою реализацию до сих пор, но код всегда в конечном итоге позволяет сфере падать через плоскость.
ОБНАРУЖЕНИЕ:
public bool SpherePlaneCollisionDetection(Particle part)
{
Vector3 sphereCenter = part.position;
Vector3 planeCenter = Vector3.zero;
Vector3 normal = Vector3.up;
double radius = 0.5;
Vector3 dist1 = (sphereCenter - planeCenter);
float finalDist = Vector3.Dot (dist1, normal);
if (finalDist > radius) {
return false;
} else {
//Debug.Log ("COLLISION HAS OCCURED");
//Debug.Log ("POSITION: " + part.position);
//Debug.Log ("FINAL DIST: " + finalDist);
return true;
}
}
ОТВЕТ:
public void HandlePlaneCollision()
{
for (int i=0; i<Particles.Count; i++) {
//Particle p1temp = Particle[i];
Particle tempParticle = (Particle)Particles[i];
//Particle part = tempParticle.GetComponent<Particle>();
float dampning = 0.8f;
float bounce = -1f;
if(SpherePlaneCollisionDetection(tempParticle))
{
tempParticle.velocity.y *= (bounce*dampning);
tempParticle.velocity.x *= friction;
tempParticle.velocity.z *= friction;
Debug.Log(tempParticle.velocity.y);
Particles[i] = tempParticle;
}
}
}
Любая помощь очень ценится.
Когда столкновение происходит, попробуйте установить положение y на y pos плоскости. – Imapler
, а также если '| speed |
Spektre
Вы не используете встроенные коллайдеры Unity? – anothershrubery