OnMouseDown et plusieurs actions

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
xanatus
Messages : 16
Inscription : 06 Nov 2015 12:39

Re: OnMouseDown et plusieurs actions

Message par xanatus » 19 Nov 2015 16:49

J'ai utilisé le code de boubouk car il n'accepte pas le out en dehors, il me dit:
Assets/Scripts/Touch.cs(6,7): error CS1519: Unexpected symbol `out' in class, struct, or interface member declaration

En utilisant ton code boubouk il y a toujours un petit soucis:
NullReferenceException: Object reference not set to an instance of an object
Touch.Update () (at Assets/Scripts/Touch.cs:12)


EDIT: J'ai trouvé pour le message d'erreur, il fallait mettre la camera avec le tag "Main Camera" :-D

Petite question, a quoi sert le out?

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

Re: OnMouseDown et plusieurs actions

Message par boubouk50 » 19 Nov 2015 17:06

je te mets le code que j'utilise normalement:

Code : Tout sélectionner

public class Touch : MonoBehaviour {

// Update is called once per frame
	void Update ()
	{
      		Ray RayMouse = Camera.main.ScreenPointToRay(Input.mousePosition);
       		RaycastHit hit;

       		if (Physics.Raycast(RayMouse, out hit))
       		{
            		Debug.Log(hit.transform.name);
      		}
        }
}
"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
froll
Messages : 58
Inscription : 30 Jan 2012 17:45

Re: OnMouseDown et plusieurs actions

Message par froll » 19 Nov 2015 17:13

Ha oui exact, j'ai répondu un peu vite :)
Mon projet : D.O.M, un jeux vidéo space opéra
Site web de mon projet

xanatus
Messages : 16
Inscription : 06 Nov 2015 12:39

Re: OnMouseDown et plusieurs actions

Message par xanatus » 19 Nov 2015 17:19

Merci, tous ça commence à être plus clair, je cherche à faire un truc de ce genre:

Code : Tout sélectionner

public class Touch : MonoBehaviour {

    RaycastHit hit;
    Ray RayMouse;
    public bool cou = false;

    // Update is called once per frame
    void Update ()
    {
        RayMouse = Camera.main.ScreenPointToRay(Input.mousePosition);

        if (Input.GetMouseButtonDown(0))
        {
            if (Physics.Raycast(RayMouse, out hit))
            {
                if(cou == true)
                {
                    transform.Translate(1, 0, 0);
                }
                if (cou == false)
                {
                    transform.Translate(-1, 0, 0);
                }
            }
        }
    }
}
Ce code ne fonctionne pas encore, mais le but ressemble à ça.
je clique ça se décale, je re-clique dessus, ça revient en position initiale.

Avatar de l’utilisateur
froll
Messages : 58
Inscription : 30 Jan 2012 17:45

Re: OnMouseDown et plusieurs actions

Message par froll » 19 Nov 2015 17:27

Il faut modifier ta variable

Code : Tout sélectionner

public class Touch : MonoBehaviour {

    RaycastHit hit;
    Ray RayMouse;
    public bool cou = false;

    // Update is called once per frame
    void Update ()
    {
        RayMouse = Camera.main.ScreenPointToRay(Input.mousePosition);

        if (Input.GetMouseButtonDown(0))
        {
            if (Physics.Raycast(RayMouse, out hit))
            {
                if(cou == true)
                {
                    transform.Translate(1, 0, 0);
                    cou  = false;
                }
                if (cou == false)
                {
                    transform.Translate(-1, 0, 0);
                    cou  = true;
                }
            }
        }
    }
}
Mon projet : D.O.M, un jeux vidéo space opéra
Site web de mon projet

xanatus
Messages : 16
Inscription : 06 Nov 2015 12:39

Re: OnMouseDown et plusieurs actions

Message par xanatus » 19 Nov 2015 17:30

J'ai essayé de faire ça mais l'objet ne veut pas revenir en position initiale :? et cou reste en true quand je re-clique dessus.

xanatus
Messages : 16
Inscription : 06 Nov 2015 12:39

Re: OnMouseDown et plusieurs actions

Message par xanatus » 19 Nov 2015 17:34

Victoire :-D

Voilà mon code:

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class Touch : MonoBehaviour {

    RaycastHit hit;

    public bool cou = false;

    // Update is called once per frame
    void Update ()
    {
        Ray RayMouse = Camera.main.ScreenPointToRay(Input.mousePosition);

        if (Input.GetMouseButtonDown(0))
        {
            if (Physics.Raycast(RayMouse, out hit))
            {
                if(cou == true)
                {
                    cou = false;
                    transform.Translate(1, 0, 0);
                }
            }
            if (Physics.Raycast(RayMouse, out hit))
            {
                if (cou == false)
                {
                    cou = true;
                    transform.Translate(-1, 0, 0);
                }
            }
        }
    }
}

Avatar de l’utilisateur
froll
Messages : 58
Inscription : 30 Jan 2012 17:45

Re: OnMouseDown et plusieurs actions

Message par froll » 19 Nov 2015 17:53

Non ton script est une erreur, tu ne fait que ralentir son execution en faisant appel à deux raycast. Mon script était également faux tout à l'heure (désolé, je l'ai écrit en speed à mon boulot).

Essaye plutôt ça (toujours pas pu tester, désolé).

Code : Tout sélectionner

public class Touch : MonoBehaviour {

    RaycastHit hit;
    Ray RayMouse;
    public bool cou = false;

    // Update is called once per frame
    void Update ()
    {
        RayMouse = Camera.main.ScreenPointToRay(Input.mousePosition);

        if (Input.GetMouseButtonDown(0))
        {
            if (Physics.Raycast(RayMouse, out hit))
            {
                if(cou == true)
                {
                    transform.Translate(1, 0, 0);
                    cou  = false;
                }else  if (cou == false)
                {
                    transform.Translate(-1, 0, 0);
                    cou  = true;
                }
            }
        }
    }
}
Mon projet : D.O.M, un jeux vidéo space opéra
Site web de mon projet

xanatus
Messages : 16
Inscription : 06 Nov 2015 12:39

Re: OnMouseDown et plusieurs actions

Message par xanatus » 19 Nov 2015 18:07

Ça marche impéc, merci!

J'essayais de le peaufiner pour éviter de mettre le script directement sur mon objet et grâce à ta modif ça marche maintenant.
Ça me faisait sauter l'objet que je mettais dans box collider.

Voilà mon code:

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class Touch : MonoBehaviour
{

    public bool cou = false;
    public Transform objet;
    public Collider ObjetCollider;

    void start()
    {
        ObjetCollider = GetComponent<Collider>();
    }

    // Update is called once per frame
    void Update()
    {
        Ray RayMouse = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;

        if (Input.GetMouseButtonDown(0))
        {
            if (ObjetCollider.Raycast(RayMouse, out hit, 100f))
            {
                if (cou == true)            //Animation numéro 1
                {
                    cou = false;
                    objet.transform.Translate(0.2f, 0, 0);
                }
                else if (cou == false)            //Animation numéro 2
                {
                    objet.transform.Translate(-0.2f, 0, 0);
                    cou = true;
                }
            }
        }
    }
}


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

Re: OnMouseDown et plusieurs actions

Message par ZJP » 19 Nov 2015 20:42

xanatus a écrit :J'ai mis un box collider parce que j'ai fait une recherche Google.

Ça fait deux jours que je cherche et j'étais persuadé qu'on allait me répondre ça... J'aurais dûs m'abstenir.
D'accord, soyons plus "constructif". ;-)

Version fonctionnel (j'ai vérifié) d'une solution simple ET efficace (car un seul script placé sur la Camera principale). La seule nécessité étant (comme d’habitude) un Collider sur les GOs.
J'ai fais un test avec 4 cubes (Cude1, Cube2, Cube3 et TOTO).

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class Click : MonoBehaviour 
{
	bool cou = false;
	
	void Update()
	{
		if (Input.GetMouseButtonDown(0))
		{
			Debug.Log("CLICK DE SOURIS, BOUTON GAUCHE !!!");

			RaycastHit hitInfo = new RaycastHit();
			bool hit = Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hitInfo);
			if (hit) 
			{
				Debug.Log("SELECTION DE  " + hitInfo.transform.gameObject.name);
//				if (hitInfo.transform.gameObject.tag == "TOTO") // recherche par le TAG
				if (hitInfo.transform.gameObject.name == "TOTO") // recherche par le NOM
				{
					Debug.Log ("BRAVO. TOTO EST TROUVE !!!!");
					cou = !cou;
					if (cou) hitInfo.transform.Translate(1, 0, 0);
					else hitInfo.transform.transform.Translate(-1, 0, 0);

				} else 
				{
					Debug.Log ("UN TROUVE, MAIS CE N'EST PAS TOTO");
				}
			} else 
			{
				Debug.Log("AUCUN SELECTION !!");
			}
		} 
	}
}



Répondre

Revenir vers « (C#) CSharp »