Renseignements sur les gameObjects
Renseignements sur les gameObjects
Bonsoir,
Je suis débutant dans Unity et pour commencer j'essai de faire des petits jeux en suivant des tutos.
J'ai commencé par faire un petit projet mobile, pour moi afin de découvrir l'utilisation de Blender pour créer mes GameObjects, autres décors et l'utilisation de Unity.
Actuellement j'ai ajouté ma map "lowpoly" et un de mes bâtiments "lowpoly" dans ma scène.
Le jeu se présente sur une map 3D avec des bâtiments 3D mais en vue perspective, l'UI est donc sur ma caméra et on distingue mes boutons et autres ( Xp, Cash,...) sur le premier plan.
Je voudrais savoir s'il est possible de pouvoir cliquer sur mon bâtiment et qu'il m'ouvre un PanelUI ?
En gros en arrière plan mon bâtiment est visible et si j'appuie dessus depuis mon téléphone je voudrais qu'il m'ouvre le panneau me permettant de crafter ou faire les éléments disponible dans mon bâtiment.
Si c'est possible pouvez vous me donner un tuto ou une marche à suivre ?
Merci d'avance
Je suis débutant dans Unity et pour commencer j'essai de faire des petits jeux en suivant des tutos.
J'ai commencé par faire un petit projet mobile, pour moi afin de découvrir l'utilisation de Blender pour créer mes GameObjects, autres décors et l'utilisation de Unity.
Actuellement j'ai ajouté ma map "lowpoly" et un de mes bâtiments "lowpoly" dans ma scène.
Le jeu se présente sur une map 3D avec des bâtiments 3D mais en vue perspective, l'UI est donc sur ma caméra et on distingue mes boutons et autres ( Xp, Cash,...) sur le premier plan.
Je voudrais savoir s'il est possible de pouvoir cliquer sur mon bâtiment et qu'il m'ouvre un PanelUI ?
En gros en arrière plan mon bâtiment est visible et si j'appuie dessus depuis mon téléphone je voudrais qu'il m'ouvre le panneau me permettant de crafter ou faire les éléments disponible dans mon bâtiment.
Si c'est possible pouvez vous me donner un tuto ou une marche à suivre ?
Merci d'avance
Re: Renseignements sur les gameObjects
Bonjour,
Tu peux regarder le petit tuto sur le Learn concernant ce sujet: https://learn.unity.com/tutorial/onmousedown#
Après, parmi une foule d'objets, il peut être plus intéressant de passer par les Raycast.
Genre: Select object with Raycast (TouchScreen)
Video traitant du sujet: https://www.youtube.com/watch?v=aTtheFyh7Ac
Pour selectionner un GameObject on passe souvent par la fonction OnMouseDown().
Tu peux regarder le petit tuto sur le Learn concernant ce sujet: https://learn.unity.com/tutorial/onmousedown#
Après, parmi une foule d'objets, il peut être plus intéressant de passer par les Raycast.
Genre: Select object with Raycast (TouchScreen)
Video traitant du sujet: https://www.youtube.com/watch?v=aTtheFyh7Ac
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ
Re: Renseignements sur les gameObjects
J'ai fait quelques essais il y a une semaine, Sur une grille, des GameObjects représentent les cases de cette grille. Pour avoir accès à un des objets via la souris, j'ai utilisé 2 méthodes :
- OnMouseDown, dans un script rattaché à chaque objet ;
- un Raycast, dans un script rattaché à un objet vide.
Re: Renseignements sur les gameObjects
Bonjour,
Merci beaucoup pour vos réponses et les tutos.
Je vais aller voir ça et vous faire un retour.
Merci encore
Merci beaucoup pour vos réponses et les tutos.
Je vais aller voir ça et vous faire un retour.
Merci encore
Re: Renseignements sur les gameObjects
Après avoir lu et regardé les Tutos proposés, je vais utiliser sans hésiter les Raycast.
Mais mon souci est que je ne vois pas comment appeler à ouvrir mon panneau UI.
J'ai ajouté un Collideret un RigidBody sur mon Canvas contenant mon bâtiment.
J'ai pris la méthode : if (Input.touchCount > 0), mais je suis perdu pour la suite.
Habituellement pour ouvrir mon panneau j'utilise un bouton avec un bool afin qu'il ouvre ou ferme mon panel.
Comment as tu fais jmhoubre pour accéder a ton objet dans ton panel ?
Merci d'avance
Mais mon souci est que je ne vois pas comment appeler à ouvrir mon panneau UI.
J'ai ajouté un Collideret un RigidBody sur mon Canvas contenant mon bâtiment.
J'ai pris la méthode : if (Input.touchCount > 0), mais je suis perdu pour la suite.
Habituellement pour ouvrir mon panneau j'utilise un bouton avec un bool afin qu'il ouvre ou ferme mon panel.
Comment as tu fais jmhoubre pour accéder a ton objet dans ton panel ?
Merci d'avance
Code : Tout sélectionner
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class OpenAssemblyBuilding : MonoBehaviour
{
// Update is called once per frame
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)
{
}
}
}
#if UNITY_EDITOR // Juste pour tester dans Unity
if (Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
if (hit.collider != null)
{
}
}
}
}
#endif
}
Re: Renseignements sur les gameObjects
Bonsoir,
c'est le bâtiment qui doit avoir un collider (le raycast n'a pas besoin de rigidbody).
Le GameObject touché est accessible par les données du hit (souvent hitinfo, comme dans cet exemple). J'ai traité pour un PC, sur un mobile je ne connais pas.
c'est le bâtiment qui doit avoir un collider (le raycast n'a pas besoin de rigidbody).
Le GameObject touché est accessible par les données du hit (souvent hitinfo, comme dans cet exemple). J'ai traité pour un PC, sur un mobile je ne connais pas.
Code : Tout sélectionner
private void DoRayCast () {
Vector3 mouse = Input.mousePosition;
Ray ray = cam.ScreenPointToRay (mouse);
if (Physics.Raycast (ray, out RaycastHit hitInfo)) {
// Récupère l'objet touché.
GameObject hitObject = hitInfo.collider.transform.gameObject;
// On teste le type d'objet touché. Je suppose que ton bâtiment a un script "Building".
if (hitObject.transform.GetComponent<Building> () != null) {
DoCraft(hitObject);
}
} else {
// Rien n'a été touché.
// On fait ce qui doit être fait.
}
}
Re: Renseignements sur les gameObjects
Bonsoir,
Je vais tester ça et revenir vous dire ou ça en est et si cela a fonctionné.
Oui mon GameObject a un script Building
Je vais tester ça et revenir vous dire ou ça en est et si cela a fonctionné.
Oui mon GameObject a un script Building
Re: Renseignements sur les gameObjects
Bon je ne comprends pas .
J'ai essayé le code, mais rien ne se passe.
En fait ce que je ne comprends pas, mon fbx qui est déjà posé sur mon Wolrd avec le changement de couleur cela fonctionne.
Mais je ne comprends pas comment, ni ou trouver comment lui dire d'ouvrir l'Ui !
Mon building à bien un script building (faut-il que je mette un SetActive ?) mais lorsque je clique dessus rien en se passe.
Je suis perdu, depuis la semaine j'ai essayé plusieurs choses sans succès.
J'avoue que si j'avais juste fait avec uniquement des bouton ca aurait été plus simple, mais moins intéressant.
Mon fichier comprenant le code du raycast doit être sur quoi ? Le building aussi ? (surement que la je me plante)
J'ai essayé le code, mais rien ne se passe.
En fait ce que je ne comprends pas, mon fbx qui est déjà posé sur mon Wolrd avec le changement de couleur cela fonctionne.
Mais je ne comprends pas comment, ni ou trouver comment lui dire d'ouvrir l'Ui !
Mon building à bien un script building (faut-il que je mette un SetActive ?) mais lorsque je clique dessus rien en se passe.
Je suis perdu, depuis la semaine j'ai essayé plusieurs choses sans succès.
J'avoue que si j'avais juste fait avec uniquement des bouton ca aurait été plus simple, mais moins intéressant.
Mon fichier comprenant le code du raycast doit être sur quoi ? Le building aussi ? (surement que la je me plante)
Re: Renseignements sur les gameObjects
Bonsoir,
je suppose que ton Building a 2 enfants : Model (le mesh et son collider), et BuildingCanvas, le canvas de l'UI de ton bâtiment :
Building (script building)
|---Model (collider et mesh du bâtiment)
|---BuildingCanvas (canvas de l'UI de craft du bâtiment)
Le premier bout de code proposé devrait être dans un script attaché à un Empty que tu peux appeler MouseManager (l'empty et son script), qui ressemble à ceci :
Le building a un script Building qui ressemble à ceci :,
je suppose que ton Building a 2 enfants : Model (le mesh et son collider), et BuildingCanvas, le canvas de l'UI de ton bâtiment :
Building (script building)
|---Model (collider et mesh du bâtiment)
|---BuildingCanvas (canvas de l'UI de craft du bâtiment)
Le premier bout de code proposé devrait être dans un script attaché à un Empty que tu peux appeler MouseManager (l'empty et son script), qui ressemble à ceci :
Code : Tout sélectionner
using UnityEngine;
public class MouseManager : MonoBehaviour
{
private Camera cam;
private void Awake ()
{
cam = Camera.main;
}
private void Update ()
{
// Teste si on a cliqué quelque part.
if (Input.GetMouseButtonDown (0))
{
// Si oui, on tire un raycast pour savoir si on a touché un building.
DoRayCast ();
}
}
private void DoRayCast ()
{
// DoRayCast devrait être dans le script du bâtiment, mais il est 4h du matin...
// Edit à 23h50 : après réflexion, DoRayCast () est bien là où elle est,
// Surtout si on veut pouvoir exploiter des Raycasts sur d'autres GameObjects.
Vector3 mouse = Input.mousePosition;
Ray ray = cam.ScreenPointToRay (mouse);
if (Physics.Raycast (ray, out RaycastHit hitInfo))
{
// Récupère l'objet touché, ie le père du gameObject possédant le collider.
GameObject hitObject = hitInfo.collider.transform.parent.gameObject;
// On teste le type d'objet touché.
if (hitObject.transform.GetComponent<Building> () != null)
{
// C'est un building : on ouvre l'UI.
hitObject.GetComponent<Building>().OpenUI ();
}
}
else
{
// Rien n'a été touché.
// On fait ce qui doit être fait.
}
}
}
Le building a un script Building qui ressemble à ceci :
Code : Tout sélectionner
using UnityEngine;
public class Building : MonoBehaviour
{
[SerializeField] private Canvas buildingCanvas;
private void Awake ()
{
buildingCanvas = gameObject.GetComponentInChildren<Canvas> ();
buildingCanvas.enabled = false;
}
public void OpenUI ()
{
buildingCanvas.enabled = true;
}
}
Dernière édition par jmhoubre le 26 Oct 2020 00:54, édité 2 fois.
Re: Renseignements sur les gameObjects
Merci beaucoup pour ta réponse.
Je vais tester tout ça et te faire un retour sur ce qu'il en est.
Mon erreur est que je n'avais pas mis le buildingCanvas sur le Building il était je ne sais pas ou (je ne le trouve pas ).
Merci beaucoup pour le détail aussi de tes explications ça m'aide beaucoup car étant débutant tout n'est pas limpide.
Je te ferai un retour sur ça.
Je vais tester tout ça et te faire un retour sur ce qu'il en est.
Mon erreur est que je n'avais pas mis le buildingCanvas sur le Building il était je ne sais pas ou (je ne le trouve pas ).
Merci beaucoup pour le détail aussi de tes explications ça m'aide beaucoup car étant débutant tout n'est pas limpide.
Je te ferai un retour sur ça.