Comment empêcher les collisionneurs de passer l'un par l'autre?
Je vais avoir du mal à garder les objets de jeu à l'intérieur d'un espace clos. Quand ils atteignent le bord, il y a quelques poussoir momentané de retour, mais ensuite ils iront droit dans le mur.
Je suis l'aide d'une Boîte de Collider sur le joueur, et un Mesh Collider pour le niveau du mur. Je vais avoir des problèmes avec à la fois un Personnage Joueur (un vaisseau spatial) que le mouvement est contrôlé par le joueur. Et avec des projectiles, qui sont le feu et oublier déplace à une vitesse constante.
C'est mon mouvement de code pour mon lecteur. Il est en cours d'exécution dans le FixedUpdate()
fonction.
//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);
Avec les balles, ils sont de vitesse et le moteur calcule leur moviements. Ils sont à l'aide de la Boîte de Collider et il est défini comme un Déclencheur de sorte qu'ils n'ont pas de physique. Mais j'utilise OnTriggerEnter
pour les détruire.
//Projectiles without physics collisiions
function OnTriggerEnter (other : Collider) {
Destroy(gameObject);
}
Certains, mais pas tous, les balles seront détruits lors de la frappe de l'mesh collider mur. Le lecteur est parfois frappé et s'arrêter, mais peuvent généralement passer à travers. Comment puis-je faire les collisions avec le mesh collider de travail à chaque fois?
source d'informationauteur Chris
Vous devez vous connecter pour publier un commentaire.
Collision avec des objets en mouvement rapide est toujours un problème. Une bonne façon de vous assurer de détecter des collisions est d'utiliser Raycasting au lieu de compter sur la simulation physique. Cela fonctionne bien pour les puces ou les petits objets, mais ne produira pas de bons résultats pour les objets de grande taille.
http://unity3d.com/support/documentation/ScriptReference/Physics.Raycast.html
Pseudo-codeish (je n'ai pas l'achèvement de code ici et une mauvaise mémoire):
J'ai un flipper prototype qui m'a aussi donné beaucoup de peine dans les mêmes domaines. Ce sont toutes les étapes que j'ai prises à presque (mais pas encore tout à fait) à résoudre ces problèmes:
Pour les objets en mouvement rapide:
Définir la rigidbody de l'Interpolation de "Interpoler" (ce n'influencent pas le physique de simulation, mais les mises à jour du rendu de l'objet correctement - a utiliser uniquement sur les objets les plus importants d'un rendu point de vue, comme pour le joueur, ou un flipper, mais pas pour les projectiles)
Ensemble de Détection de Collision pour Dynamique Continu
Joindre le script DontGoThroughThings (https://www.auto.tuwien.ac.at/wordpress/?p=260) de votre objet. Ce script utilise habilement le Raycasting solution que j'ai posté dans mon autre réponse à reculer la délinquance des objets avant de les points de collision.
Dans Edit -> Paramètres du Projet -> Physique:
Set Min de Pénétration pour la Pénalité à une valeur très faible. J'ai mis le mien à 0,001
Ensemble Solveur nombre d'itérations à une valeur plus élevée. J'ai mis le mien à 50, mais vous pouvez probablement le faire ok avec beaucoup moins.
Tout ce qui va avoir une pénalité de performance, mais qui est inévitable. Les valeurs de paramètres par défaut sont doux sur le rendement, mais ne sont pas vraiment destiné pour une bonne simulation des petits et des objets en mouvement rapide.
Set, la Détection de Collision rigidbody à Continue ou Dynamique Continu?
http://unity3d.com/support/documentation/Components/class-Rigidbody.html
Donc je n'ai pas été en mesure d'obtenir le Maillage des Collisionneurs de travail. J'ai créé un composite collisionneur à l'aide de simple boîte collisionneurs et cela a fonctionné exactement comme prévu.
D'autres tests avec simple Mesh Collisionneurs sont sortis la même.
Il regarde comme la meilleure réponse est de construire un composite collisionneur de simple boîte/sphère collisionneurs.
Pour mon cas précis, j'ai écrit un Assistant qui crée un Tuyau en forme de composé collider.
Edit ---> Paramètres du Projet ---> Temps de ... diminuer "Fixed Timestep" valeur .. Cela va résoudre le problème, mais il peut affecter négativement les performances.
Une autre solution pourrait être de calculer les coordonnées (par exemple, vous avez un ballon et le mur. La balle va frapper au mur. Afin de calculer les coordonnées de mur et de définir frapper procédé selon ces cordinates )
1.) N'utilisez jamais de MESH COLLIDER. Utiliser la combinaison de la zone et de la capsule collider.
2.) La vérification des contraintes dans RigidBody. Si vous cochez la case Gel Position X qu'il va passer au travers de l'objet sur l'axe des abscisses. (De même pour l'axe y).
Une vieille Question, mais peut-être que ça aide quelqu'un.
Allez à paramètres de Projet > Temps et Essayez de diviser le fixed timestep et maximum permis timestep par deux ou par quatre.
J'ai eu le problème est que mon lecteur était capable de se faufiler à travers des ouvertures plus petites que les joueurs collider et que résolu. Il permet également d'arrêter les objets en mouvement rapide.