CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Unity - CharacterStats

_Pytchoun
_Pytchoun
Niveau 67
10 août 2020 à 20:28:37

Salut
C'est quoi le meilleur moyen pour gérer les stats du personange ?
Ceux des ennemies seraient fixe
Mais ceux du joueur évolue en fonction de l'équipement du joueur
Si j'équipe une armure je dois par exemple ajouter + 10 en intelligence au personnage.
Mettre chaque variable sur le personne a la main semble peu structuré.

Le_Tryall
Le_Tryall
Niveau 8
10 août 2020 à 21:12:26

Tu peux utiliser un tableau avec des clefs/valeurs (il me semble que ça s'appelle un dictionnaire en C#). Tu as ensuite une fonction qui fait la somme de touts les ajouts pour donner la valeur totale, le tableau donnerait quelque chose du genre :
{
"Base" : "+10"
"Items" : +25"
"Bonus" : "+5%"
"Malus" : "-3"
}

La fonction parse donc les valeurs pour savoir si il faut ajouter, retirer ou prendre un pourcentage, puis elle retourne la valeur finale que tu peux utiliser pour le reste de t'es calcules.

ThetaTauTau
ThetaTauTau
Niveau 8
10 août 2020 à 23:08:54

Il faut créer une classe pour le modificateur, et une classe "stat".
Fait tes recherches il existe des tutos.

@Le_Tryall : utiliser un dictionnaire pour ça me semble une mauvaise idée, surtout si c'est pour y stocker des strings à parser.

Scyllis
Scyllis
Niveau 34
10 août 2020 à 23:37:08

Un tuto qui m'a bien servi, perso : https://youtu.be/HMIeqhXU-6M
Ou ici, la même chose dans un autre tuto : https://youtu.be/aPXvoWVabPY

Je sais plus s'ils utilisent Bolt dans les 2 vidéos par contre, je pense pas que tu verras comment gérer le script pour la modification des stats, je fais tout avec Bolt en-dehors du script du tuto que j'ai copié pour le modifier pour mon jeu.

_Pytchoun
_Pytchoun
Niveau 67
13 août 2020 à 12:04:41

Le 10 août 2020 à 23:37:08 Scyllis a écrit :
Un tuto qui m'a bien servi, perso : https://youtu.be/HMIeqhXU-6M
Ou ici, la même chose dans un autre tuto : https://youtu.be/aPXvoWVabPY

Je sais plus s'ils utilisent Bolt dans les 2 vidéos par contre, je pense pas que tu verras comment gérer le script pour la modification des stats, je fais tout avec Bolt en-dehors du script du tuto que j'ai copié pour le modifier pour mon jeu.

J'utilise Bolt mais les SO se font en C#.
J'ai déjà vu OWS mais ca vidéo est juste la base du fonctionnement d'un SO avec Bolt ca aide pas trop pour faire un truc aussi développé que les Stats.
Par pu hasard pourrait tu partagé ta réalisation ?

Message édité le 13 août 2020 à 12:05:42 par _Pytchoun
Scyllis
Scyllis
Niveau 34
13 août 2020 à 17:14:42

¨Dans les tutos que je t'ai mis j'ai trouvé comment faire les stats, après peut-être que t'as besoin de faire un truc que j'ai pas fait ?
J'te partage/explique ça quand j'ai un peu de temps, je re ce soir probablement.

Yep c'est en C# mais je disais ça par rapport au fait que son utilisation était dans Bolt et pas utilisé dans un script.

boucif
boucif
Niveau 24
13 août 2020 à 21:28:34

Pourquoi ne pas crée une classe de base ou une interface Istat qui serait implémenté par tes items, ensuite il suffirait de parcourir tes items et récupérer les infos grace à cette interface.

du genre
public interface IStat { int Intelligence { get; set; } int Force { get; set; } int Endurance { get; set; } int Dexterite { get; set; } } public class Armure : IStat { public int Intelligence { get; set; } public int Force { get; set; } public int Endurance { get; set; } public int Dexterite { get; set; } public string Nom { get; set; } public int Rang { get; set; } } public class Personnage : IStat { public int Intelligence { get; set; } public int Force { get; set; } public int Endurance { get; set; } public int Dexterite { get; set; } public Armure Armure { get; set; } public Armure Casque { get; set; } public Armure Gants { get; set; } public Personnage() { Intelligence = 10; Force = 10; Endurance = 10; Dexterite = 10; Armure = new Armure(); Armure.Nom = "armure malefique"; Armure.Rang = 1; Armure.Endurance = 10; Casque = new Armure(); Casque.Nom = "casque malefique"; Casque.Rang = 1; Casque.Force = 10; Casque.Dexterite = 5; CalculerStat(Casque, Armure, Gants); } private void CalculerStat(params IStat[] equipements) { if (equipements != null) { foreach (var item in equipements) { if (item != null) { this.Dexterite += item.Dexterite; this.Force += item.Force; this.Endurance += item.Endurance; this.Intelligence += item.Intelligence; } } } } }

C'est juste une façon de l'écrire à toi de trouver ce qui te convient le mieux, tu peux l'écrire de 1000 façons possible

Scyllis
Scyllis
Niveau 34
13 août 2020 à 21:41:37

Re, je sais pas ce que t'as pas compris précisément, donc je vais résumer le fonctionnement :
T'as un script que tu vas mettre sur ton player ou tout GameObject sur lequel tu veux mettre tes stats que j'ai appelé StatsHandler dans lequel tu vas mettre les stats de l'objet, et qui ressemblera à ça :

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

public class StatsHandler : MonoBehaviour
{
    [SerializeField]
    private CreatureStats stats; // Stats dans l'inspector

    private void OnEnable()
    {
        if(stats != null)
        {
            this.gameObject.name = stats._name; // Renommer l'objet dans la hiérarchie
            this.gameObject.GetComponent<NavMeshAgent>().speed = stats.speed;
            this.gameObject.transform.localScale = new Vector3(1f, stats.height, 1f);
            this.gameObject.GetComponentInChildren<MeshRenderer>().material = stats.color;

        }
    }
}

Le SerializeField sert à faire apparaître un nouveau champ dans l'objet pour pouvoir mettre les stats dedans.
Juste en-dessous de SerializeField :
CreatureStats c'est le nom de mon script pour les stats.
stats c'est pour nommer la nouvelle ligne "stats" dans le nouveau champs.

Plus bas, si les champs stats ne sont pas vides, la première ligne this.gameObject.name = stats._name; c'est pour renommer le GameObject avec ce qu'on aura mis dans le champs "_name",
la seconde pour changer la vitesse avec le contenu du champs speed des stats,
ensuite pour la hauteur, ici ça change que le scale en Y,
et la dernière ligne pour attribuer la couleur

Ici c'est pour un jeu d'élevage.

Ensuite t'as le script qui te sert à faire tes stats :

using UnityEngine;


[CreateAssetMenu(fileName = "Creature Stats",menuName = "Creature Stat")]
public class CreatureStats : ScriptableObject
{
    public string _name; //Underscore pour Bolt
    public string stable;
    public string breeder;

    public bool sex;
    public Material color;
    public int fertility;
    public int age;
    public float consanguinity;
    public bool savage;
    public bool pregnant;
    public float pregnancy;
    
    public ScriptableObject mother;
    public ScriptableObject father;

    // Stats santé
    public float health;
    public float humidity;

    // Stats "réput" + humeur
    public float opinion;
    public float mood;

    // Stats utilité
    public string temperament;
    public float speed;
    public float height;
    public float agility;

    // Gènes
    public string geneRobe1;
    public string geneRobe2;
    public Color geneYeux1;
    public Color geneYeux2;
    public string genePoil1;
    public string genePoil2;
}
[CreateAssetMenu(fileName = "Creature Stats",menuName = "Creature Stat")]

Ça c'est pour créer une nouvelle ligne quand tu cliques droit pour ajouter quelque chose dans tes assets, c'est ce qui va ajouter de nouvelles stats attribuables à tes GameObjects.

Après t'as la ligne pour en faire un ScriptableObject.

Puis un champs _name, apparemment l'underscore est important pour pas prendre un autre champs "name" qui existe par défaut pour je ne sais plus quoi.

Puis toutes les lignes dont t'as besoin pour tes stats (mon public ScriptableObject mother; + la ligne en-dessous c'est un essai, aucune idée de si ça marche comme ça).

