Page 1 sur 1
Bouger un gameObject à la fois
Publié : 21 Fév 2017 20:06
par Guigui
Bonjour, je me retrouve confronté face à un problème sur Unity. J'ai mis deux cubes sur ma scène et je leur ait ajouté deux scripts respectifs permettant de les déplacer avec les touches directionnelles du clavier. Cependant lorsque je lance le jeu je ne peux bouger que mon premier cube. Le problème est que je voudrais que Unity me détecte quand je clique avec la souris sur l'autre cube. C'est-à-dire que quand je clique sur mon deuxième cube je peux bouger celui-ci mais aussi que je ne puisse plus bouger le premier cube.
Quelqu'un aurait-il une idée ?
Merci d'avance.
Re: Bouger un gameObject à la fois
Publié : 21 Fév 2017 21:01
par nigel
Une instance static de ta classe script.
Dans la fonction OnMouseClick cette instance prend le script courant en référence.
Dans le fonction d'Update, les input travaillent sur l'instance static.
C'est a dire que tu vérifie dans l'update si les ref sont les mêmes avec comparaison ID
Re: Bouger un gameObject à la fois
Publié : 21 Fév 2017 21:31
par Guigui
Euh j'ai du mal à comprendre parce que du coup quand je détecte le clic sur mon gameobject et qu'ensuite je veux l'avancer et bah je n'ai pas le temps d'appuyer sur les touches du clavier. J'ai essayé de mettre une temporisation à la fin du void (OnMouseDown) mais ça n'as pas fonctionné. Voici mon code :
Code : Tout sélectionner
void Update()
{
OnMouseDown();
}
void OnMouseDown()
{
if (Input.GetMouseButtonDown(0)){
Vector3 move = new Vector3();
if (Input.GetKey(KeyCode.UpArrow))
{
move.z += 0.1f;
}
if (Input.GetKey(KeyCode.DownArrow))
{
move.z -= 0.1f;
// Destroy(gameObject);
}
if (Input.GetKey(KeyCode.LeftArrow))
{
move.x -= 0.1f;
}
if (Input.GetKey(KeyCode.RightArrow))
{
move.x += 0.1f;
}
// déplacement du fou
if (Input.GetKey(KeyCode.UpArrow) && Input.GetKey(KeyCode.RightArrow))
{
move.x += 0.1f;
move.z += 0.1f;
}
if (Input.GetKey(KeyCode.UpArrow) && Input.GetKey(KeyCode.LeftArrow))
{
move.x -= 0.1f;
move.z += 0.1f;
}
if (Input.GetKey(KeyCode.DownArrow) && Input.GetKey(KeyCode.RightArrow))
{
move.x += 0.1f;
move.z -= 0.1f;
}
if (Input.GetKey(KeyCode.DownArrow) && Input.GetKey(KeyCode.LeftArrow))
{
move.x -= 0.1f;
move.z -= 0.1f;
}
transform.position += move;
}
}
Les balises code SVP
Merci de lire la Netiquette.
Re: Bouger un gameObject à la fois
Publié : 21 Fév 2017 22:04
par ZJP
Script a coller sur une
Camera (par exemple). Les autres GOs doivent comporter un
Collider. Cela fonctionne,
j'ai essayé.
Code : Tout sélectionner
using UnityEngine;
using System.Collections;
public class moveme : MonoBehaviour {
private Transform objectHit;
private Vector3 move = new Vector3(0.0f,0.0f,0.0f);
void Update(){
if (Input.GetMouseButtonDown(0)){
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast (ray, out hit)) objectHit = hit.transform;
}
if(objectHit != null){
move = objectHit.position;
if (Input.GetKey(KeyCode.UpArrow))
{
move.z += 0.1f;
}
if (Input.GetKey(KeyCode.DownArrow))
{
move.z -= 0.1f;
}
if (Input.GetKey(KeyCode.LeftArrow))
{
move.x -= 0.1f;
}
if (Input.GetKey(KeyCode.RightArrow))
{
move.x += 0.1f;
}
// déplacement du fou
if (Input.GetKey(KeyCode.UpArrow) && Input.GetKey(KeyCode.RightArrow))
{
move.x += 0.1f;
move.z += 0.1f;
}
if (Input.GetKey(KeyCode.UpArrow) && Input.GetKey(KeyCode.LeftArrow))
{
move.x -= 0.1f;
move.z += 0.1f;
}
if (Input.GetKey(KeyCode.DownArrow) && Input.GetKey(KeyCode.RightArrow))
{
move.x += 0.1f;
move.z -= 0.1f;
}
if (Input.GetKey(KeyCode.DownArrow) && Input.GetKey(KeyCode.LeftArrow))
{
move.x -= 0.1f;
move.z -= 0.1f;
}
objectHit.position = move;
}
}
}
Re: Bouger un gameObject à la fois
Publié : 21 Fév 2017 22:29
par nigel
Code : Tout sélectionner
public class Cube : MonoBehaviour
{
public float Vitesse = 1;
private static Cube instance;
private void Start()
{
instance = this;
}
void Update()
{
if (this.GetInstanceID() == instance.GetInstanceID())
{
transform.position += new Vector3(Input.GetAxis("Horizontal"),
0,
Input.GetAxis("Vertical")) * Time.deltaTime * Vitesse;
}
}
private void OnMouseDown()
{
instance = this;
}
}
J'ai édité avec une vitesse
Re: Bouger un gameObject à la fois
Publié : 21 Fév 2017 23:12
par Guigui
Euh c'est quoi exactement le Ray et le Hit ? Et c'était pas possible de mettre une temporisation dans mon update pour me laisser le temps d'appuyer sur le clavier ?
Re: Bouger un gameObject à la fois
Publié : 21 Fév 2017 23:34
par ZJP
Guigui a écrit :Euh c'est quoi exactement le Ray et le Hit ? Et c'était pas possible de mettre une temporisation dans mon update pour me laisser le temps d'appuyer sur le clavier ?
Tu as essayé le code?!
Re: Bouger un gameObject à la fois
Publié : 21 Fév 2017 23:53
par Guigui
Merci beaucoup ça marche à la perfection ! Mais je voudrais juste savoir en quoi consiste cette ligne de code si cela ne vous embête pas :
Code : Tout sélectionner
private Transform objectHit;
private Vector3 move = new Vector3(0.0f, 0.0f, 0.0f);
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit)) objectHit = hit.transform;
}
if (objectHit != null)
{
move = objectHit.position;
Les balises code SVP (2 fois)
Merci de lire la Netiquette.
Merci encore !
Re: Bouger un gameObject à la fois
Publié : 22 Fév 2017 15:19
par ZJP
Guigui a écrit :
Code : Tout sélectionner
if (Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit)) objectHit = hit.transform;
}
Fait un
Raycast à la position de la souris. Le résultat du Raycast se trouve dans
hit. On peut ainsi récupérer le
Transform de l'objet cliqué.
Vérification qu'un objet a bien été sélectionné avant de poursuivre. On prend alors sa position actuelle avant d’appliquer les nouveaux déplacements.
Move est déclarée une bonne fois pour toute car je suis un allergique au
New. J'aurai tout aussi bien pu l'appeler
tempoV3 et m'en servir pour autre chose. Astuce de vieux dev.