В настоящее время я копирую систему частиц в 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;
}
}
}
Любая помощь приветствуется.
|speed|<some_minimal_speed
, то установите его на ноль, чтобы остановить подпрыгивание (лучше было бы оставить только часть касательной скорости поверхности вместо нуля, посмотрите здесь: stackoverflow. com/a/26223410/2521214) - person Spektre   schedule 07.10.2014