Renseignements sur les gameObjects

Questions techniques liées à l’utilisation d'Unity (et n'entrant pas dans le cadre d'une des sections suivantes)
Totolo33
Messages : 17
Inscription : 08 Sep 2020 01:56

Renseignements sur les gameObjects

Message par Totolo33 » 17 Oct 2020 04:26

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

Avatar de l’utilisateur
Max
Newser
Newser
Messages : 8004
Inscription : 30 Juil 2011 13:57
Contact :

Re: Renseignements sur les gameObjects

Message par Max » 17 Oct 2020 10:27

Bonjour,
Totolo33 a écrit :
17 Oct 2020 04:26
Je voudrais savoir s'il est possible de pouvoir cliquer sur mon bâtiment et qu'il m'ouvre un PanelUI ?
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
Image
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

Avatar de l’utilisateur
jmhoubre
Messages : 279
Inscription : 05 Oct 2019 22:05

Re: Renseignements sur les gameObjects

Message par jmhoubre » 17 Oct 2020 11:49

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.
Avec 2560 objets, la méthode OnMouseDown coute 9,8 ms par frame, et les raycasts 6 ms. Je n'ai pas mesuré l'impact sur la mémoire, mais je pense que la méthode raycast est moins gourmande (chaque objet doit avoir quelques variables stockées).

Totolo33
Messages : 17
Inscription : 08 Sep 2020 01:56

Re: Renseignements sur les gameObjects

Message par Totolo33 » 17 Oct 2020 15:00

Bonjour,

Merci beaucoup pour vos réponses et les tutos.
Je vais aller voir ça et vous faire un retour.

Merci encore

Totolo33
Messages : 17
Inscription : 08 Sep 2020 01:56

Re: Renseignements sur les gameObjects

Message par Totolo33 » 17 Oct 2020 21:42

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

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
    }

Avatar de l’utilisateur
jmhoubre
Messages : 279
Inscription : 05 Oct 2019 22:05

Re: Renseignements sur les gameObjects

Message par jmhoubre » 18 Oct 2020 00:27

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.

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.
	}
}

Totolo33
Messages : 17
Inscription : 08 Sep 2020 01:56

Re: Renseignements sur les gameObjects

Message par Totolo33 » 20 Oct 2020 01:14

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

Répondre

Revenir vers « Unity le logiciel »