CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • Black Friday
  • RetourHigh-Tech
    • Actus JVTECH
    • Bons plans
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • 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
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet : J'aide les gens dans Unity

DébutPage précedente
«1  ... 170171172173174175176177178179180
Page suivanteFin
Zaneo Zaneo
MP
Niveau 2
07 juin 2021 à 08:51:15

Photon reste quand même le simple et le plus ouvert que Mirror. Ce qui est bien en plus avec Photon, c'est que tu peux incorporer beaucoup plus facilement tes autres codes ou mécaniques de jeu car la synchronisation entre host et client est beaucoup plus facile à mettre en place

Seyte33 Seyte33
MP
Niveau 8
07 juin 2021 à 21:07:44

J'ai aucune notion en networking et encore moins dans Unity, tu peux m'expliquer les différences entre les différentes manières de faire? (Et si vous avez un tutoriel a recommander je suis preneur)

J'ai aussi vu que Unity 2021.1 avait des options pour faire du multi direct dans le moteur, ça vaut quoi

Après il y a pas de LTS pour Unity 2021 je sais pas si c'est très important...

Zaneo Zaneo
MP
Niveau 2
07 juin 2021 à 21:20:31

Donc si je comprends bien, tu souhaiterais te lancer dans un système multijoueur sur un moteur de jeu que tu ne maîtrise pas ?
Je ne veux pas te faire peur mais ça va être compliqué

Seyte33 Seyte33
MP
Niveau 8
07 juin 2021 à 21:52:25

Je maîtrise le moteur (du moins a un niveau débutant) mais je voudrais toucher un peu a tout, ne serais-ce que faire un pong multi pour avoir des connaissances minimales.

Zaneo Zaneo
MP
Niveau 2
08 juin 2021 à 09:23:37

Je te conseille de commencer par t'intéresser comment créer un FPS ou autre chose parce que il faut quand même bien maîtriser unity pour s'attaquer au multi

loic2000 loic2000
MP
Niveau 10
08 juin 2021 à 16:02:06

Bonjour :)

Y'en a-t-il qui connaissent bien le logiciel Ink ? https://mammouthnumerique.com/2019/09/18/ink-un-logiciel-decriture-interacti/

J'envisage de l'utiliser pour un projet sur Unity mais je ne trouve pas tant d'infos que ça dessus. J'aimerais notamment savoir si le "jonglage" entre Ink et Unity est vraiment aussi facile qu'on le dit, et si Ink est le logiciel le plus adapté pour mettre en scène des dialogues (sans qu'il n'y ait de choix à faire) entre des personnages ainsi que des phrases qui apparaissent quand on examine un objet par exemple. Si vous pensez qu'un autre logiciel est plus adapté pour cela (et qui peut se combiner avec Unity) , n'hésitez pas à en parler. Et si vous avez de bons tutos pour l'utilisation de Ink avec Unity, je suis prenant. Merci d'avance :)

ThetaTauTau ThetaTauTau
MP
Niveau 8
08 juin 2021 à 21:00:09

Je ne connaissait pas Ink, mais ça a l'air intéressant. Il y a plein de langages dans le même style pour faire des fictions interactives mais à ma connaissance c'est le seul avec un interpréteur pour Unity.

Après c'est conçu pour de la fiction interactive, donc des gros dialogues avec pleins de textes. Si c'est juste pour afficher quelques lignes de textes avec deux trois options quand on intéragit avec un PNJ ou un objet je ne sais pas si c'est le plus adapté. Il existe plusieurs plugins unity qui font ça, dont plusieurs qui vienne avec une interface déjà faite (ce qui ne semble pas être le cas avec Ink).

Ibadez38 Ibadez38
MP
Niveau 46
03 septembre 2021 à 02:11:29

Bonjour,

Je suis un peu perdu et je ne sais pas comment procéder. J'essaye de faire un jeu de combat avec des cartes.
Les cartes sont par type de classe (guerrier, voleur, mage etc...).

Je voudrais faire un systeme qui permette de mettre aléatoire x cartes guerrier dans le deck du joueur puis x carte voleur dans le deck du joueur puis x carte mage dans le deck du joueur etc...

Le problème c'est que je n'arrive pas car je ne sais pas vraiment comment accéder à l'index des cartes de classe car les classe (guerrier voleur etc...) elles même sont dans un tableau.

Je vous montre ca en image pour être plus claire.

Voici la classe ClassArray
https://www.noelshack.com/2021-35-5-1630627152-1.png

qui avec la classe ClassCards en [Serializable] me permet d'avoir un tableau dans un tableau comme ceci:
https://www.noelshack.com/2021-35-5-1630627293-2.png

Maintenant dans la class PlayerDeck je veux accéder au tableau multidimensionnel pour faire un triage aléatoire des cartes des différentes classes (guerrier voleur etc..).

Voici le script PlayerDeck:
https://www.noelshack.com/2021-35-5-1630627565-3.png