Ensuite pour ajouter tes stats dans Bolt tu vas sur Unity, dans Tools > Bolt > Setup Wizard, y a une fenêtre qui s'ouvre. Tu fais next, choisis ce que tu veux, tu vas en bas, tu fais next, tu re-vas en bas puis tu cliques sur le + si pas déjà fait et tu ajoutes ton script de stats, puis tu fais Generate.
Maintenant dans Bolt tu peux connecter les champs de tes stats.

Tu vas dans ton dossier scripts, tu clic droit > Create > tu cliques sur le nouveau champs que t'as ajouté grâce au script des stats, pour moi c'est "Creature Stat", ça créée de nouvelles stats avec tous les champs que tu as mis.
Ensuite tu vas sur ton GameObject du perso auquel tu veux mettre les stats, tu lui ajoute le script Stats Handler.
Dans le champs vide dans le script tu glisses les stats du perso que tu viens de créer.
Dans ton GameObject de ton perso tu créée une variable (variable object donc), tu la nommes "Stats", tu la mets de type "Creature Stats" (pour moi, pour toi c'est le nom de ton script de stats, celui que t'as mis dans Bolt). Dans Value tu glisses là aussi les stats de ton perso.

Maintenant pour récupérer tes stats il te suffit de faire un Get Variable Object. Soit tu laisses sur Self si le script est dans l'objet concerné, soit à la place de self tu mets ton objet.
En sortie tu mets ce dont t'as besoin, en gros dans la recherche de bolt tu vas mettre le nom du script que tu as chargé dans Bolt, ici Creature Stats, et il te proposera expose Creature Stats si t'as besoin de tous tes champs, et les champs un par un (Get Age, Set Age...).
Tu mets Get si t'as besoin de récupérer le contenu, set si tu veux modifier le contenu.

