Modifier vitesse déplacement spamming touche

Pour les scripts écrits en C#
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
Melread
Messages : 14
Inscription : 22 Oct 2015 12:26

Modifier vitesse déplacement spamming touche

Message par Melread » 22 Nov 2015 14:03

Bonjour,

Je suis en train de créer un petit jeu de course multijoueur avec photon,
Mon objectif et de modifier la vitesse de déplacement de mon joueur en fonction de la vitesse a la quel il spam sa touche disons espace lorsqu'il est dans une certaine zone. Mon script C# de déplacement basique fonctionne mais je n'arrive pas a trouver une solution pour augmenter la vitesse de déplacement du joueur en fonction de son spamming de la touche espace, en gros ajouter genre 1 de moove speed a chaque fois que le joueur appuis sur la touche en définissant bien sur une limite.
J'ai donc if (Input.GetKey(KeyCode.Space)) mais je ne sais pas comment augmenter la vitesse de deplacement.

Ma question peut paraître bête mais je débute en programmation et je n'est pas trouver de solutions dans mes recherches,
Merci

Avatar de l’utilisateur
MasterNovice
Messages : 610
Inscription : 23 Juil 2011 16:03

Re: Modifier vitesse déplacement spamming touche

Message par MasterNovice » 22 Nov 2015 14:22

Salut,

En fait la réponse à ta question se trouve dans l'expression de ton besoin.

- Tu as une vitesse -> variable
- A chaque appuie de la barre d'espace -> Ta condition
- Tu veux augmenter sa vitesse de 1 -> variable = variable + 1

Voilà la base. Maintenant je suppose que tu voudras diminuer la vitesse si on ne fait rien donc :

- Si la vitesse est supérieur à la vitesse minimum autorisé -> condition
- On la diminue toute les X secondes -> Coroutine avec un bon waitforseconds et un vitesse = vitesse - 1 http://docs.unity3d.com/Manual/Coroutines.html
- On ne veut pas la diminuer quand on appuie sur la touche espace - > On stop la coroutine dans la condition de l'appuie de la touche espace

Voilà en gros la logique.

Avatar de l’utilisateur
ZJP
Messages : 5748
Inscription : 15 Déc 2009 06:00

Re: Modifier vitesse déplacement spamming touche

Message par ZJP » 22 Nov 2015 15:12

...ou, ajouter un "Addforce" à chaque appuis de la touche en question.

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class BougeToiEnAvant : MonoBehaviour {
	public float puissance;
	public Rigidbody rb;
	void Start() 
	{
		rb = GetComponent<Rigidbody>();
	}
	void FixedUpdate() 
	{
		if (Input.GetKeyDown("space"))
			rb.AddForce(transform.forward * puissance);
	}
}


Avatar de l’utilisateur
MasterNovice
Messages : 610
Inscription : 23 Juil 2011 16:03

Re: Modifier vitesse déplacement spamming touche

Message par MasterNovice » 22 Nov 2015 15:38

Bien plus simple, je n'y avais pas pensé, j'oublie souvent l'emploi de la physique pour ça. D'ailleurs je me demande c'est quoi le mieux, si tu peux m'éclairer. Pour du réseau il est préférable pour des questions de sécurité de gérer ça du côté serveur il me semble afin d'éviter tout hack, la physique n'est-elle pas plus coûteuse ?

Avatar de l’utilisateur
ZJP
Messages : 5748
Inscription : 15 Déc 2009 06:00

Re: Modifier vitesse déplacement spamming touche

Message par ZJP » 22 Nov 2015 16:54

MasterNovice a écrit :Bien plus simple, je n'y avais pas pensé, j'oublie souvent l'emploi de la physique pour ça.
D'autant que cette solution s'adapte au terrain : peu d'efforts (ou d'appuis) quand le véhicule est dans "une descente", à l'inverse...(tu te souviens des jeux "Decathlon" dans les années 80/90?. Les tueux de manettes SpeedKing... :mrgreen: )
Image
MasterNovice a écrit : D'ailleurs je me demande c'est quoi le mieux, si tu peux m'éclairer. Pour du réseau il est préférable pour des questions de sécurité de gérer ça du côté serveur il me semble afin d'éviter tout hack, la physique n'est-elle pas plus coûteuse ?
Pour éviter au maximum le "hack", oui, mieux vaut gérer cela du coté du serveur et c'est effectivement plus couteux. Une des raison pour laquelle j’essaie de me "passer" de la physique quand cela est possible : "Tweener" et "Bezier" sont alors mes amis. ;-) En même temps, pas trop le choix vu les contraires de la gravité autours d'une sphere/planète :mrgreen:

Avatar de l’utilisateur
MasterNovice
Messages : 610
Inscription : 23 Juil 2011 16:03

Re: Modifier vitesse déplacement spamming touche

Message par MasterNovice » 22 Nov 2015 18:12

