[DB-AL] Réinitialiser position objet

Pour les scripts écrits en Javascript (UnityScript). :!: Obsolète :!:
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Shootex76
Messages : 1
Inscription : 02 Août 2016 17:22

[DB-AL] Réinitialiser position objet

Message par Shootex76 » 02 Août 2016 17:38

Bonjour à tous,

Je me tourne vers vous car j'ai un petit soucis.
Je m'explique : je fais tourner un objet sur l'axe X avec un hinge joint. J'aimerais faire en sorte que mon objet revienne à sa position d'origine lorsque j'appuie sur Z tout en restant en mouvement sur le même axe et une fois arrivé à sa position d'origine, qu'il s'arrête.
J'ai essayé de résoudre mon problème par le biais d'une boucle (while) dans la fonction update sauf que celle-ci freeze Unity comme j'ai pu le constater sur certains forums.
Dans l'attente de vos réponses. :-D

Code : Tout sélectionner

 var myval = 0.2;
var Vmax = 70.0;
var spawnRot : Quaternion;
var spawnPos : Vector3;

function Start() {
    spawnPos = transform.position;
    spawnRot = transform.rotation;
}
function Update(){
gameObject.hingeJoint.motor.force = 0.2; 

if(Input.GetKey("q")){
gameObject.hingeJoint.motor.targetVelocity += myval;
}
if(Input.GetKey("d")){
gameObject.hingeJoint.motor.targetVelocity -= myval;
}
if(Input.GetKey("z")){
transform.position = spawnPos;
    transform.rotation = spawnRot;
    gameObject.hingeJoint.motor.targetVelocity = 0;
}
if(gameObject.hingeJoint.motor.targetVelocity > Vmax){
gameObject.hingeJoint.motor.targetVelocity = Vmax;
}
if(gameObject.hingeJoint.motor.targetVelocity < -Vmax){
gameObject.hingeJoint.motor.targetVelocity = -Vmax;
}
}

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: [DB-AL] Réinitialiser position objet

Message par Moi 1971 » 03 Août 2016 10:05

Bonjour,
sauf que celle-ci freeze Unity comme j'ai pu le constater sur certains forums.
Que veut dire cette phrase?
Sinon, le principe d'Unity, c'est d'appeler la fonction Update() une fois par Frame. Ce qui veut dire que si le jeu tourne à 25 FPS, la fonction Update() sera appelée 25 fois pas seconde. Donc, le code à l'intérieur de la fonction Update() sera exécuté 25 fois pas seconde. Ce qui implique que le temps alloué à la fonction Update() pour se terminer correctement est de 1 seconde divisée par 25 = 0.04 seconde. (ça c'est le principe, je crois qu'Unity donne une valeur de 0.02 en temps normal et 0.33 en max).
Donc si ton jeu à besoin de réaliser quelque chose qui sera plus long que ce 0.02 seconde, il va valoir le réaliser sur plusieurs Frames.
(la rotation à la position initiale rentre dans ce cas de figure) Pour faire cela, deux solutions :
1 / Utiliser un Lerp pour le rotation. Doc ici : https://docs.unity3d.com/ScriptReferenc ... .Lerp.html
2 / Utiliser un coroutine (pour "externaliser" le code de la fonction Update)

Verrouillé

Revenir vers « (Js) Javascript »