PlayerController

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
aidlin
Messages : 18
Inscription : 31 Mars 2016 08:27

PlayerController

Message par aidlin » 08 Juil 2018 13:08

Bonjour à vous tous

(j'avais expliqué mon projet dans un autre dossier mais je réexplique:
Je travaille sur un projet BCI, neuroscience, cad qu'avec un casque permettant de capturer les "streams" musculaires des yeux je voudrais pouvoir bouger un game.object dans une scène.

1- voici mon script: effectivement j'ai rajouté une ligne de codes permettant en fonction du stream reçue de bouger soit en horizontal, ou vertical. Je lui ai rajouté un AddForce. Actuellement mon game.object ne bouge qu'avec ce dernier.

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Assets.LSL4Unity.Scripts;
using System.Linq;
using Assets.LSL4Unity.Scripts.Examples;


public class BaliseController : MonoBehaviour { 
 public float speed =0.0f;

    private LSLMarkerStream marker;
	private Rigidbody rb;
	private ExampleFloatInlet inlet;


	void Start() 
	{
		inlet=FindObjectOfType<ExampleFloatInlet>();
		rb = GetComponent<Rigidbody>  ();
	 	marker=FindObjectOfType<LSLMarkerStream>();

    }
	

	void OnTriggerEnter (Collider other){
		if (other.CompareTag ("LIGHT")) {
			marker.Write ("Collision on" + this.name);
			other.gameObject.SetActive (false);
                
		}
	}

	void FixedUpdate(){
			float MoveHorizontal = 0;

		if(inlet.lastSample.Length > 0)
			MoveHorizontal=inlet.lastSample[0];

			float MoveVertical = Input.GetAxis ("Vertical");

			Vector3 movement=new Vector3 (MoveHorizontal, 0.0f, MoveVertical);
            GetComponent<Rigidbody>().AddForce(movement * speed * Time.deltaTime);
         
	}	}

2- Ce que je vois sur ma console ( en debug.Log). Entre temps j'ai rajouté un "ToString". http://fr.tinypic.com/r/noy9mx/9
3- Mes questions sont à votre avis, est ce que il faut que je regarde dans les paramètres des axis?, c'est cette formule qu'il faut que je change?

Code : Tout sélectionner

void FixedUpdate(){
float MoveHorizontal = 0;

if(inlet.lastSample.Length > 0)
MoveHorizontal=inlet.lastSample[0];
float MoveVertical = Input.GetAxis ("Vertical");
merci encore à vous!

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

Re: PlayerController

Message par boubouk50 » 09 Juil 2018 09:26

Salut,

Bon, j'ai pas tout pigé:
- Quel est le réel problème? Tu n'arrives pas à déplacer le player? Quel est son comportement?
- Qu'as-tu sorti en Debug.Log.?? A quoi correspondent ces 14 samples?
- Peux-tu expliquer inlet et inlet.lastSample, stp? D'après le code, inlet.lastSample serait un tableau de float. Pourquoi récupérer le premier élément seulement?

Sinon, le code semble bon. Tu peux, par souci de rapidité, sortir le GetComponent <rigidBody> () du FixedUpdate (), c'est un peu lent.
"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

aidlin
Messages : 18
Inscription : 31 Mars 2016 08:27

Re: PlayerController

Message par aidlin » 09 Juil 2018 12:00

Bonjour
super de me répondre!



- Quel est le réel problème? Tu n'arrives pas à déplacer le player? Quel est son comportement?


-> Eh bien c'est comme décrit dans mon premier message: j'utilise un logiciel qui me permet de lire les "ondes" cérébraux du cerveau et me permet de les faire comprendre et utiliser par Unity. En gros ces ondes, "flux électriques" sont mes panneaux de bord. C'est pour celà que j'ai mis ce code que si <0, mon game.object va dans une direction. si >0 dans l'autre direction.
Pour l'instant, il ne bouge pas. En mettant le Addforce, il n'y a que celà qu'il le fait avancer.
- Qu'as-tu sorti en Debug.Log.?? A quoi correspondent ces 14 samples?
Celà correspond aux "ondes" émises par mon casque "cérébral".
- Peux-tu expliquer inlet et inlet.lastSample, stp? D'après le code, inlet.lastSample serait un tableau de float. Pourquoi récupérer le premier élément seulement?
Je récupère ceci en faisant mention des samples. Il doit capturer une onde à la fois. Sinon ce serait le bazar!

Sinon, le code semble bon. Tu peux, par souci de rapidité, sortir le GetComponent <rigidBody> () du FixedUpdate (), c'est un peu lent.
Cool, bon à savoir donc tu penses qu'il faut que je regarde dans les paramètres de "get axis": "vertical", "horizontal"?

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

Re: PlayerController

Message par boubouk50 » 09 Juil 2018 12:40

Actuellement ton code est bon.
Juste une remarque, ta variable speed est à 0. J'espère que tu l'as édité. Mets-la de base à une valeur différente de 0 quand même pour pas te faire avoir bêtement.

Le déplacement horizontal est dépendant de l'amplitude de inlet.lastSample[0]. C'est surtout lui qu'il faut que tu affiches en console pour voir ses valeurs. Elles devraient être comprises entre -1 et 1, et pas trop proche de 0 quand même. Si elle est toujours faible, il faudrait penser à l'amplifier.
Concernant le déplacement vertical, c’est un Joystick? une touche? L'input Vertical doit être défini dans l'Input Manager.
"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

aidlin
Messages : 18
Inscription : 31 Mars 2016 08:27

Re: PlayerController

Message par aidlin » 09 Juil 2018 13:07

Ok merci tu confirmes mes doutes!

je vais régler çà!
merci

Répondre

Revenir vers « Scripting »