ZJP a écrit :D'autant que cette solution s'adapte au terrain : peu d'efforts (ou d'appuis) quand le véhicule est dans "une descente", à l'inverse...(tu te souviens des jeux "Decathlon" dans les années 80/90?. Les tueux de manettes SpeedKing... :mrgreen: )
C'est bien l'avantage de la physique même si c'est un peu plus coûteux ça simplifie le code et rend les réactions plus réalistes. J'avais complètement zappé, trop pris l'habitude de m'en passer, il n'y a pas de petites économies dans le code avec moi :-D
Je me souviens de ces types de jeux, d'ailleurs quand ils en ont sorti sur la playstation1 je m'éclatais dessus (même si les manettes ne donnaient pas la même jouissance).
ZJP a écrit :Pour éviter au maximum le "hack", oui, mieux vaut gérer cela du coté du serveur et c'est effectivement plus couteux. Une des raison pour laquelle j’essaie de me "passer" de la physique quand cela est possible : "Tweener" et "Bezier" sont alors mes amis. ;-) En même temps, pas trop le choix vu les contraires de la gravité autours d'une sphere/planète :mrgreen:
Merci pour la réponse, c'est bien ce que je pensais. Les Tweener va falloir que je regarde lequel est le mieux aujourd'hui, je m'étais arrêté à Hotween à l'époque. Je vois que t'es toujours sur ton projet de Moon, c'est cool ça, tu m'étonne que tu n'as pas trop le choix pour la physique :-D

Bon au moins je pense que là Melread à toute les réponses pour faire son code et j'ai appris des choses.

Melread
Messages : 14
Inscription : 22 Oct 2015 12:26

Re: Modifier vitesse déplacement spamming touche

Message par Melread » 22 Nov 2015 20:23

Merci à vous pour vos réponses si rapide !
J'ai utiliser la méthode plus script de MasterNovice et le script fonctionne très bien, cependant, quand je met un

Code : Tout sélectionner

 if (view.isMine) { 
dans mon OnTriggerStay, j'ai une erreur, donc cela fonctionne quand je joue seul mais dès qu'un deuxième joueur arrive il ne fonctionne plus.
Je précise que j'utilise Photon pour la partie réseau, si quelqu'un saurait comment faire, ou mettre le if view is mine je lui en serais reconnaissant.
Voici mon code, merci d'avance :)

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class sprint : MonoBehaviour {

	private PhotonView view;
	public float translationCoeff = 1f;

	// Use this for initialization
	void Start () {
		view = GetComponent<PhotonView> ();
		 
	}

	void OnTriggerStay (){


		
			if (Input.GetKeyDown (KeyCode.Space)) {
			//On sprint
			translationCoeff += 1f;
			Debug.Log ("Tu cours a : " + translationCoeff);
			
			
			if (translationCoeff >= 150f) {
				translationCoeff = 149f;
				
			}
			
			if (translationCoeff <= 150f) {
				
				StartCoroutine ("corout1");
		}
			if (translationCoeff <= 0) {
				translationCoeff = 1f;

			}

			
	}

}

	IEnumerator corout1	(){
		
		yield return new WaitForSeconds (3);
		translationCoeff -= 1f;
		Debug.Log ("Tu cours a :" + translationCoeff);
		
		if (Input.GetKeyDown (KeyCode.Space)) {
			
			StopCoroutine("courout1");
		}
		
	}

	
	// Update is called once per frame
	void Update () {
	
	}
}


Avatar de l’utilisateur
MasterNovice
Messages : 610
Inscription : 23 Juil 2011 16:03

Re: Modifier vitesse déplacement spamming touche

Message par MasterNovice » 22 Nov 2015 23:18

De rien,

Je ne connais pas vraiment Photon mais je crois que tu devrais peut être essayer

Code : Tout sélectionner

public class sprint : Photon.MonoBehaviour 
......
......
if(photonView.isMine)
Si tu pouvais écrire l'erreur qu'il te met ça serait plus simple pour t'aider :D

En tout cas, ça fait plaisir de voir que sans te donner le code tu as su te débrouiller pour l'écrire à partir des infos données. Tu progresseras vite si tu continue comme ça et ça motive à te donner un coups de main.

Melread
Messages : 14
Inscription : 22 Oct 2015 12:26

Re: Modifier vitesse déplacement spamming touche

Message par Melread » 25 Nov 2015 13:41

Salut,

Merci pour ta réponse et les encouragements, ça fait toujours plaisir !
Le script ne fonctionne pas non plus avec ta technique, il n'affiche pas d'erreur au lancement du jeu mais dès que je rentre dans le trigger, la consol affiche l'erreur "NullReferenceExeption : Objet references not set to an instance of objet sprint.OnTriggerStay () (at Assets/Scripts/srpints.cs:17)
L'erreur doit venir du trigger et photon car le script tout seul marche sans aucun soucis, le voila au cas ou :

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class sprint : Photon.MonoBehaviour {

	private PhotonView view;
	public float translationCoeff = 1f;

	// Use this for initialization
	void Start () {
		view = GetComponent<PhotonView> ();
		 
	}

	void OnTriggerStay (){

			if(photonView.isMine) {

			if (Input.GetKeyDown (KeyCode.Space)) {
			//On sprint
			translationCoeff += 1f;
			Debug.Log ("Tu cours a : " + translationCoeff);
			}	
			
			if (translationCoeff >= 150f) {
				translationCoeff = 149f;
				
			}
			
			if (translationCoeff <= 150f) {
				
				StartCoroutine ("corout1");
		}
			if (translationCoeff <= 0) {
				translationCoeff = 1f;

			}

			
	}

}

	IEnumerator corout1	(){
		
		yield return new WaitForSeconds (3);
		translationCoeff -= 1f;
		Debug.Log ("Tu cours a :" + translationCoeff);
		
		if (Input.GetKeyDown (KeyCode.Space)) {
			
			StopCoroutine("courout1");
		}
		
	}

	
	// Update is called once per frame
	void Update () {
	
	}
}
 

Répondre

Revenir vers « (C#) CSharp »