Page 1 sur 1

[RESOLU] Zone de jeu + Collision

Publié : 13 Nov 2019 17:09
par Malavia
Bonjour,

Je tente de faire un jeu en vue isométrique avec des objets 3D en mode paysage.

L'idée :
Je voudrais utiliser 1/2 écran pour le jeu, le reste à droite et à gauche serait pour l'UI.
Je voudrais que les objets rebondissent quand ils touchent les bords de la zone de jeu (et donc qu'il ne sortent pas de la zone de jeu) et que les objets ne se chevauchent jamais.
Idéalement, je voudrais que les objets soit des hexagones.

donc il me faut :
- un conteneur délimitant les bords du jeu ou du code
- un prefab hexagone

bon.. après je commence à nager :

j'ai crée un conteneur qui est sensé contenir et ne jamais laissé échappé un objet :

Code : Tout sélectionner

    GameObject CreateCubeCollider()
    {
        GameObject newcube = new GameObject("CubeCollider");
        newcube.transform.position = new Vector3(-0.19f, 0, -0.59f);
        newcube.transform.localScale = new Vector3(6, 1, 6); 
        MeshCollider meshc = newcube.AddComponent(typeof(MeshCollider)) as MeshCollider;
        meshc.sharedMesh = mesh;
        return newcube;
    }
malheureusement, ce n'est pas tout le temps le cas, certains sortent..
es ce que c'est une bonne idée de travailler sur screenWidth pour localScale ?

j'ai aussi un hexa :

Code : Tout sélectionner

    GameObject CreateHex(Vector3 vector3)
    {
        GameObject newHex = Instantiate(Hexa, vector3, Quaternion.identity);
        newHex.transform.parent = cube.transform; //Placer sur le parent
        return newHex;
    }
qui est sensé bouger (code inclus dans le prefab de l'hexa) quand je clique dessus :

Code : Tout sélectionner

    private void OnMouseDown()
    {
        Debug.Log("click" + rb);
        rb.AddForce(transform.forward * 500f);
    }
Toutefois, OnMouseDown ne s'excute pas avec l'hexa, alors qu'il s'excute avec un cube. La différence entre les 2 semble être le meshCollider (avec convex coché) présent chez l'hexa mais pas chez l'autre.

Mon autre problème, et non le plus petit, est que mes hexa se chevauchent..

Je vous remercie pour votre aide..
ps : Sur le screen, la sphère représente le conteneur.

Re: Zone de jeu + Collision

Publié : 13 Nov 2019 17:59
par EmileF
Salut,

Une petite question, pourquoi crées-tu tes objets par script au lieu de créer ta scène dans l'éditeur ?

Re: Zone de jeu + Collision

Publié : 13 Nov 2019 21:15
par Malavia
Bonjour,
Il n'y a pas vraiment de raison.
C'est juste qu'ayant multiplier les hexagones avec le code via Instantiate (ce qui me permet d'en créer au tant que je veux). J'ai rajouté leur parent commun (le conteneur) en restant dans le code. Mais j'aurais très bien pu le faire via l'éditeur.

Re: Zone de jeu + Collision

Publié : 13 Nov 2019 22:31
par Max
Bonsoir,
Malavia a écrit :
13 Nov 2019 17:09
j'ai crée un conteneur qui est sensé contenir et ne jamais laissé échappé un objet :
...
malheureusement, ce n'est pas tout le temps le cas, certains sortent..
tu définis un MeshCollider et tu places les autres objets à l’intérieur. Tu n'auras pas de détection de collision normalement entre les objets contenus dans le volume et le contenant. Au pire tu peux tenter le truc quand même avec ton mesh (une sphère à priori) en faisant avant un flip normal, cela à plus de chance de fonctionner.

Re: Zone de jeu + Collision

Publié : 14 Nov 2019 12:14
par Malavia
Merci Max. C'est quoi un flip ? un flip normal ?

En fait, OnMouseDown n'est pas exécuté sur les hexagones qui sont à l'intérieur du conteneur.

Re: Zone de jeu + Collision

Publié : 14 Nov 2019 14:12
par Max
Bonjour,
Malavia a écrit :
14 Nov 2019 12:14
C'est quoi un flip ? un flip normal ?
Le but c'est d'orienter les normales des faces de ton mesh dans l'autre sens, un peu comme si on retournait ton modèle comme une chaussette. Dans le cas de ta sphère, les normales ne seront plus dirigée vers l'extérieur, mais vers l’intérieur. A voir les sujets et solutions sur le net.
Malavia a écrit :
14 Nov 2019 12:14
En fait, OnMouseDown n'est pas exécuté sur les hexagones qui sont à l'intérieur du conteneur.
Normal. Ton conteneur ayant un collider, "masque" tes objets lors de leur OnMouseDown.

Sincèrement, à mon avis ta solution pour limiter l'action de tes éléments au sein d'un espace précis n'est pas la plus simple.

Re: Zone de jeu + Collision

Publié : 14 Nov 2019 14:44
par EmileF
Salut,

J'aurais créé dans l'éditeur 6 cubes représentant les murs du conteneur.
Ca réglerait tous les problèmes de collisions.

En mettant le layer de ces cubes à ignore raycast, ça réglerait aussi tes problèmes de détection de clic

Re: Zone de jeu + Collision

Publié : 14 Nov 2019 16:54
par Malavia
D'accord ! Merci pour vos réponses !