Créer un outil de création de niveau
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :
Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé
Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie
Exemple :
[DB-RS] Mouvement perso multijoueur
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :
Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé
Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie
Exemple :
[DB-RS] Mouvement perso multijoueur
Créer un outil de création de niveau
Bonjour à tous !
Je suis sur le point de débuter un nouveau projet et au vu de la structure des niveaux qu'il y aura, j'aimerais créer un petit outil pour m'assister lors de la création des niveaux.
Mon soucis est que j'ai beau cherché ou regarder du code source d'assets similaires, je n'arrive pas à détecter les action de l'utilisateurs dans l'onglet "scene" lorsque le jeu n'est pas lancé.
C'est tout bête mais il me manque la base et je n'arrive pas à commencer. Mes niveaux ne seront constituer que de lignes noires, j'aimerais donc avoir un éditeur semblable à celui déjà intégré à Unity pour éditer les colliders (cliquer pour ajouter un point, si c'est sur une droite existante, ajouter un autre point etc..).
J'ai tenté plusieurs choses, comme créer une classe qui hérite de EditorWindow mais ça n'aboutit pas. Je n'cherche qu'à être aiguillé pour enfin pouvoir commencer !
Merci d'avance !
Je suis sur le point de débuter un nouveau projet et au vu de la structure des niveaux qu'il y aura, j'aimerais créer un petit outil pour m'assister lors de la création des niveaux.
Mon soucis est que j'ai beau cherché ou regarder du code source d'assets similaires, je n'arrive pas à détecter les action de l'utilisateurs dans l'onglet "scene" lorsque le jeu n'est pas lancé.
C'est tout bête mais il me manque la base et je n'arrive pas à commencer. Mes niveaux ne seront constituer que de lignes noires, j'aimerais donc avoir un éditeur semblable à celui déjà intégré à Unity pour éditer les colliders (cliquer pour ajouter un point, si c'est sur une droite existante, ajouter un autre point etc..).
J'ai tenté plusieurs choses, comme créer une classe qui hérite de EditorWindow mais ça n'aboutit pas. Je n'cherche qu'à être aiguillé pour enfin pouvoir commencer !
Merci d'avance !
Re: Créer un outil de création de niveau
J'imagine qu'il faut utiliser les gizmos
Développeur Nintendo & PS Vita RIP PSM. Vive moi. Vive Unity. Flappikachu Vita
Re: Créer un outil de création de niveau
Ce fût ma première idée aussi, sur le clique, tracer une droite (quelque chose de tout bête, juste pour voir si tout fonctionnait) et rien.
Exemple d'utilisation :
Exemple d'utilisation :
Code : Tout sélectionner
void OnDrawGizmos(){
if(Input.GetMouseButton(0))
Gizmos.DrawLine(Input.mousePosition, Vector3.zero);
}
- artemisart
- Messages : 1893
- Inscription : 21 Juin 2011 19:51
- Localisation : Centre
- Contact :
Re: Créer un outil de création de niveau
Si tu veux créer des trucs oriente toi plutôt vers l'api editor (namespace UnityEditor).
Matis tu veux faire quoi en fait ? créer du mesh ? placer des objets type labyrinthe ?
Matis tu veux faire quoi en fait ? créer du mesh ? placer des objets type labyrinthe ?
Re: Créer un outil de création de niveau
Dés fois j'bug, dés fois j'bug pas.
Re: Créer un outil de création de niveau
C'est la première fois que j’expérimente ce genre de choses, donc peut être mon approche n'est-elle pas très correcte.
Mes niveaux ne seront constitués que de quelques lignes noires. Je comptais donc les tracer avec l'outil en question et ça aurait automatiquement généré mes lignes (en 2D) à partir d'une texture de 1x1 toute noire.
Mes niveaux ne seront constitués que de quelques lignes noires. Je comptais donc les tracer avec l'outil en question et ça aurait automatiquement généré mes lignes (en 2D) à partir d'une texture de 1x1 toute noire.
Re: Créer un outil de création de niveau
ça ne fonctionne pas, car tu utilises "Input" qui n'est pas disppnible dans l'éditeur, en faisant ceci :Armelias a écrit :Ce fût ma première idée aussi, sur le clique, tracer une droite (quelque chose de tout bête, juste pour voir si tout fonctionnait) et rien.
Code : Tout sélectionner
void OnDrawGizmos()
{
Gizmos.DrawLine(Vector3.one, Vector3.zero);
Gizmos.DrawLine(Vector3.one, new Vector3(1, 0));
}
Développeur Nintendo & PS Vita RIP PSM. Vive moi. Vive Unity. Flappikachu Vita
Re: Créer un outil de création de niveau
Alors ça avance au final (merci beaucoup à vous !).
J'suis tombé sur ce lien qui s’avère très utile : http://code.tutsplus.com/tutorials/how- ... tive-10047 (en esperant qu'il serve à ceux qui liront ce post).
EDIT :
Au fil des heures, j'me demande si la façon dont je fait ça est "effiface". Je rappelle que je genere plein de petit carré pour tracé une ligne. Chacun d'enre eux un a collider et aura un script qui écoute si le joueur le touche ou non. Je commence à croire que ça va être très gourmand à terme (pour pas grand chose au final).
J'aimerais vos avis/conseils sur ce système (ou vos propositions pour un autre système).
J'suis en train de me dire qu'au lieu de ça, je pourrais faire un petit prefab (une droite de 2px de haut et par exemple 150px de large, noire) et instancié ce prefab plutot que pleins de carrés. Il me suffirait de la resizer sur X et de l'orienter pour avoir la bonne pente. J'aurais ainsi beaucoup moins d'objets.
Le soucis de cette méthode c'est qu'elle ne marche que si je veux tracer des droites de couleurs unies. Si mon prefab a quelques décorations, réduire se taille va déformer l'aspect. Or j'aimerais faire un truc un peu générique tout d'même.
Je n'sais pas si j'expose suffisamment clairement ma problématique, il est tard. Désolé !
Pour vous donner une idée de ce que j'ai actuellement, voici ma méthode Create() qui permet de creer plein de cubes (elle n'est pas du tout terminée mais vous voyez l'idée !)
J'suis tombé sur ce lien qui s’avère très utile : http://code.tutsplus.com/tutorials/how- ... tive-10047 (en esperant qu'il serve à ceux qui liront ce post).
EDIT :
Au fil des heures, j'me demande si la façon dont je fait ça est "effiface". Je rappelle que je genere plein de petit carré pour tracé une ligne. Chacun d'enre eux un a collider et aura un script qui écoute si le joueur le touche ou non. Je commence à croire que ça va être très gourmand à terme (pour pas grand chose au final).
J'aimerais vos avis/conseils sur ce système (ou vos propositions pour un autre système).
J'suis en train de me dire qu'au lieu de ça, je pourrais faire un petit prefab (une droite de 2px de haut et par exemple 150px de large, noire) et instancié ce prefab plutot que pleins de carrés. Il me suffirait de la resizer sur X et de l'orienter pour avoir la bonne pente. J'aurais ainsi beaucoup moins d'objets.
Le soucis de cette méthode c'est qu'elle ne marche que si je veux tracer des droites de couleurs unies. Si mon prefab a quelques décorations, réduire se taille va déformer l'aspect. Or j'aimerais faire un truc un peu générique tout d'même.
Je n'sais pas si j'expose suffisamment clairement ma problématique, il est tard. Désolé !
Pour vous donner une idée de ce que j'ai actuellement, voici ma méthode Create() qui permet de creer plein de cubes (elle n'est pas du tout terminée mais vous voyez l'idée !)
Code : Tout sélectionner
public void Create(){
Vector2[] pts = points.ToArray ();
Vector2 currentNode;
Vector2 nextNode;
for (int i = 0, length = pts.Length-1; i < length; i++) {
currentNode = pts[i];
nextNode = pts[i+1];
//first in line
GameObject obj = Instantiate (prefab, currentNode, prefab.transform.rotation) as GameObject;
obj.transform.parent = gameObject.transform;
//line
float stepX = prefab.renderer.bounds.size.x / (nextNode.x - currentNode.x);
float stepY = prefab.renderer.bounds.size.y / (nextNode.y - currentNode.y);
float x = currentNode.x, y = currentNode.y;
bool conditionX = (stepX > 0) ? x < nextNode.x : x > nextNode.x;
bool conditionY = (stepY > 0) ? y < nextNode.y : x > nextNode.y;
while(conditionX && conditionY){
x += stepX;
y += stepY;
obj = Instantiate (
prefab,
new Vector2(x, y),
prefab.transform.rotation
) as GameObject;
obj.transform.parent = gameObject.transform;
conditionX = (stepX > 0) ? x < nextNode.x : x > nextNode.x;
conditionY = (stepY > 0) ? y < nextNode.y : x > nextNode.y;
}
Debug.Log(stepX);
Debug.Log(stepY);
//last in line
obj = Instantiate (prefab, nextNode, prefab.transform.rotation) as GameObject;
obj.transform.parent = gameObject.transform;
}
}