MediateurOfGame Non apparemment tu n'as pas compris
"rigidbody.Sleep() désactive juste le traitement du moteur physique pour une trame d'image"
Non , pour un MINIMUM d'une frame
"Il sert essentiellement à éviter un mauvais comportement du moteur physique quand on modifie les paramètres physiques d'un objet dans le cadre d'un Update(). "
Non plus , il s'agit là d'une question de gestion d'objets et surtout de performances . Un objet qui n'as pas besoin de subir de physique ne doit pas être en rigidbody "activé" . A titre d'exemple , je veux faire du fracturing sur une vitre, pour ça j'importe une vitre fracturée et modéliser sur n'importe quel tools de modélisation 3D , je mets un rigidbody sur chaque fracture puis je leur ajouter le rigidbody.sleep()dans Awake() , quand une imaginons une balle traverse la vitre je le mets en WakeUp et voilà simulation de vitre brisée , l'erreur ici serait de ne pas endormir les rigidbody , car chute de performance .
"Pour modifier la gravité en cours de route ou la désactiver (bien que je ne comprenne toujours pas le but). rigidbody.useGravity = false;"
Non plus, car là tu ne fais que désactiver la gravité : au moindre coup de vent , contacte ou autre ton objet va s'envoler .
contact * pardon
Ah et un autre exemple pour être plus clair :
Ta voiture quand tu rentres chez toi tu mets ton embrayage au point mort , et ton frein à main et pourtant tu éteins ton moteur alors que cela suffit à empêcher qu'elle bouge parce que c'est inutile de consommer alors que tu ne l'utilises pas , tu la démarreras quand t'aura besoin de rouler , ici c'est là même chose .
Pour le Sleerp, effectivement je m'étais mal exprimé. Mais très utile quand même pour manipuler un rigidbody à l’intérieur d'un update.
Maintenant à la réponse de SergeantCastlez, à la vue de son affaire.
Puisqu'il souhaite utiliser la physique à sa sauce. Objet de masse X qui est dans un monde de gravité X avec un objet de masse X et que cet objet doit avoir un état statique puis dynamique à une des action de key.
Le useGravity réponds a sa demande.
private bool _start = false;
void Start ()
{
rigidbody.useGravity = false;
}
void Update () {
if (Input.GetKeyDown(KeyCode.Space))
{
if (!_start)
_start = true;
}
}
void FixedUpdate()
{
if (_start)
{
gameObject.rigidbody.useGravity = true;
}
}
Le vrai dommage c'est que le rigidbody.isKinematic ne semble pas bien fonctionner, cela aurai clos une partie le débat.
Je me relis et finalement entre ma façon d'aborder le problème de SergeantCastlez, même si le useGravity fonctionne. Cela ne traite pas toutes les solutions possibles.
Oki unity_user un point pour toi pour le Sleerp .
C'est la bonne soluce.
Ahah !
Et sinon, pour propulser un objet d'un coup comme ça ( imaginons un ballon, le joueur clique et le ballon se lance contre le mur pour revenir ) j'ai pensé utilisé le this.transform.Translate(Vector3(...)) afin de faire bouger l'objet, mais non seulement il se téléporte un tout petit plus loin quand je clique et moi je veux qu'il continue de s'élancer mais en plus il traverse le mur.
Alors j'ai pensé a faire un truc qui ferait en sorte que "Quand la balle rentre en collision avec le mur elle arrête de bouger"
Mais je ne sais pas si c'est la bonne méthode, savez vous m'éclairez ?
Merci bien
SergeantCastlez
http://docs.unity3d.com/Documentation/ScriptReference/Rigidbody.AddForce.html
http://unity3d.com/learn/tutorials/modules/beginner/physics/addforce
Voilà !
Parfait ! Je te remercie beaucoup !
Et pour mon soucis de collision ? Parce que là contre le mur il se bloque, et j'arrive pas a faire en sorte qu'il se cogne contre le mur et avec la force bah il rebondit dans la pièce quoi, vous savez ?
T'as sûrement un paramètre de damping quelque part, augmente-le.
Sinon tu fait que quant il rentre en collision avec le cube, un rigidbody.addforce l'envoie dans le sens inverse avec une force faible pour donner un effet de rebond.
Et si tu veut, tu peut m'ajouter sur Skype : adridu84120 pour que je te réponde plus instantanément.
Tu m'as fait réfléchir avec ton histoire de rebond, et j'ai pas pu m'empêcher de faire un petit script :
http://pastebin.com/Xi1uY2Vn
En gros, j'ai fait une salle (quatre murs, un sol et un plafond) et quand je lance la scene, le cube se met à rebondir partout dans la salle presque à l'infini.
Je l'ai export en asset pour ce qui veulent voir le résultat :
https://mega.co.nz/#!RkQ0zCpZ!iT2IOSbaiib9IJrvekEbGUZ4cWbRnnxn5ZD_OHGoWC0
Il faut créer un materiel physique , l'affecter à ton rigidbody;
De mémoire c'est la prop Bounciness qui te permet d'obtenir le rebond.
https://docs.unity3d.com/Documentation/Components/class-PhysicMaterial.html
@-Adridu84-:
Tu met encore du code modifiant la physique du rigidbody sur un Update() ???
Pdon tu m'as compris, autre que dans FixedUpdate() ??
Lapintade tu pourrais m'aider s'il te plait
Voila mon soucis je suis en train de faire un travail sur les textures pour mon jeux et j'ai envie de mettre des la tesselation pour certain objets mais quand j'essaye d'augmenter le nombres de triangles avec l'option edge length, il y a rien qui change et du coup le résultat est assez horrible tu aurais pas une solution?
Hello
C'est sympa de me solliciter pour cela, mais je n'utilise pas Unity (enfin si je l'ai installé pour faire quelques tests, mais je ne l'utilise pas serieusement).
La tesselation, je ne sais pas trop ce que cela va t'apporter. Si tes modèles ne sont pas assez detaillés, vaut mieux revoir leur modelisation non ?
c'est surtout pour les sol en pavé, les mur en brique et les tuiles et des objets comme certains vetements (bonnets, pantalon, sac a dos...)
Qu'est-ce que cela a à voir avec unity, tu le fais dans un éditeur 3D externe, non?