CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • RetourHigh-Tech
    • Actus JVTECH
    • Bons plans
    • 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
ThetaTauTau ThetaTauTau
MP
Niveau 8
06 septembre 2021 à 14:54:53

En général il vaut mieux faire des méthodes les plus simples possibles, donc avec la condition à l'extérieur.

Cela dit si la méthode ne fonctionne pas ou n'a pas de sens si la condition n'est pas remplie, mettre la condition à l'intérieur est plus logique, surtout si la méthode peut être appelée ailleurs (si elle est public ou appelée à plusieurs endroits dans la classe). Dans ce cas selon la fonction ça peut être pas mal aussi de l'indiquer dans le nom de la méthode (TrySelectCheckList par exemple) et/ou de renvoyer un booléen pour savoir si l'action a été effectuée ou pas.

Sinon dans ton exemple, j'ai l'impression que tu utilise update pour faire quelques chose après quelque chose d'autre se soit produit, ce qui est une mauvaise pratique car update va être appelée à chaque frame pour rien 99.9% du temps. Pour ce genre de trucs mieux vaut utiliser un événement (UnityEvents ou events C#, ou mieux : utiliser un gestionnaire d'événements).

Concernant ta question en MP concernant les capacités des cartes. Déjà merci de ne pas me poser de questions par MP si elles ont leur place ici. Sinon pour ce genre de chose (capacités de cartes, de personages de RPG etc.), dériver une classe "Card" ou "Spell" ou "Action" ou autre ne fonctionne généralement pas bien. Le truc c'est de faire plusieurs classes abstraites (ou des interfaces), par exemple "Effect", "Condition" et "TargetFinder". Généralement ces classes sont des ScriptableObjects. Exemple ultra simplifié :


public abstract class ActionEffect : ScriptableObject
{
	public abstract void Do(Card Target, int power);
}

public class Damage : ActionEffect
{
	public override void Do(Card Target, int power)
	{
		Card.health -= power;
	}
}

public class Card : Monobehaviour
{
	public struct EffectsElement
	{
		public ActionEffect Effect;
		public int power;
	}
	[SerializeField] EffectsElement[] Effects = new EffectsElement[0];
	
	public DoEffects
	{
		foreach(EffectsElement e in Effects)
		{
			e.Effect.Do(this, e.power);
		}
	}
}
Ibadez38 Ibadez38
MP
Niveau 46
06 septembre 2021 à 15:32:24

Ouha merci d'avoir pris le temps de répondre.
Je voyais pas la chose comme ca pour structurer les spells, c'est encore mieux que ce que je pensais!

Je vois ce que sont les events mais le gestionaire d'event ca me dit rien.
C'est une classe consacrée seulement aux events?

ThetaTauTau ThetaTauTau
MP
Niveau 8
06 septembre 2021 à 16:34:14

Je vois ce que sont les events mais le gestionaire d'event ca me dit rien.
C'est une classe consacrée seulement aux events?

Oui c'est ça. L'idée c'est que tous les objets qui ont besoin d'envoyer ou recevoir événement n'ont besoin que d'une référence à un objet de cette classe, et du coup il n'y a pas de référence entre les objets qui envoient un événement et ceux qui le reçoivent ce qui rend le code beaucoup plus modulable.

On peut aussi faire la même chose pour les variables qui doivent être échangées entre différents objets qui ne sont pas dans le même prefab.

Il y a deux approches différentes :

  • Soit faire des ScriptableObject qui contiennent un event. Voir le tuto officiel https://unity.com/fr/how-to/architect-game-code-scriptable-objects#architect-variables .
  • Soit avoir un singleton (manager) qui contient tous les events

Unity n'a pas d'event system officiel donc faut soit en faire un soit même soit en prendre un sur l'assetstore.

Ibadez38 Ibadez38
MP
Niveau 46
06 septembre 2021 à 23:29:22

Tin j'ai l'impression d'en apprendre plus que mes 70h passez sur Udemy ou à regarder des tuto Youtube....

Encore merci pour ton aide!

Ibadez38 Ibadez38
MP
Niveau 46
13 septembre 2021 à 09:03:17

Bonjour,

Je ne suis pas sûr d'avoir tout compris mais comment la sphereOffPain change t'elle la valeur des HP du SimplePlayer alors qu'il n'y a aucune référence au ScriptableObject HP dans le script DamageDealer et qu'il semble à ce moment de la vidéo, n'y avoir encore aucun event?

https://youtu.be/raQ3iHhE_Kk?t=1479

Ibadez38 Ibadez38
MP
Niveau 46
13 septembre 2021 à 14:09:26

Je pense avoir compris mais je ne suis pas sûr, le script DamageDealer accède au ScriptableObject HP du joueur via un FindObjectOfType<SimpleUnitHealth>() puis il accède aux HP du SimplePlayer.

