Bouger un gameObject à la fois
Bouger un gameObject à la fois
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.
Quelqu'un aurait-il une idée ?
Merci d'avance.
Re: Bouger un gameObject à la fois
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
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
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 :
Les balises code SVP
Merci de lire la Netiquette.
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;
}
}
Merci de lire la Netiquette.
Re: Bouger un gameObject à la fois
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
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;
}
}
Re: Bouger un gameObject à la fois
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
Tu as essayé le code?!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 ?
Re: Bouger un gameObject à la fois
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 :
Les balises code SVP (2 fois)
Merci de lire la Netiquette.
Merci encore !
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;
Merci de lire la Netiquette.
Merci encore !
Re: Bouger un gameObject à la fois
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é.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; }
Code : Tout sélectionner
if (objectHit != null)
{
move = objectHit.position;
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.