OnMouseDown et plusieurs actions
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
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
Re: OnMouseDown et plusieurs actions
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"
Petite question, a quoi sert le out?
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"
Petite question, a quoi sert le out?
- boubouk50
- ModoGenereux
- Messages : 6228
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: OnMouseDown et plusieurs actions
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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: OnMouseDown et plusieurs actions
Ha oui exact, j'ai répondu un peu vite
Re: OnMouseDown et plusieurs actions
Merci, tous ça commence à être plus clair, je cherche à faire un truc de ce genre:
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.
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);
}
}
}
}
}
je clique ça se décale, je re-clique dessus, ça revient en position initiale.
Re: OnMouseDown et plusieurs actions
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;
}
}
}
}
}
Re: OnMouseDown et plusieurs actions
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.
Re: OnMouseDown et plusieurs actions
Victoire
Voilà mon code:
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);
}
}
}
}
}
Re: OnMouseDown et plusieurs actions
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é).
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;
}
}
}
}
}
Re: OnMouseDown et plusieurs actions
Ç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:
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;
}
}
}
}
}
Re: OnMouseDown et plusieurs actions
D'accord, soyons plus "constructif".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.
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 !!");
}
}
}
}