Boutons de direction pour smartphones tablettes

Toutes les questions sur le développement Mobile, y compris la partie script.
Avatar de l’utilisateur
kikicosmo
Messages : 112
Inscription : 01 Août 2014 10:03
Localisation : Carcassonne

Boutons de direction pour smartphones tablettes

Message par kikicosmo » 21 Avr 2015 15:09

Bonjour à tous,

j'espère avoir posté ceci dans la bonne section, sinon je m'en excuse platement ;)
Voilà mon petit souci du moment,
je suis en train de créer un mini jeu de plateforme sur android et iPhone, mais j'ai un petit souci avec les mouvements du perso

J'utilise le "Mobile Single Stick Control Rig" d'unity, jusque là cela fonctionne très bien
mais je ne veux pas que le joystick bouge dans tous les sens puisque mon perso ne peut aller que de droite à gauche (jeu 2d)
J'ai réussi à dupliquer le bouton de saut pour en faire un bouton de tir, mais je n'arrive pas a faire de meme pour "mouvement à droite" et "mouvement à gauche"
(un peu comme une manette gameboy lol, 2 boutons de direction et 1 bouton saut et 1 bouton tir)

J'espère que vous comprenez mon souci
ci-dessous le script de mon perso...

Code : Tout sélectionner

using UnityEngine;
using System.Collections;
public class PlayerControler : MonoBehaviour 
{
	public AudioClip jump; 

	public Animator anim;
	public float speed = 8f;
	int block = 1;   //Modif

	public Transform checkSol;
	bool toucheLeSol = false;
	float rayonSol = 0.3f;
	public LayerMask Sol;

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

	void FixedUpdate ()
	{
				toucheLeSol = Physics2D.OverlapCircle (checkSol.position, rayonSol, Sol);
		anim.SetBool ("sol", toucheLeSol);

		
	}

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

		float x = CrossPlatformInput.GetAxis ("Horizontal");
		anim.SetFloat ("speed", Mathf.Abs (x));

		if (toucheLeSol && CrossPlatformInput.GetButtonDown ("Jump")) {
			AudioSource.PlayClipAtPoint(jump, Camera.main.transform.position);
			rigidbody2D.AddForce (new Vector2 (0, 1800));

				}
		if (x > 0) {
		    transform.Translate (x * speed * Time.deltaTime * block, 0, 0);
			transform.eulerAngles = new Vector2 (0, 0);
			BackgroundScroller.current.Go ();
	}
		if (x < 0) {
			transform.Translate (-x * speed * Time.deltaTime * block, 0, 0);
			transform.eulerAngles = new Vector2 (0, 180);
			BackgroundScroller.current.NoGo ();
	}

	}

	void SetBlock(int bck)// Modif
	{
		block = bck;
	}

}
Merci d'avance ;)

Avatar de l’utilisateur
kikicosmo
Messages : 112
Inscription : 01 Août 2014 10:03
Localisation : Carcassonne

Re: Boutons de direction pour smartphones tablettes

Message par kikicosmo » 24 Avr 2015 11:29

UP! :D

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

Re: Boutons de direction pour smartphones tablettes

Message par boubouk50 » 24 Avr 2015 11:51

kikicosmo a écrit :un peu comme une manette gameboy lol, 2 boutons de direction et 1 bouton saut et 1 bouton tir
Argggh, mon enfance... rien que pour ça tu mériterais la chaise électrique!!

Le souci ne serait-il pas plutôt dans le script du Joystick? Si tu veux le borner sur l'axe horizontal, il faudrait plutôt voir du coté de sa marge de manœuvre (Je suppose sphérique 360°).
"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

Avatar de l’utilisateur
kikicosmo
Messages : 112
Inscription : 01 Août 2014 10:03
Localisation : Carcassonne

Re: Boutons de direction pour smartphones tablettes

Message par kikicosmo » 24 Avr 2015 15:13

NOONNNN!
pas la chiase élétrique steplé ;-)
ben je vais voir mais le code est super hard et suis pas trop au top niveau code
dans les option du bouton j'ai activé "horizontal uniquement" mais rien n'y vais, je ne veux pas que le bouton bouge dans tous les sens, juste cliquer dessus pour droite et pareil pour gauche lol

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

Re: Boutons de direction pour smartphones tablettes

Message par boubouk50 » 24 Avr 2015 15:53

1/ Une GameBoy (parce que j'ai toujours dit une, c'était ma copine, pas mon pote) n'a pas de manette
2/ Elle a une croix directionnelle et pas 2 boutons de direction
3/ Pas lol, on se moque pas de la GameBoy!!

Sinon, ce qui te gêne en fait c'est le curseur qui bouge à 360° et pas le contrôle? Si c'est le cas, c'est bien dans le script d'affichage GUI du Joystick qu'il faut chercher pour bloquer le translate en Y de ton Joystick.
"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

Avatar de l’utilisateur
kikicosmo
Messages : 112
Inscription : 01 Août 2014 10:03
Localisation : Carcassonne