Alors oui les scripts ont du rouges justement je cherche comment accéder par exemple à l'index [0,2] de la class ClassArray depuis le script PlayerDeck.

Je pense qu'il faut un algorithme de type boucle foreach dans la class ClassArray qui puisse stocker tous les index et leur gameObject de chaque classe(guerrier voleur etc..) pour que je puisse y accéder depuis la class PlayerDeck. Mais je ne sais pas vraiment comment procéder.

Si vous avez une solution même autre je suis preneur.

Merci d'avance pour vos réponse ne espérant avoir été assez clair..

Message édité le 03 septembre 2021 à 02:13:24 par Ibadez38
Ibadez38 Ibadez38
MP
Niveau 46
03 septembre 2021 à 03:20:35

Je pense avoir trouver la solution

ClassArray: https://www.noelshack.com/2021-35-5-1630631550-1.png

Qui donne ce tableau: https://www.noelshack.com/2021-35-5-1630631601-2.png

Et comment accéder aux cartes de classe(guerrier, voleur etc..) depuis la classe PlayerDeck: https://www.noelshack.com/2021-35-5-1630631866-3.png

Il y a deux variable classCard(s) une sans "s" et une avec. Je vais modifier le nom pour moins d’ambiguïté.
Me reste plus qu'à faire une loop en y intégrant des nombres aléatoires.

Je partage la solution au cas ou ca en intéresse certains.

ThetaTauTau ThetaTauTau
MP
Niveau 8
03 septembre 2021 à 09:53:17

Utilise des ScripableObjects pour stocker ce genre de données.

Perso j'aurais renseigné la classe dans un ScriptableObject qui contient les autres données de la carte (nom, image, effets etc.).

Ibadez38 Ibadez38
MP
Niveau 46
03 septembre 2021 à 16:24:14

En fait la ClasseArray va être unique, il n'y aura qu'une seule instance de cette classe. Elle me permet juste de stocker toutes les cartes de chaque classe (guerrier voleur etc) pour pouvoir ensuite faire des tirages aléatoires de ces cartes. Est-ce judicieux de faire un ScriptableObject pour une seule instance?

Par contre effectivement j'avais fait un ScriptableObject CardData.
https://www.noelshack.com/2021-35-5-1630679026-1.png

Edit: Quel genre de question faut il se poser pour savoir si on utilise des ScriptableObject?

Message édité le 03 septembre 2021 à 16:28:53 par Ibadez38
ThetaTauTau ThetaTauTau
MP
Niveau 8
03 septembre 2021 à 17:49:15

Il faut éviter de stocker une même information à deux endroits. Là tu as déjà la classe des cartes dans ton CardData.

