[DB-AL] SetTile ne fonctionne pas

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
ZauChoco
Messages : 8
Inscription : 19 Sep 2018 17:04

[DB-AL] SetTile ne fonctionne pas

Message par ZauChoco » 01 Nov 2018 19:13

Bonsoir,

Je souhaite faire apparaître une tile noir dans ma TileMap, mais ça ne fonctionne pas, sans message d'erreur:
Le code:

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Tilemaps;

public class WorldGeneration : MonoBehaviour {
    public Tile t;
    // Use this for initialization
    void Start () {


        Tilemap baseLayer = transform.Find("Tilemap_base").GetComponent<Tilemap>();
        //EDIT
        t = new Tile();
        //EDIT
        t.color = Color.white;
        baseLayer.SetTile(new Vector3Int(1, 1, 0), t);


    }
	
	// Update is called once per frame
	void Update () {
        
    }
}
Image


Image


Image


Quelle est mon erreur ?

Merci d'avance pour vos réponses
Dernière édition par ZauChoco le 02 Nov 2018 13:55, édité 1 fois.

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

Re: [DB-AL] SetTile ne fonctionne pas

Message par Max » 02 Nov 2018 13:12

Bonjour,

Je ne suis pas spécialiste en 2D (mais alors pas du tout). Ton code, si placé sur le gameobject 'Grid' parait fonctionnel.
Mais, as tu créé/ajouté à partir de la fenêtre TilePalette les différents tiles, que tu dois retrouver dans le répertoire sélectionné lors du 'Create New Palette' ?
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

ZauChoco
Messages : 8
Inscription : 19 Sep 2018 17:04

Re: [DB-AL] SetTile ne fonctionne pas

Message par ZauChoco » 02 Nov 2018 13:52

Max a écrit :
02 Nov 2018 13:12
Bonjour,

Je ne suis pas spécialiste en 2D (mais alors pas du tout). Ton code, si placé sur le gameobject 'Grid' parait fonctionnel.
Mais, as tu créé/ajouté à partir de la fenêtre TilePalette les différents tiles, que tu dois retrouver dans le répertoire sélectionné lors du 'Create New Palette' ?
Merci pour ta réponse, en effet je n'ai pas crée de TilePalette, pour mes tests je m'imaginais qu'il était possible de s'en passer.
J'ai d'ailleur oublié de retranscrire le t = new Tile(); avant t.color = Color.white; qui me génère l'erreur:

NullReferenceException: Object reference not set to an instance of an object WorldGeneration.Start () (at Assets/Scripts/WorldGeneration.cs:15)

et

UnityEngine.Tilemaps.Tile must be instantiated using the ScriptableObject.CreateInstance method instead of new Tile.UnityEngine.Tilemaps.Tile:.ctor() WorldGeneration:Start() (at Assets/Scripts/WorldGeneration.cs:15)


J'y comprend qu'il faut que je fasse une instance, j'avoue ne pas comprendre comment faire, je dois faire une instance de quoi ? Et comment ? La documentation n'est pas très claire la dessus

Avatar de l’utilisateur
Liven
Messages : 268
Inscription : 30 Nov 2017 01:48

Re: [DB-AL] SetTile ne fonctionne pas

Message par Liven » 02 Nov 2018 14:02

Je ne saurais répondre à ta question, mais je peux te conseiller la lecture de deux articles si ce n'est déjà fait.

https://blogs.unity3d.com/2018/05/29/pr ... ps-part-i/
https://blogs.unity3d.com/2018/06/07/pr ... s-part-ii/

Il concerne la génération procédurale de tilemap et contiens des exemples de code (notamment comment crée des tiles du coup) qui t'aideront peut être pour ton problème.

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

Re: [DB-AL] SetTile ne fonctionne pas

Message par Max » 02 Nov 2018 15:04

Re-hello,

Les liens de Liven vont te permettre de bosser le truc, même si c'est déjà d'un certains niveau, mais cela semble plutôt complet ;).
Par contre, en restant sur la base sur laquelle tu es partie au début, tu peux essayer d'appliquer ce qui suit:

En repartant de zéro.
Tu as tes sprites dans un répertoire, genre ceci:
Image

En suite, tu ouvres TilePalette (menu Windows->2D->TilePalette). Tu fais CreateNewPalette
Image

Tu renseignes le répertoire de ton choix, au mieux tu en créés un (moi je l'ai nommé MesTiles)
Là, tu sélectionnes l’ensemble des sprites, et tu les 'drop' dans la fenêtre de TilePalette, et tu confirmes le répertoire de destination.
Là, tu devrais te retrouver avec un truc comme ça:
Image

Dans la zone Hierarchy, création d'un gameobject 'TileMap'. On arrive à ce que tu avais déjà:
Image

En suite, tu places le script que tu avais initialement écris sur le go 'Grid':

Code : Tout sélectionner

using UnityEngine;
using UnityEngine.Tilemaps;

public class WorldGeneration : MonoBehaviour {

    public Tile t;

    // Use this for initialization
    void Start()
    {
        Tilemap baseLayer = transform.Find("Tilemap").GetComponent<Tilemap>();
        t.color = Color.white;
        baseLayer.SetTile(new Vector3Int(1, 1, 0), t);
    }

}
Dans la partie inspector, tu attribues à 'T' un tile du répertoire 'MesTiles':
Image

Et tu fais Play, pour obtenir ceci:
Image

Maintenant, avec cette base à toi de creuser et de faire des tests, avec la doc et autres articles en appui.
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

Répondre

Revenir vers « Scripting »