limiter une zone de touche

Toutes les questions sur le développement Mobile, y compris la partie script.
Valva
Messages : 23
Inscription : 30 Mai 2020 17:10

limiter une zone de touche

Message par Valva » 03 Juin 2020 04:30

Bonjours, j'ai un système de drag and drop et je voudrais limiter ou le joueur peut toucher pour activer le drag and drop pouvez vous m'aider.

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DragNShoot: MonoBehaviour
{
    public float power = 10f;
    public float maxDrag = 5f;
    public Rigidbody2D rb;
    public LineRenderer lr;

    Vector3 dragStartPos;
    Touch touch;

    private void Update()
    {
        if(Input.touchCount > 0)
        {
            touch = Input.GetTouch(0);

            if (touch.phase == TouchPhase.Began)
            {
                DragStart();
            }
            if (touch.phase == TouchPhase.Moved)
            {
                Dragging();
            }
            if(touch.phase == TouchPhase.Ended)
            {
                DragRelease();
            }
        }

    }

    void DragStart()
    {
        dragStartPos = Camera.main.ScreenToWorldPoint(touch.position);
        dragStartPos.z = 0f;
        lr.positionCount = 1;
        lr.SetPosition(0, dragStartPos);
    }
    void Dragging()
    {
        Vector3 draggingPos = Camera.main.ScreenToWorldPoint(touch.position);
        draggingPos.z = 0f;
        lr.positionCount = 2;
        lr.SetPosition(1, draggingPos);
    }

    void DragRelease()
    {
        lr.positionCount = 0;
        Vector3 dragReleasePos = Camera.main.ScreenToWorldPoint(touch.position);
        dragReleasePos.z = 0f;
        Vector3 force = dragStartPos - dragReleasePos;
        Vector3 clampedForce = Vector3.ClampMagnitude(force, maxDrag) * power;
        rb.AddForce(clampedForce, ForceMode2D.Impulse);

    }
}

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

Re: limiter une zone de touche

Message par boubouk50 » 03 Juin 2020 08:01

Je n'ai pas compris.
je voudrais limiter ou le joueur peut toucher pour activer le drag and drop
Ici, tu ne t'occupes que de savoir si le joueur touche l'écran, tu voudrais définir une zone de contact? Au départ? Au release?
"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

Valva
Messages : 23
Inscription : 30 Mai 2020 17:10

Re: limiter une zone de touche

Message par Valva » 03 Juin 2020 12:54

Oui tout a fait

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

Re: limiter une zone de touche

Message par boubouk50 » 03 Juin 2020 13:56

Tu sais que tu n'es pas limité par le nombre de caractères comme sous Twitter?

Quelle zone? Est-elle fixe ou dépendante d'autre chose? As-tu pensé à tester à utiliser un Collider pour la définir? Ou un bouton?
Clairement, après avoir testé la phase, avant d'appeler la fonction adéquate (Start ou Release) tu pourrais faire un nouveau test pour déterminer si la zone est valide ou non.
Sans plus de précision sur la question, pas plus de précision sur la réponse.
"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

Valva
Messages : 23
Inscription : 30 Mai 2020 17:10

Re: limiter une zone de touche

Message par Valva » 03 Juin 2020 14:02

Je n'ai pas encore de zone. Pour l'instant je n'ai qu'un objet placer en bas de l'écran, je le lance avec un drag and drop. Cependant je ne voudrais pas que le joueur puisse lancer le drag and drop depuis n'importe où. Je voudrais qu'il puisse le faire dans une zone limité. Je crois que tu m'as donné pas mal d'éléments de réponses, je vais m'y pencher. Merci
J'imagine que ca va ressembler à
if(Input.touchCount > 0 && //touche le trigger)

Valva
Messages : 23
Inscription : 30 Mai 2020 17:10

Re: limiter une zone de touche

Message par Valva » 03 Juin 2020 14:30

Peut on vérifier si on touch le trigger ?

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

Re: limiter une zone de touche

Message par boubouk50 » 03 Juin 2020 17:02

Ce n'est pas si simpliste. Il existe tellement de façon de faire en fonction du besoin.

Je pense que tester une collision avec un raycast lors de la phase Began est une bonne solution.
Tu lances un rayon depuis le doigt, s'il touche le collider de la zone alors le Drag est valide et tu peux lancer DragStart (). Il faut donc une zone avec un collider (et non pas un trigger)
"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

Valva
Messages : 23
Inscription : 30 Mai 2020 17:10

Re: limiter une zone de touche

Message par Valva » 03 Juin 2020 17:30

Je vois merci bien

Valva
Messages : 23
Inscription : 30 Mai 2020 17:10

Re: limiter une zone de touche

Message par Valva » 05 Juin 2020 03:36

Yo !
J'ai rajouté du script mais ça ne marche pas ><

Code : Tout sélectionner

private void Update()
    {
        if (Input.touchCount > 0 && Input.touches[0].phase == TouchPhase.Began)
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.touches[0].position);
            RaycastHit hit;

            if (Physics.Raycast(ray, out hit))
            {
                if (hit.collider != null)
                {
                    touch = Input.GetTouch(0);

                    if (touch.phase == TouchPhase.Began)
                    {
                        DragStart();
                    }
                    if (touch.phase == TouchPhase.Moved)
                    {
                        Dragging();
                    }
                    if (touch.phase == TouchPhase.Ended)
                    {
                        DragRelease();
                    }
                }
            }
        }
Je passe à côté de quelque chose ?
 ! Message de : boubouk50
Merci d'utiliser les outils de mise en page mis à disposition.
Merci donc d'encapsuler ton code par les balises CODE (5e bouton)

Valva
Messages : 23
Inscription : 30 Mai 2020 17:10

Re: limiter une zone de touche

Message par Valva » 05 Juin 2020 03:40

J'aimerais aussi détecter un collider précis, une idée ?

Répondre

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