2
votes

Référence classe de script à GameObject dans Unity

J'ai une classe pour un bâtiment et je souhaite la connecter à un objet de jeu d'un bâtiment. Dans la classe, j'ai les propriétés: nom, niveau, informations. J'ai un atout des bâtiments (des choses comme la ferme, le château, le port). J'ai une classe Game où je crée les objets. La classe de jeu est utilisée pour stocker les objets, afin qu'ils puissent être appelés tout au long du jeu et que le jeu puisse être sauvegardé et chargé comme celui-ci.

Je ne trouve pas vraiment ce que je veux par Google, je trouve aussi il est difficile de décrire ce que je veux dire.

La classe Building:

public static Game current;

public BuildingObject church;
public BuildingObject castle;
public BuildingObject fort;
public BuildingObject farm;
public BuildingObject pub;
public BuildingObject houses;

public PlayerObject player;

public StoryObject story;

public Game()
{
    church = new BuildingObject("Informatie over de kerk");
    castle = new BuildingObject("Informatie over het kasteel");
    fort = new BuildingObject("Informatie over het fort");
    farm = new BuildingObject("Informatie over de boerderij");
    pub = new BuildingObject("Informatie over de kroeg");
    houses = new BuildingObject("Informatie over de huizen");

    player = new PlayerObject();

    story = new StoryObject();
}

C'est la classe Game où je crée les objets. Je veux que les objets créés soient référencés dans un GameObject, afin que je puisse appeler les propriétés de certains gameObjects en les utilisant dans d'autres fichiers et en gardant la progression du niveau de certains gameObject.

[System.Serializable]
public class BuildingObject
{
    public string name;
    public int level;
    public string information;

    public BuildingObject(string information)
    {
        this.name = "";
        this.level = 0;
        this.information = information;
    }
}

Je veux connecter / référencer les objets créés à l'intérieur de l'objet Game selon GameObjects. Si j'ai créé un GameObject château dans la hiérarchie, je veux les propriétés de l'objet château dans le GameObject. S'il existe un autre moyen meilleur ou plus simple, faites-le moi savoir, je suis nouveau dans l'unité.


0 commentaires

3 Réponses :


3
votes

Utilisez des Prefabs

Vous pouvez stocker des modèles de gameObjects à créer dans votre hiérarchie. Vous devrez joindre votre script en tant que Composant , qui peut être référencé par un appel à GameObject.GetComponent()


1 commentaires

Merci pour le lien pour l'éclaircir davantage. Je le comprends maintenant.



0
votes

Pour autant que je sache, vous devez hériter de votre objet de construction de MonoBehavior:

BuildingObject newBuilding = Instantiate(buildingPrefab);

Ensuite, créez un objet de jeu vide (préfabriqué) et ajoutez-y ce composant BuildingObject. Ensuite, vous pouvez ajouter autant de bâtiments (ces préfabriqués avec le composant BuildingObject) à la scène et configurer leurs paramètres.

Si je comprends bien, la classe Game est le composant de certains GameObject de votre scène. Ainsi, vous pouvez faire glisser et déposer ces bâtiments (GameObjects dans la scène) vers vos variables (références à BuildingObject) dans la classe Game au lieu de créer ces BuildingObjects dans le code.

Si vous devez créer dynamiquement de nouveaux bâtiments dans la classe Game (ou toute autre), vous devez créer la référence au préfabriqué BuildingObject dans la classe (et faites glisser et déposez votre préfabriqué bâtiment vers cette référence dans la classe Game):

public BuildingObject buildingPrefab;


1 commentaires

Merci, c'est ce dont j'avais besoin.



0
votes

Vous devez utiliser ScriptableObjects au lieu de préfabriqués.

Les objets scriptables sont des actifs qui sont sérialisés par Unity, peuvent être modifiés en mode lecture et qui sont déployés dans les versions.

Ils offrent tous les avantages d'un MonoBehaviour, mais ils n'ont pas de flux de mise à jour (Update, FixedUpdate, LateUpdate et toutes les méthodes GamePlay en direct) et n'ont pas besoin d'être instanciés en tant que GameObject dans la scène.

cf: https://docs.unity3d.com/Manual/class-ScriptableObject .html


0 commentaires