En gros t'as la variable que t'appelle pour récupérer les stats, puis tu lui dis de quelle partie tu as besoin.
Par exemple ici, en haut à gauche je récupère la variable, puis récupère la partie Fertility parce que je veux que mes animaux deviennent stériles au bout d'un certain nombre de repros. Donc je vérifie que la stat Fertility est supérieure à 0.
Sur la droite je récupère Pregnant qui est un bool pour savoir si elle est déjà enceinte ou pas.
https://image.noelshack.com/fichiers/2020/33/4/1597347504-screen.jpg

Bref, j'espère que c'était clair, je sais pas si ça répond à ta question ?

_Pytchoun
_Pytchoun
Niveau 67
14 août 2020 à 19:42:14

Merci de ton message.

Du coup avec ca tu peux créer des stats différentes pour tous tes persos.
Et après pour mon personnage je peux modifiers les stats quand j'équipe un item.
Ca va modifier les stats sur mon perso ou le scriptable object ?.

Scyllis
Scyllis
Niveau 34
14 août 2020 à 21:05:32

J'ai pas encore essayé de faire un système de stuff, je n'en ai pas eu besoin pour l'instant, donc pour les détails je ne sais pas encore, faudra fouiller un peu.
Mais en ayant compris ce que je t'ai expliqué et en cherchant un peu, y a pas de raison pour que t'y arrives pas, c'est une addition entre les stats du stuff et les stats de base, quoi. Après je vais pas t'expliquer étape par étape avec ce que je pense, parce que si ça se trouve y aura des trucs auxquels j'aurais pas pensé, donc faut tester.

Bref, vois si t'as compris ce que j'ai expliqué plus haut, fais tes stats, puis vois comment tu peux faire ça proprement pour le stuff, et si ça marche pas tu cherches pourquoi. Tu apprendras pleins de choses en cherchant, largement plus que si tu copies une solution toute faite (surtout sans la comprendre).

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment