У меня есть 2D-сцена, которая состоит из 4 спрайтов, у каждого из которых есть боксер-коллайдер.
У меня есть префаб, который простоспрайт круга с двумерным коллайдером.
Наконец, к моей основной камере прикреплен скрипт под названием «Атмосфера», который заполнит поле множеством экземпляров префаба и даст им скорость в произвольном направлении.
using UnityEngine;
public class Atmosphere : MonoBehaviour
{
public GameObject Molecule;
void Start()
{
float x = -4.5f;
while (x < 4.5f)
{
float y = -4.5f;
while (y < 4.5f)
{
var inst = GameObject.Instantiate(Molecule);
inst.transform.position = new Vector3(x, y, 0);
var rb = inst.GetComponent<Rigidbody2D>();
float xForce = Random.value * 2f - 1f;
float yForce = Random.value * 2f - 1f;
rb.AddForce(new Vector2(xForce, yForce) * 100f);
y += 0.5f;
}
x += 0.5f;
}
}
}
В течение некоторого времени точки отскакивают друг от друга и от краев коробки.
Но через некоторое время они в итоге застряли по краям коробки.
И коробка, и шары, и стенки коробки имеют один и тот же физический материал
, который имеет нулевое трение и изгиб1.
Почему они прилипают к стенам и как я могу предотвратить это?
ЗагрузитьДемонстрация Unity 3D
ОБНОВЛЕНИЕ Если я уроню одну молекулу в коробку с прикрепленным ниже сценарием, она немедленно застрянет на стене.
[RequireComponent(typeof(Rigidbody2D))]
public class Molecule : MonoBehaviour
{
Rigidbody2D RigidBody2D;
void Start()
{
transform.position = new Vector3(0, 1, 0);
RigidBody2D = GetComponent<Rigidbody2D>();
float xForce = Random.value * 2f - 1f;
float yForce = Random.value * 2f - 1f;
RigidBody2D.AddForce(new Vector2(-.25f, -0.25f) * 100f);
}
}