Как предотвратить пересечение коллайдеров друг через друга?

У меня возникают проблемы с хранением игровых объектов внутри замкнутого пространства. Когда они достигают края, происходит некоторый мгновенный толчок назад, но затем они проходят прямо через стену.

Я использую Box Collider для игрока и Mesh Collider для стены уровня. У меня возникают проблемы с игровым персонажем (космическим кораблем), когда движение контролируется игроком. И со снарядами, которые стреляют и забывают, двигаясь с постоянной скоростью.

Это мой код движения для моего игрока. Он запускается в функции FixedUpdate().

//Movement
    haxis = Input.GetAxis("Horizontal") * speed;
    vaxis = Input.GetAxis("Vertical") * speed;

    moveVector.x = haxis;
    moveVector.z = vaxis;

    if(moveVector.magnitude > 1)
    {
        moveVector.Normalize();
    }

    rigidbody.MovePosition(transform.position + moveVector * speed);

Пулям придается скорость, и двигатель рассчитывает их движение. Они используют Box Collider, и он установлен как триггер, поэтому у них нет физики. Но я использую OnTriggerEnter, чтобы уничтожить их.

//Projectiles without physics collisiions
function OnTriggerEnter (other : Collider) {
    Destroy(gameObject);
}

Некоторые, но не все пули будут уничтожены при попадании в стену меш-коллайдера. Игрок иногда ударяет по нему и останавливается, но обычно может пробить его. Как сделать так, чтобы столкновения с коллайдером сетки работали каждый раз?

17
задан Chris 13 March 2012 в 16:39
поделиться