[RESOLU] Mouvement d'une flashlight dans la main (smooth flashlight)

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
axelpawel
Messages : 9
Inscription : 26 Avr 2016 23:50

[RESOLU] Mouvement d'une flashlight dans la main (smooth flashlight)

Message par axelpawel » 03 Mai 2016 21:25

Re-Bonjour tout le monde, je vais peut être, etre long mais je préfère bien détailler mon souci, comme c'est écris dans le titre, je cherche à reproduire le geste de déplacement d'une lampe tenu dans la main en "first person controller", c'est à dire avoir un retard de la flashlight (j'entend par flashlight---> la lampe tenu dans la main) par rapport à la caméra qui bouge en un point donné, le but étant de faire un jeux d'horreur et d'augmenter sa réalité.
J'ai réussi avec les" standart assets" de unity5 à avoir mon personnage en "fps"qui peux se déplacer et regarder dans toutes les directions à l'aide de la souris, mais malgré tout les forums épluché/vidéo en anglais je n'ai pas réussi à comprendre comment produire un effet de "smooth objetc", c'est à dire dans le jeu, je tourne ma vision sur ma gauche et la lampe suis avec un léger retard.
Actuellement ma lampe flashlight et dans mon "firstPersonCharacter" et je ne sais pas quoi ajouter comme script ni ou par rapport au main caméra etc.. ce sujet étant très difficilement recherchable en francais je me confie à vous :3
Un exemple du rendu que sa donnerais : https://www.youtube.com/watch?v=kF_tZhT ... A&index=14




j'ai trouvé ce script

Code : Tout sélectionner

#pragma strict
 
 //Transform vars.
 private var tMy_Transform : Transform;
 private var tMain_Camera_Transform : Transform;
 public var smooth;
 //Rotate speed var.
 private var fMy_Rotate_Speed : float;
 
 function Awake () {
 
     //Connect to Objects and Scripts.
     tMain_Camera_Transform = GameObject.Find("Main Camera").transform;
 }
 
 function Start() {
 
     //Get Transforms.
     tMy_Transform = transform;
     //Set Rotation Speed.
     fMy_Rotate_Speed = 8f;
 }
 
 function Update() {

  if(smooth)
            {
                character.localRotation = Quaternion.Slerp (character.localRotation, m_CharacterTargetRot,
                    smoothTime * Time.deltaTime);
                GetComponent.<Camera>().localRotation = Quaternion.Slerp (GetComponent.<Camera>().localRotation, m_CameraTargetRot,
                    smoothTime * Time.deltaTime);
            }
     if (tMain_Camera_Transform != null) {
         //Rotate. 
         tMy_Transform.rotation = Quaternion.Slerp(tMy_Transform.rotation, tMain_Camera_Transform.rotation, Time.deltaTime * fMy_Rotate_Speed);
     } else {
         //Try and find Main Camera again.
         tMain_Camera_Transform = GameObject.Find("Main Camera").transform;
     }
 }
 
mais après avoir essayer de l’intégré à ma flashlight qui elle est integré à un "game object" qui est le person controller avec main caméra, ça n'a rien donné..
Dernière édition par axelpawel le 05 Mai 2016 21:42, édité 3 fois.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6214
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Mouvement d'une flashlight dans la main (smooth flashlight)

Message par boubouk50 » 04 Mai 2016 09:29

Ce script doit générer des erreurs, des variables ne sont pas définies. (character, m_CharacterTargetRot).
Ensuite pour ton pb, je te dirai de mettre ta flashlight en 'sœur' de la caméra, et par script de recopier les rotations de celle-ci avec un décalage, ou comme le fait ton script, avec un smooth Lerp (SLerp) pour la fluidité.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

axelpawel
Messages : 9
Inscription : 26 Avr 2016 23:50

Re: Mouvement d'une flashlight dans la main (smooth flashlight)

Message par axelpawel » 04 Mai 2016 23:31

En effet pour moi le script est du charabiat, ce n'est pas moi qui les écrit, je pioche un peu partout sur internet et essaie de suivre des tutos pour que cela fonctionne, après avoir passé la journée entière a chercher encore, j'ai finis par trouver un tuto qui donne ce code

Code : Tout sélectionner

#pragma strict

public var MovementSpeed: float= 1; //je met 5000 pour que ça commence à faire un début d'effet..mais trop d'accoups
public var MovementAmount: float =1; //je met 5000 pour que ça commence à faire un début d'effet.. mais trop d'accoups
public var flashlight: GameObject;
public var MovementX: float;
public var MovementY: float;
private var NewflashlightPosition: Vector3;
private var DefualtPosition : Vector3;
public var smoothTime : float= 5f;


function Start (){


DefualtPosition = transform.localPosition;

}

function Update () {

MovementX =Input.GetAxis("Mouse X")* Time.deltaTime * MovementAmount;
MovementY =Input.GetAxis("Mouse Y")* Time.deltaTime * MovementAmount;

NewflashlightPosition = new Vector3 (DefualtPosition.x - MovementX, DefualtPosition.y - MovementY, DefualtPosition.z);
flashlight.transform.localPosition = Vector3.Slerp (flashlight.transform.localPosition,NewflashlightPosition,MovementSpeed*smoothTime*Time.deltaTime);

}

}


J'ai ajouté un smoothTime, le problème c'est que j'ai quand même plein d'acoups lorsque je déplace ma light, et la vitesse de ma light est très peu réduite par rapport au déplacement de ma caméra, je voudrais que la vitesse de déplacement de ma light soit lentement remis au milieu de l'ecran, alors que là elle est remis constamment au milieu avec plein d'accoup tellement la vitesse est élévé, je sais pas si j'ai été clair :/

axelpawel
Messages : 9
Inscription : 26 Avr 2016 23:50

Re: Mouvement d'une flashlight dans la main (smooth flashlight)

Message par axelpawel » 05 Mai 2016 21:41

Résolu !! il suffit de baisser le smooth à 0.001 pour la light seulement, aucune explication mais ça marche donc x)

Verrouillé

Revenir vers « (Js) Javascript »