Menu
EtoileAbonnementRSS
jeuxvideo.com  /  Tous les forums  /  Forum principal Informatique  /  Forum Création de Jeux  /  Topic J'aide les gens dans Unity  / 

Topic J'aide les gens dans Unity - Page 171

Sujet : J'aide les gens dans Unity

DébutPage précedente
[Alex_Turner]
[Alex_Turner]
MP
02 septembre 2020 à 19:33:12

Merci pour vos réponses :ok:
Je vais aller voir ça

Scyllis
Scyllis
MP
03 septembre 2020 à 01:14:19

Bon, je coince depuis des plombes, j'arrive pas à trouver :hap:

Je suis encore sur mon proto de jeu d'élevage, et j'ai remplacé Bolt par du C#. je suis en train de faire mon script d'accouplement, et toutes les stats de mes animaux sont gérées par un scriptableobject appelé "AnimalStats" :
https://www.noelshack.com/2020-36-4-1599088639-devenv-4p44alw3gm.png

J'ai un script stats handler sur chaque animal dans lequel je met mon scriptableobject :
https://www.noelshack.com/2020-36-4-1599088650-devenv-dpmxrlfukw.png

Et, donc, le script de reproduction qui me pose problème :
https://www.noelshack.com/2020-36-4-1599088658-devenv-gs2smh89uj.png

Je ne trouve pas comment appeler les parties dont j'ai besoin des scriptablesobjects du mâle et de la femelle, y a toujours un truc qui va pas.

collision.gameObject.GetComponent<AnimalStats>().NOMSTAT semblait marcher pour le mâle, et
this.gameObject.GetComponent<AnimalStats>().NOMSTAT pour la femelle, mais en lançant le jeu, j'ai un message d'erreur : ArgumentException: GetComponent requires that the requested component 'AnimalStats' derives from MonoBehaviour or Component or is an interface.
UnityEngine.GameObject.GetComponent[T] () (at <e8645a79b0794e0e9a2b5bbff081b88a>:0)
FemaleRepro.Update () (at Assets/Scripts/FemaleRepro.cs:39)

Bref, comment faire pour récupérer chaque champs du ScriptableObject de chacun ? :(

Merci d'avance à ceux qui prendront le temps de répondre !

Message édité le 03 septembre 2020 à 01:17:42 par Scyllis
ThetaTauTau
ThetaTauTau
MP
03 septembre 2020 à 08:08:37

GetComponent permet de trouver les références Monobehaviour du GameObject. Là tu essayes de chercher un ScriptableObject et ça n'a donc pas de sens (les ScriptableObject ne sont pas attachés aux GameObject).

Il faut donc que tu fasse GetComponent<StatHandler>().stats pour obtenir ton ScriptableObject (et passer stats en public).

Au passage GetComponent est une fonction qui est assez lente, il vaut mieux l’appeler une seule fois et mettre le résultat dans une variable si on en a besoin plusieurs fois.

Scyllis
Scyllis
MP
03 septembre 2020 à 14:09:41

Le 03 septembre 2020 à 08:08:37 ThetaTauTau a écrit :
GetComponent permet de trouver les références Monobehaviour du GameObject. Là tu essayes de chercher un ScriptableObject et ça n'a donc pas de sens (les ScriptableObject ne sont pas attachés aux GameObject).

Il faut donc que tu fasse GetComponent<StatHandler>().stats pour obtenir ton ScriptableObject (et passer stats en public).

Au passage GetComponent est une fonction qui est assez lente, il vaut mieux l’appeler une seule fois et mettre le résultat dans une variable si on en a besoin plusieurs fois.

Merci beaucoup pour la réponse très complète !
J'avais même pas vu que j'avais mis private dans le StatsHandler :hap: ^^'

Scyllis
Scyllis
MP
16 septembre 2020 à 05:01:26

J'ai encore une question :x

J'essaie de générer une map procédurale pour un petit jeu, et je veux que quand le joueur entre dans une zone définie ça génère la suite.
Pour ça j'ai récupéré la position en Y du gameObject qui a le collider, et je lui demande d'instancier mon prefab avec la position en Y + la distance qui sépare mon collider de la zone où je veux le prefab.

Mais une erreur dans le vector3 de mon instantiate qui me dit "conversion impossible de 'UnityEngine.Vector3' en 'UnityEngine.Transform'.
Sauf que la variable que j'ai mise en Y c'est un float...

https://www.noelshack.com/2020-38-3-1600225265-w211f64nwq.png

Si quelqu'un sait, parce que je trouve plus :/

TheRealMarco
TheRealMarco
MP
16 septembre 2020 à 08:42:29

new Vector3(0, posGenerator,0), Quaternion.identity);