Re: Boutons de direction pour smartphones tablettes

Message par kikicosmo » 24 Avr 2015 16:05

Oui mais j'y capte que dalle LOL

tiens, regarde, ca s'est le script du joystick

Code : Tout sélectionner

using UnityEngine;

public class Joystick : JoystickAbstract {

    protected override void TypeSpecificOnEnable()
    {
        // This is an offset for touch input to match with the top left
        // corner of the GUI
        guiTouchOffset.x = defaultRect.width * 0.5f;
        guiTouchOffset.y = defaultRect.height * 0.5f;

        // Cache the center of the GUI, since it doesn't change
        guiCenter.x = defaultRect.x + guiTouchOffset.x;
        guiCenter.y = defaultRect.y + guiTouchOffset.y;

        // Let's build the GUI boundary, so we can clamp joystick movement
        guiBoundary.xMin = defaultRect.x - guiTouchOffset.x;
        guiBoundary.xMax = defaultRect.x + guiTouchOffset.x;
        guiBoundary.yMin = defaultRect.y - guiTouchOffset.y;
        guiBoundary.yMax = defaultRect.y + guiTouchOffset.y;

        moveStick = true;
    }


    protected override void ZeroWhenUnused()
    {
        if (lastFingerId == -1)
        {
            // move the guitexture based on the return style
            Rect pRect = gui.pixelInset;
            if (autoReturnStyle == ReturnStyleOption.Curved)
            {
                pRect.x = Mathf.Lerp(pRect.x, defaultRect.x, Time.deltaTime*autoReturnSpeed.x*guiTouchOffset.x);
                pRect.y = Mathf.Lerp(pRect.y, defaultRect.y, Time.deltaTime*autoReturnSpeed.y*guiTouchOffset.y);
            }
            else
            {
                pRect.x = Mathf.MoveTowards(pRect.x, defaultRect.x, Time.deltaTime*autoReturnSpeed.x*guiTouchOffset.x);
                pRect.y = Mathf.MoveTowards(pRect.y, defaultRect.y, Time.deltaTime*autoReturnSpeed.y*guiTouchOffset.y);
            }
            gui.pixelInset = pRect;
        }
    }


    protected override void ForEachTouch(Touch touch, Vector2 guiTouchPos)
    {

        bool shouldLatchFinger = gui.HitTest(touch.position);

        if (shouldLatchFinger && (lastFingerId == -1 || lastFingerId != touch.fingerId)) {
            lastFingerId = touch.fingerId;

            // Tell other joysticks we've latched this finger
            for (int index = 0; index < joysticks.Length; index++) {
                if (joysticks[index] != this) {
                    joysticks[index].LatchedFinger (touch.fingerId);
                }
            }
        }
        if (lastFingerId == touch.fingerId) {
                // Change the location of the joystick graphic to match where the touch is
                gui.pixelInset = new Rect (
                    Mathf.Clamp (guiTouchPos.x, guiBoundary.xMin, guiBoundary.xMax),
                    Mathf.Clamp (guiTouchPos.y, guiBoundary.yMin, guiBoundary.yMax),
                    gui.pixelInset.width,
                    gui.pixelInset.height);

                // if the touch is over then reset the joystick to its default position
                if (touch.phase == TouchPhase.Ended || touch.phase == TouchPhase.Canceled) {
                    ResetJoystick ();
                }
            }
    }

    protected override void MoveJoystickGraphic()
    {
        // Get a value between -1 and 1 based on the joystick graphic location
        if (useX)
        {
            position.x = (gui.pixelInset.x + guiTouchOffset.x - guiCenter.x) / guiTouchOffset.x;
        }
        if (useY)
        {
            position.y = (gui.pixelInset.y + guiTouchOffset.y - guiCenter.y) / guiTouchOffset.y;
        }
    }
}
Et ca les options cochées dans celui-ci

Image

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

Re: Boutons de direction pour smartphones tablettes

Message par boubouk50 » 24 Avr 2015 16:39

D'après le commentaire, c'est ici que sont définies les bornes du Joysticks: defaultRect et guiTouchOffset

Code : Tout sélectionner

// Let's build the GUI boundary, so we can clamp joystick movement
        guiBoundary.xMin = defaultRect.x - guiTouchOffset.x;
        guiBoundary.xMax = defaultRect.x + guiTouchOffset.x;
        guiBoundary.yMin = defaultRect.y - guiTouchOffset.y;
        guiBoundary.yMax = defaultRect.y + guiTouchOffset.y;
Et là, c'est le code qui permet le mouvement vertical du Joystick, actif que si useY est vraie. Il faut voir où on le coche (je suppose quand même qu'il est initialisé avec la variable AxisToUse: Only Horizontal), mais là c'est défini dans le script JoystickAbstract (je suppose encore).

Code : Tout sélectionner

 if (useY)
        {
            position.y = (gui.pixelInset.y + guiTouchOffset.y - guiCenter.y) / guiTouchOffset.y;
        }
"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

Répondre

Revenir vers « Développement plateformes mobile Iphone et Android »