Page 1 sur 1

Renseignements sur les gameObjects

Publié : 17 Oct 2020 04:26
par Totolo33
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

Re: Renseignements sur les gameObjects

Publié : 17 Oct 2020 10:27
par Max
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

Re: Renseignements sur les gameObjects

Publié : 17 Oct 2020 11:49
par jmhoubre
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).

Re: Renseignements sur les gameObjects

Publié : 17 Oct 2020 15:00
par Totolo33
Bonjour,

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

Publié : 17 Oct 2020 21:42
par Totolo33
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
    }

Re: Renseignements sur les gameObjects

Publié : 18 Oct 2020 00:27
par jmhoubre
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.
	}
}

Re: Renseignements sur les gameObjects

Publié : 20 Oct 2020 01:14
par Totolo33
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