Scyllis
Scyllis
MP
16 septembre 2020 à 19:12:20

Merci beaucoup, je ne sais pas encore si ça marche, j'ai pas fini, mais en tout cas y a plus d'erreur !

Pseudo supprimé
20 septembre 2020 à 09:42:22

Salut à tous,
j'ai tout juste commencé mon apprentisage sur Unity; je suis un tutoriel FR pour faire un jeu en 2D.

Mais mon problème est la consomation globale du soft qui est très gourmande pour sa faible utilisation.

En gros dès que je lance mon jeu avec une scene simple, mon PC s'emballe https://www.noelshack.com/2020-38-7-1600587390-unityproc.png

J'ai juste programmé la direction + le saut et d'ailleurs ce dernier fonctionne 1 fois sur 10. J'ai l'impression que ça rame.

Config:
Unity 2020.1.6f1
i7-8700 CPU @ 3.20GHz
16Go de RAM
NVidia Geforce RTX 2060

TheRealMarco
TheRealMarco
MP
20 septembre 2020 à 09:57:35

Je ne crois pas que ça soit anormal. Si tu lances une scene vide, Unity va certainement prendre beaucoup de puissance de calcul quand même.
Faut pas oublié que dès que tu lances le jeu, Unity va charger un moteur de jeu 3D, à chaque frame (plusieurs dizaines de fois par seconde) il fait effectuer un rendu 3D de ta scène et l'affiche à l'écran (même si c'est un jeu en 2D), recalcul les collisions, etc...
Par contre, si le saut marche 1 fois sur 10, c'est qu'il y a un problème dans tes scripts (et ce problème peut aussi engendrer une sur-consommation de la puissance de calcul). :ok:
Mais je peux pas t'en dire plus si tu ne partages pas le code.

Pseudo supprimé
20 septembre 2020 à 10:06:29

Le 20 septembre 2020 à 09:57:35 TheRealMarco a écrit :
Je ne crois pas que ça soit anormal. Si tu lances une scene vide, Unity va certainement prendre beaucoup de puissance de calcul quand même.
Faut pas oublié que dès que tu lances le jeu, Unity va charger un moteur de jeu 3D, à chaque frame (plusieurs dizaines de fois par seconde) il fait effectuer un rendu 3D de ta scène et l'affiche à l'écran (même si c'est un jeu en 2D), recalcul les collisions, etc...
Par contre, si le saut marche 1 fois sur 10, c'est qu'il y a un problème dans tes scripts (et ce problème peut aussi engendrer une sur-consommation de la puissance de calcul). :ok:
Mais je peux pas t'en dire plus si tu ne partages pas le code.

En farfouillant sur un forum anglais, j'ai vu effectivement une personne avec le même problème pour un jeu en 3D avec une conso à 100%.
Avec la même explication que la tienne, donc je dois en déduire que c'est ça la raison, ce qui reste tout de même embêtant d'entendre le PC tourner à fond à chaques essais.

Concernant le saut, c'est au bon vouloir du jeu... un coup je vais pouvoir sauter 2 fois de suite, un autre coup je vais agresser la barre espace et il bougera pas.

using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public float moveSpeed;
    public float jumpForce;

    public bool isJumping = false;

    public Rigidbody2D rb;
    private Vector3 velocity = Vector3.zero;

    void FixedUpdate()
    {
        float horizontalMovement = Input.GetAxis("Horizontal") * moveSpeed * Time.deltaTime;

        if (Input.GetButtonDown("Jump"))
        {
            isJumping = true;
        }

        MovePlayer(horizontalMovement);
    }

    void MovePlayer(float _horizontalMovement)
    {
        Vector3 targetVelocity = new Vector2(_horizontalMovement, rb.velocity.y);
        rb.velocity = Vector3.SmoothDamp(rb.velocity, targetVelocity, ref velocity, .05f);

        if(isJumping == true)
        {
            rb.AddForce(new Vector2(0f, jumpForce));
            isJumping = false;
        }
    }
}
ThetaTauTau
ThetaTauTau
MP
20 septembre 2020 à 10:07:05

Pas de problème de config, la mienne est beaucoup moins bonne.

L'éditeur d'unity est très gourmand, et il y a pas mal de taches synchrones, qui "bloquent" le logiciel, du coup c'est normal que ça ne soit pas toujours fluide dans l'éditeur, même avec un grosse config.

Quand tu lance le jeu dans l'éditeur c'est plus gourmand qu'une fois build, c'est normal que le processeur tourne pas mal, même pour un petit jeu. Dans ton cas cependant si t'es en permanence à 70% ça semble excessif. Et ça ne devrait pas impacter sur la fluidité du jeu.

C'est probablement toi qui a mal fait un truc, plutôt qu'un problème matériel ou d'Unity. Par exemple une boucle infinie, ou un appel excessif à Console.Log etc.

Pseudo supprimé
20 septembre 2020 à 10:26:31

Alors apparement, dans le tuto que je suis, plusieurs personnes ont le même problème. Et le système de saut est revu dans les épisodes suivant. Donc my bad, ça m'apprendra à pas chercher de mon côté...
Ce qui me surprend tout de même, c'est qu'avec le même code, le dev qui explique arrive clairement à sauter.

Merci pour vos réponses rapide.

TheRealMarco
TheRealMarco
MP
20 septembre 2020 à 11:13:56

Pour ton problème de saut: Remplace void FixedUpdate() par void Update(). :ok:

C'est pas un problème avec Unity, mais c'est ton tuto. :ok:

Message édité le 20 septembre 2020 à 11:14:13 par TheRealMarco
Pseudo supprimé
20 septembre 2020 à 11:32:48

Le 20 septembre 2020 à 11:13:56 TheRealMarco a écrit :
Pour ton problème de saut: Remplace void FixedUpdate() par void Update(). :ok:

C'est pas un problème avec Unity, mais c'est ton tuto. :ok:

Impec' pour le saut mais maintenant je peux plus me diriger. :rire:

Mais bref, je veux pas t'embêter avec ça, pour le moment ce n'est pas mon principal soucis, c'est surtout la conso... et ce ventillo qui s'emballe tellement que ça me stress au point d'être désagréable.
Au moment où je lance le jeu, au bout de 10 secondes 70-80% processeur 45% mémoire. Ca peut paraître con mais ça me sape le moral. Je te jure que ça me démotive.
Je suis sur un laptop, sans batterie directement sur le secteur. Rassure moi, c'est pareil pour toi? Pour tout le monde en fait?
Tu m'as expliqué plus haut mais j'arrive pas à l'accepter je crois.

ThetaTauTau
ThetaTauTau
MP
20 septembre 2020 à 11:38:53

@TheRealMarco : pour tout ce qui concerne le moteur physique il est conseillé d'utilisé FixedUpdate. Par contre dans sa fonction il y a Time.deltaTime qui est à remplacer par Time.fixedDeltaTime.

TheRealMarco
TheRealMarco
MP
20 septembre 2020 à 14:57:50

Le 20 septembre 2020 à 11:38:53 ThetaTauTau a écrit :
@TheRealMarco : pour tout ce qui concerne le moteur physique il est conseillé d'utilisé FixedUpdate. Par contre dans sa fonction il y a Time.deltaTime qui est à remplacer par Time.fixedDeltaTime.

Oui, il faudrait revoir une partie du code mais il verra dans la tutoriel. Juste que j'ai vu Input.GetButtonDown("Jump") qui ne pouvaient donc pas être détecté à chaque frame.

Le 20 septembre 2020 à 11:32:48 chenaro a écrit :

Le 20 septembre 2020 à 11:13:56 TheRealMarco a écrit :
Pour ton problème de saut: Remplace void FixedUpdate() par void Update(). :ok:

C'est pas un problème avec Unity, mais c'est ton tuto. :ok:

Impec' pour le saut mais maintenant je peux plus me diriger. :rire:

Mais bref, je veux pas t'embêter avec ça, pour le moment ce n'est pas mon principal soucis, c'est surtout la conso... et ce ventillo qui s'emballe tellement que ça me stress au point d'être désagréable.
Au moment où je lance le jeu, au bout de 10 secondes 70-80% processeur 45% mémoire. Ca peut paraître con mais ça me sape le moral. Je te jure que ça me démotive.
Je suis sur un laptop, sans batterie directement sur le secteur. Rassure moi, c'est pareil pour toi? Pour tout le monde en fait?
Tu m'as expliqué plus haut mais j'arrive pas à l'accepter je crois.

La programmation de jeux vidéo, ça consomme beaucoup plus que d'autres types de programmation, comme faire du web. Je pense que c'est un type d'activité qui consomme le plus avec l'imagerie 3D et l'intelligence artificielle, c'est donc normal que ton ordinateur chauffe beaucoup. Le fait que tu travailles sur un ordinateur portable doit accentuer le problème car il y a moins d'air donc une ventilation qui marche moins bien.
Perso j'ai une tour assez grosse, je n'ai pas de problème de ventilateurs qui s'emballent, la température n'augmente pas suffisamment.

Yankidev
Yankidev
MP
21 septembre 2020 à 15:05:48

Salut j'aimerais avoir votre avis sur l'approche correcte que je devrais prendre pour implémenter un système de combo customizable (Comme dans God Hand) dans mon jeu à la 3e personne en 3D ? :(
Pour être plus précis, je veux donner au joueur la possibilité de débloquer certains coups et de les agencer pour pouvoir faire un combo customizable :oui:

EDIT: Je cherche aussi un tuto/ressources poussées sur la gestion des contrôles du personnage à savoir les déplacements, les sauts, etc, ...
Je trouve beaucoup de tutos mais ils s'arrêtent vite ou alors n'expliquent pas bien la logique de base à avoir pour implémenter toute sorte de différentes manières de contrôler notre personnage :-(

Message édité le 21 septembre 2020 à 15:07:47 par Yankidev
TheRealMarco
TheRealMarco
MP
21 septembre 2020 à 17:40:12

Salut j'aimerais avoir votre avis sur l'approche correcte que je devrais prendre pour implémenter un système de combo customizable (Comme dans God Hand) dans mon jeu à la 3e personne en 3D ?

C'est quoi l'approche que tu as choisi ?

Je trouve beaucoup de tutos mais ils s'arrêtent vite ou alors n'expliquent pas bien la logique de base à avoir pour implémenter toute sorte de différentes manières de contrôler notre personnage :-(

Tu ne trouves pas un tuto pour faire le jeu de tes rêves. Les tutos c'est pour apprendre comment faire des trucs génériques applicables à tous les jeux.
En général les tutos de Brackeys sont pas mal: https://www.youtube.com/watch?v=4HpC--2iowE

DébutPage précedente
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?