Je ne suis pas sur de ce que j'avance, mais pourquoi faire de cette façon si le but de la conférence est de montrer comment évitez de créer des systèmes dépendant directement les un des autres alors qu'il aurait pu directement référencer le scriptableObject HP dans le script DamageDealer et changer la valeur au lieu de passer par le script SimpleUnitHealth du SimplePlayer?

Je me trompe sûrement et si vous avez des explications je suis preneur.

Edit: Je suis con, sphereOffPain a un collider, elle accède au SimplePlayer pas via une référence FindObjectOfType mais via un collider.GetComponent<SimpleUnitHealth>().HP.value...

Je suppose toujours mais je pense que c'est le plus probable.

IndepGameDev IndepGameDev
MP
Niveau 10
14 septembre 2021 à 09:51:18

Le 13 septembre 2021 à 14:09:26 :
Je pense avoir compris mais je ne suis pas sûr, le script DamageDealer accède au ScriptableObject HP du joueur via un FindObjectOfType<SimpleUnitHealth>() puis il accède aux HP du SimplePlayer.

Je ne suis pas sur de ce que j'avance, mais pourquoi faire de cette façon si le but de la conférence est de montrer comment évitez de créer des systèmes dépendant directement les un des autres alors qu'il aurait pu directement référencer le scriptableObject HP dans le script DamageDealer et changer la valeur au lieu de passer par le script SimpleUnitHealth du SimplePlayer?

Je me trompe sûrement et si vous avez des explications je suis preneur.

Edit: Je suis con, sphereOffPain a un collider, elle accède au SimplePlayer pas via une référence FindObjectOfType mais via un collider.GetComponent<SimpleUnitHealth>().HP.value...

Je suppose toujours mais je pense que c'est le plus probable.

Je n'ai pas regardé la conf (en fait si, mais il y a longtemps), mais c'est surement de ce script dont tu parles :

https://github.com/roboryantron/Unite2017/blob/59186d60af2cf1f5faf69cd45601607531ba260b/Assets/Code/Variables/SimpleUnitHealth.cs

J'en déduit c'est le cube qui détecte la collision et qui va chercher les dommages pour les appliquer aux HP.

Ce sens est un peu plus propre, je pense que c'est préférable que ça soit l'unité elle même qui change ses HP.

Pour gérer les collisions plus finement tu peux t'appuyer sur les layers.

Soit directement au niveau moteur pour qu'il ne les détecte pas : https://docs.unity3d.com/Manual/LayerBasedCollision.html

Soit dans le code pour traiter différemment des collisions, par exemple différencier une collision qui donne de la vie et une qui en enlève (j'ai aussi rajouté un peu de log et ce script suppose qu'il existe une enum "Layers" qui contient les même Ids que ceux d'unity)

    
            private void OnTriggerEnter(Collider other)
            {
                if (collision.gameObject.layer == (int)Layers.DamagesToPlayer)
                {
                    DamageDealer damage = other.gameObject.GetComponent<DamageDealer>();
                    if (damage != null)
                        HP.ApplyChange(-damage.DamageAmount);
                    else
                        Debug.LogError($"damageDealer component expected");
                }
                else if (collision.gameObject.layer == (int)Layers.HealThePlayer)
                {
                    HealDealer heal = other.gameObject.GetComponent<HealDealer>();
                    if (heal != null)
                        HP.ApplyChange(heal.HealAmount);
                    else
                        Debug.LogError($"healDealer component expected");
                }
                else
                    Debug.LogError($"Unexpected layer {collision.gameObject.layer}");
            }
Ibadez38 Ibadez38
MP
Niveau 46
14 septembre 2021 à 11:58:09

Merci pour ta réponse.

Je ne savais pas du tout que l'on pouvait trouver les scripts de la conférence.

loic2000 loic2000
MP
Niveau 10
10 octobre 2021 à 12:15:26

Bonjour :)

Je travaille en ce moment sur un projet de jeu sur Unity qui aurait une grande partie narrative. Je voulais savoir si vous aviez des tutos / conseils / astuces pour mettre en place des documents que le joueur pourrait lire une fois dans le jeu comme c'est le cas dans des séries telles que Resident Evil ou The Last of Us.

Ces documents auraient plusieurs formats différents (feuille, ordinateur, livre...) et permettraient au joueur de mieux comprendre l'histoire du jeu. Comme c'est la première fois que je fais ça, j'ai préféré tenter ma chance ici pour trouver quelqu'un qui aurait déjà fait ça et qui pourrait me dire ce que cela nécessite en terme de programmation / design...

Merci d'avance :-)

ThetaTauTau ThetaTauTau
MP
Niveau 8
10 octobre 2021 à 13:44:28

Il n'y a pas 36 solutions pour afficher du texte dans Unity.

Avec Unity.UI tu as le choix entre Text et TextMeshPro. TexMeshPro est meilleurs en tous points donc pas de raison de ne pas l'utiliser.

Il y a aussi UIElements, inspiré des techno web, qui va à terme remplacer l'actuelle UI. Mais c'est actuellement en preview, donc buggé, incomplet et avec peu de tutos. Perso j'ai commencé à l'utiliser mais je le recommande pas vraiment à moins d'être débrouillard.

