Comment entrer en collision des objets à haute vitesse dans l'Unité
J'essaie de créer le jeu pour Android et j'ai un problème avec la vitesse des objets, ils ne veulent pas entrer en collision.
J'ai Sphère Sphère Collisionneur plein d'entrain et de matériel, et RigidBody avec ce param (Gravité=false, Interpoler=Interpoler, la Détection de Collision = Dynamique Continu)
Aussi j'ai 3 murs avec Box Collider plein d'entrain et de matériel.
C'est mon code pour la Sphère
function IncreaseBallVelocity() {
rigidbody.velocity *= 1.05;
}
function Awake () {
rigidbody.AddForce(4, 4, 0, ForceMode.Impulse);
InvokeRepeating("IncreaseBallVelocity", 2, 2);
}
Dans les Paramètres de projet j'ai mis: "Min de Pénétration Pour la Pénalité de la Force"=0.001, "Solveur Interaction Comte"=50
Quand je joue sur le début, il fonctionne bien (il rebondit), mais quand la vitesse aller à la haute Sphère de passe uniquement le mur.
Quelqu'un peut m'aider?
Grâce.
Édité
var hit : RaycastHit;
var mainGameScript : MainGame;
var particles_splash : GameObject;
function Awake () {
rigidbody.AddForce(4, 4, 0, ForceMode.Impulse);
InvokeRepeating("IncreaseBallVelocity", 2, 2);
}
function Update() {
if (rigidbody.SweepTest(transform.forward, hit, 0.5))
Debug.Log(hit.distance + "mts distance to obstacle");
if(transform.position.y < -3) {
mainGameScript.GameOver();
//Application.LoadLevel("Menu");
}
}
function IncreaseBallVelocity() {
rigidbody.velocity *= 1.05;
}
function OnCollisionEnter(collision : Collision) {
Instantiate(particles_splash, transform.position, transform.rotation);
}
ÉDITÉ ajouté plus d'infos
- Fixed Timestep = 0.02 Maximum Autorisé De Tir = 0.333
- Il n'y a pas de différence entre l'exécution du jeu dans l'éditeur de joueur et sur Android
- Pas. Ça à l'air bon quand je 0.01
- Ma Pagaie est Box Collider sans Rigidbody, les murs sont de la même
- Il y a dans la même couche (quand la vitesse est normale que tout fonctionne) valeur en PhysicsManager sont la valeur par défaut (même comme dans l'image) sauf "Solveur Interaction de Co..." = 50
- Pas. Quand je change de vitesse, il se passe autre mur
- Je suis en utilisant la norme cube mais je agrandir/réduire pour s'adapter à mon écran et d'autres objets, quand je développez mur plus alors c'est OK il rebondit
- Pas. C'est un projet simple exemple simple de la Vidéo http://www.youtube.com/watch?v=edfd1HJmKPY
- Je n'utilise pas la gravité
OriginalL'auteur Kec | 2013-01-14
Vous devez vous connecter pour publier un commentaire.
Voir:
Vous pouvez également essayer de changer le fixe pas de temps pour la physique. Le plus petit de cette valeur, le plus de fois l'Unité calcule le physique d'une scène. Mais attention, en faisant cette valeur est trop petite, dire <= 0.005, sera probablement entraîner une instabilité de jeu, surtout sur un appareil portable.
Le script ci-dessus est le mieux pour des puces ou des petits objets. Vous pouvez forcer manuellement de corps rigides, les tests de collisions:
Non, tant que votre sphère a un rigidbody composant. Le script est utile uniquement pour de très rudes épreuves et il utilise ce qui est probablement le centre de votre objet pour les tests. Mais puisque vous avez une sphère, vous pouvez facilement ray chassé, le plus proche de frapper, et si qui a frappé l'est < le rayon de la sphère, arrêt de la sphère.
J'ai essayer différentes choses, mais ça ne fonctionne pas. Maintenant, j'ai ce code alors pouvez-vous me dire ce qu'il faut changer. J'ai ajouter du code à la question. Merci pour l'aide.
OriginalL'auteur Jerdak
Je pense que le principal problème est la manipulation de
Rigidbody
'svelocity
. Je voudrais essayer les opérations suivantes pour résoudre le problème.IncreaseBallVelocity
et tous les autres de la manipulation deRigidbody
est appelée dansFixedUpdate
. Vérifier qu'il n'y a pas d'autres manipulations àTransform.position
.AddForce
ou des méthodes similaires de sorte que le moteur physique a une plus grande chance de calculer toutes les dépendances.Un autre point que je suis tombé sur ont des mailles qui sont mis à l'échelle beaucoup. Avoir un
GameObject
avec l'échelle <= 0,01 ou >= 100 a certainement un impact négatif sur la physique de calcul. Selon le docs et ce forum de l'Unité d'entrée de l'un des gourous vous devriez éviter de Transformer.l'échelle des valeurs != 1Toujours pas heureux? OK, alors le prochain test est de commencer avec des vitesses élevées, mais pas de l'accélération. Lors de cette phase, nous voulons savoir, si la vitesse élevée elle-même ou l'accélération est à blâmer pour ce problème. Il serait intéressant de connaître les vitesses de valeurs à laquelle le moteur physique commence à échouer - veuillez les poster afin que nous puissions les comparer.
EDIT: encore plus de choses à étudier
6.7 m/sec ne semble pas que beaucoup de sorte que je pense qu'il y a une raison particulière ou une combinaison de raisons pourquoi les choses vont mal.
Fixed Timestep
. Notez que cela peut tuer le taux de trame, mais qui peut être dfixed plus tard.0.01
FixedTimestep
? Cela semble indiquer que le moteur physique pourrait être en difficulté.Rigidbody
) qui sont déplacés ou manipuler autrement? Ce serait provoquer de lourdes recalculs au sein de PhysX.transform.scale
n'est pas à blâmer pour cela (j'ai fait très mauvaise expérience avec cette).TimeManager.timeScale
à partir d'un script?J'ai réglé les paramètres échelle de la balle au début, quand je créer ballon et c'est tout. Mais je suis plus intéressé dans ce qu'il appelle OnCollisionEnter mais il n'y a pas de rebondir, comme quelque chose ne va pas avec "plein d'entrain".
Bien
Bounciness = 1
etBounce Combine = Max
devrait le faire. À propos de la mise à l'échelle: Selon le docs et la forum de l'entrée de l'un des gourous vous devriez éviter de Transformer.l'échelle des valeurs != 1.Les paramètres de l'Élasticité = 1 et Rebondir Combiner = Max sont déjà établies. Et sur l'extension de je jeu de ballon 1, 1, 1, mais les autres objets que j'ai eu à l'échelle en raison de la symétrie, dans ce cas, j'ai dû augmenter la vitesse de la balle, puis il passe à nouveau (boule de passer le mur)? Une autre idée? Merci pour l'aide.
Problème difficile, mais intéressant. J'ai mis à jour ma réponse avec un peu plus de suggestions et tweeté il - nous allons voir.
OriginalL'auteur Kay