Il faut choisir entre stocker la classe dans CardData ou les cartes dans ClassData (d'ailleurs tu semble utiliser une enum pour les classes, mais utiliser des ScriptableObject serait sans doute mieux).

Stocker dans ClassData permet de dupliquer une classe pour faire des tests avec des listes de cartes différentes. Stocker dans CardData permet d'être sur qu'une carte n'a qu'une seule classe.

Ensuite comme tu as besoin de pouvoir à la fois connaitre la classe d'une carte et la liste de toutes les cartes d'une classe, il sera sans doute nécessaire de dupliquer l'information pendant le runtime. Par exemple si la classe est stockée dans CardData, faire un truc du genre :


public class CardData : ScriptableObject {
    [SerializeField] private ClassData _Class;
    public ClassData Class => _Class;
    
    public void Awake(){
        _Class.Cards.Add(this);
    }
}

public class ClassData : ScriptableObject {
	[system.nonserialized] public List<CardData> Cards = new List<CardData>();
}

A noter que les ScriptableObject pas référencés dans la scène ne seront pas chargés, il faut donc les mettre dans un dossier Resources et les charger via un script (lors du démarage du jeu).


public class CardLoader {
	public void Start(){
		textures = Resources.LoadAll("", typeof(CardData));
	}
}
Ibadez38 Ibadez38
MP
Niveau 46
03 septembre 2021 à 20:35:30

Je lis et relis pour essayer de bien comprendre. J'ai appris via internet et je vois des termes un peu inconnu. Du coup j'ai un peu de mal à comprendre.
public ClassData Class => _Class;
Que veut dire cette ligne, j'ai déjà vue plusieurs fois ce symbole => mais je n'ai jamais vraiment compris ce qu'il signifiais.

Du coup j'ai un peu de mal à comprendre cette ligne aussi:
_Class.Cards.Add(this)

Et première fois que je rencontre ceci:
[system.nonserialized]

Je ne comprend pas trop. Je vais aller faire des recherches en attendant ta réponse. En tout cas merci pour ton aide.

ThetaTauTau ThetaTauTau
MP
Niveau 8
03 septembre 2021 à 21:14:41
public ClassData Class => _Class;

C'est une propriété en lecture seule, c'est exactement la même chose que ça:

public ClassData Class{
   get{
       return _Class;
   }
}

[system.nonserialized] Ca empêche qu'un attribut soit sérialisé. C'est l'inverse de [SerializeField]. L'idée étant que la liste des cartes de la classe soit crée automatiquement au lancement du jeu, et non à la main dans l'éditeur ce qui serrait à la fois une perte de temps et un risque d'erreur vu qu'on a déjà cette info dans CardData.

Ibadez38 Ibadez38
MP
Niveau 46
03 septembre 2021 à 22:22:31

Ok, merci pour les précisions.

Du coup j'en profite mais j'avais lu qu'il fallait toujours mettre les variables en privée pour "l'encapsulation" et de faire des accesseurs si on avait besoin d'accéder à la propriété.

Par exemple cette liste est publique.
public class ClassData : ScriptableObject { [system.nonserialized] public List<CardData> Cards = new List<CardData>(); }

Pourquoi ne pas la mettre en privée? Faire quelque chose comme ca:

public class ClassData : ScriptableObject
	{
		private List<CardData> cards = new List<CardData>();
		public List<CardData> Cards => cards;
	}

Est-ce tiré par les cheveux que de tout vouloir mettre en privé?

Message édité le 03 septembre 2021 à 22:25:35 par Ibadez38
ThetaTauTau ThetaTauTau
MP
Niveau 8
03 septembre 2021 à 23:01:01

Avec ton code on peut toujours modifier la liste, donc ça encapsule pas grand chose. La seule chose que ça empêche c'est de déclarer une nouvelle liste, mais ça on peut le faire de façon plus simple comme ça :

public class ClassData : ScriptableObject
    {
        public readonly List<CardData> Cards = new List<CardData>();
    }

Pas besoin de [system.nonserialized] car les attributs readonly ne sont pas sérialisés de toute façon.

Si tu veux vraiment pousser l'encapsulation à fond, il ne faut pas exposer "Cards" du tout en public, et faire un truc du genre:

public class ClassData : ScriptableObject
{
    private List<CardData> Cards = new List<CardData>();
    public void AddClassCard(CardData Card){ Cards.Add(Card); } 
}

Et si tu veux vraiment que le code soit 100% propre, il faudrait utiliser HashSet à la place de List, histoire qu'on ne puisse pas mettre plusieurs fois la même carte.

TilkSama TilkSama
MP
Niveau 2
04 septembre 2021 à 00:30:03

Bonsoir, veuillez excuser mon arrivée soudaine dans cette discussion, je suis sur un projet en VR sur Unity, le dev qui m'accompagner à finalement jeter l'éponge juste car "plus envie", si quelqu'un est chaud à me rejoindre dans cette aventure je l'accueille à bras ouverts, sinon mon projet est juste mort, merci d'avance au quelque reponce, j'espère trouver quelqu'un ici :-)

Ibadez38 Ibadez38
MP
Niveau 46
06 septembre 2021 à 02:29:02

Bonjour,

Quelle est la bonne pratique à faire?

private void Update()
	{
       if (!playerDeck.DeckIsReady) return;
	   CheckListSelected();
	} 

ou inclure le if dans la fonction? Pour moi les deux cas sont la même chose mais je pense qu'il y a surement une subtilité que je ne connais pas.

Message édité le 06 septembre 2021 à 02:30:15 par Ibadez38
IndepGameDev IndepGameDev
MP
Niveau 10
06 septembre 2021 à 10:31:20

Le 06 septembre 2021 à 02:29:02 :
Bonjour,

Quelle est la bonne pratique à faire?

private void Update()
	{
       if (!playerDeck.DeckIsReady) return;
	   CheckListSelected();
	} 

ou inclure le if dans la fonction? Pour moi les deux cas sont la même chose mais je pense qu'il y a surement une subtilité que je ne connais pas.

Comment ça ? Tu veux savoir si il y a une différence entre

private void Update()
  {
       if (!playerDeck.DeckIsReady) return;
     CheckListSelected();
  } 

et ça ?

private void Update()
  {
       if (playerDeck.DeckIsReady) 
           CheckListSelected();
  } 

Si c'est la question, pour des raisons de lisibilité je privilégie la première version (par contre en général on retourne à la ligne après le if pour le return), mais les deux sont ok.

Ibadez38 Ibadez38
MP
Niveau 46
06 septembre 2021 à 13:36:00

Non justement, je veux savoir si la bonne pratique c'est de mettre le if dans la fonction ou à l’extérieur.

Si le if est dans la fonction, l'update rentre dedans, elle voit le return et sort directement de la fonction.
Si le if est à l’extérieur de la fonction l'update ne rentre pas dans la fonction.

Mais en lisant ma phrase juste au dessus, je pense que le if à l'exterieur de la fonction est le bon choix, je pense...

En fait les deux cas fonctionnent, c'est pour ca que je me posait la question.

DébutPage précedente
Page suivanteFin
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?
La vidéo du moment