Dans les deux cas (UI ou UIElements), si tu veux afficher ça dans le "monde" du jeu et non comme une interface, tu peux afficher ton UI dans une Render Texture que tu peux ensuite utiliser comme n'importe quelle texture (par exemple comme la texture d'un écran d'ordinateur). Pas de code nécessaire il suffit de configurer ton canvas.

Et sinon au niveau code, rien de sorcier. Soit tu créé un prefab variant de ton UI à chaque document et t'as pas besoin de code du tout (mais c'est pas le plus pratique). Soit tu stocke ton texte quelque part, probablement dans un ScriptableObject. Mais un fichier texte peut aussi être considéré si tu veux que des gens puissent ajouter des textes sans avoir Unity. Ensuite il suffit d'un petit script qui va mettre ce texte dans l'interface.

Techb0t Techb0t
MP
Niveau 1
03 novembre 2021 à 23:17:47

bonsoir, je créé une asset pour créer un jeu de type Tycoon et je me demendais si quelle prix serait le plus abordable ? (sans en dependre du contenu de l'asset)

IndepGameDev IndepGameDev
MP
Niveau 10
04 novembre 2021 à 11:21:14

Le 03 novembre 2021 à 23:17:47 :
bonsoir, je créé une asset pour créer un jeu de type Tycoon et je me demendais si quelle prix serait le plus abordable ? (sans en dependre du contenu de l'asset)

C'est justement le contenu de l'asset qui crée le prix :hap:

Donc entre 3$ et 300$

pumpkind pumpkind
MP
Niveau 11
06 novembre 2021 à 14:38:33

Salut à tous :) J'ai une chtite question !
J'importe des données d'un csv dans Unity, quelle serait la meilleure manière de stocker/utiliser ces données dans mon jeu ?

Pour le moment ce que je fais, c'est que je parcours le csv, et je mets les données dans des ScriptableObject. Les objets sont ensuite mis dans une List. Ca vous parait cohérent ? Merci !

Ibadez38 Ibadez38
MP
Niveau 46
07 novembre 2021 à 13:56:30

Quand je clic sur ton lien: https://www.noelshack.com/2021-44-7-1636289780-capture-d-ecran-2021-11-07-135531.png

Ah je viens de voir que ton pseudo a été banni :)

Message édité le 07 novembre 2021 à 13:57:04 par Ibadez38
Shijii Shijii
MP
Niveau 3
13 novembre 2021 à 19:09:58

hey j'ai une question, il faudrait minimum quel config sur pc pour créer tranquilement sans problemes sur unity ?

Shijii Shijii
MP
Niveau 3
13 novembre 2021 à 19:43:32

voici la config (provisoire) de mon pc au passage :

CPU: Intel core i-3 3240 (3.4 ghz)

Ram : 4gb

GPU: intel integrated graphics (2500)

TerryEncore TerryEncore
MP
Niveau 8
17 novembre 2021 à 19:09:46

Le 13 novembre 2021 à 19:09:58 :
hey j'ai une question, il faudrait minimum quel config sur pc pour créer tranquilement sans problemes sur unity ?

Tout dépend de tes projets

y'a pas de configuration minimum, t'as pas besoin de la même config pour faire tourner un AAA qu'un modeste jeu 2D

Ta config est limite mais pour commencer à apprendre à coder ça se fait

Arkeon34 Arkeon34
MP
Niveau 1
05 janvier 2022 à 18:35:50

Bonjour tout le monde, je suis actuellement en train de m'essayer à Unity mais lorsque je crée un nouveau projet (Unity2D ou 3D), la console m'affiche plein d'erreurs (environ 480). J'ai déjà essayé de désinstaller et de réinstaller Unity mais sans franc succès.

https://www.noelshack.com/2022-01-3-1641404111-unityerrors.png

EauDeCocktail EauDeCocktail
MP
Niveau 5
06 février 2022 à 14:27:56

Bonjour. Question simple et bête: à quel point Unity est-il difficile à prendre en main pour un début complet?
Le bon gros débutant je veux dire, la base de la base, ma plus grosse expérience dans la "création de jeu" c'était RPG Maker VX Ace.
Donc je pars de très, très, très bas.

ThetaTauTau ThetaTauTau
MP
Niveau 8
06 février 2022 à 15:28:29

Bonjour. Question simple et bête: à quel point Unity est-il difficile à prendre en main pour un début complet?

Unity est un moteur destiné aux pros, donc beaucoup de possibilités mais aussi beaucoup de trucs à apprendre. Cela dit il y a vraiment énormément de tutos pour Unity et la doc est très bien faite donc les débutants ont tous ce qu'il faut pour progresser.

Aussi il faut savoir programmer un minimum. Mais pas besoin d'avoir un super niveau, on peut déjà faire pas mal de trucs avec juste quelques bases.

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