[RESOLU] Zone de jeu + Collision

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Malavia
Messages : 11
Inscription : 09 Juil 2019 17:06

[RESOLU] Zone de jeu + Collision

Message par Malavia » 13 Nov 2019 17:09

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.
Pièces jointes
Capture.GIF
Capture.GIF (35.86 Kio) Consulté 300 fois
Dernière édition par Malavia le 14 Nov 2019 16:55, édité 1 fois.

EmileF
Messages : 428
Inscription : 18 Mars 2017 19:39

Re: Zone de jeu + Collision

Message par EmileF » 13 Nov 2019 17:59

Salut,

Une petite question, pourquoi crées-tu tes objets par script au lieu de créer ta scène dans l'éditeur ?
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

Malavia
Messages : 11
Inscription : 09 Juil 2019 17:06

Re: Zone de jeu + Collision

Message par Malavia » 13 Nov 2019 21:15

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.

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

Re: Zone de jeu + Collision

Message par Max » 13 Nov 2019 22:31

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

Malavia
Messages : 11
Inscription : 09 Juil 2019 17:06

Re: Zone de jeu + Collision

Message par Malavia » 14 Nov 2019 12:14

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.

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

Re: Zone de jeu + Collision

Message par Max » 14 Nov 2019 14:12

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

EmileF
Messages : 428
Inscription : 18 Mars 2017 19:39

Re: Zone de jeu + Collision

Message par EmileF » 14 Nov 2019 14:44

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
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

Malavia
Messages : 11
Inscription : 09 Juil 2019 17:06

Re: Zone de jeu + Collision

Message par Malavia » 14 Nov 2019 16:54

D'accord ! Merci pour vos réponses !

Répondre

Revenir vers « Scripting Javascript, C# et Boo »