Accueil Forums J’ai besoin d’aide Unity3D Besoin d'aide degat probleme de degat de chute sur un Tps

Mots-clés : 

Ce sujet a 15 réponses, 3 participants et a été mis à jour par  Zhass, il y a 1 mois.

15 sujets de 1 à 15 (sur un total de 16)
  • Auteur
    Messages
  • #1428

    Veraliot_
    Participant

    Salut a tous, après avoir bientôt finit mon jeu, je me suis attaqué au dégâts de chutes en suivant ce tuto https://www.youtube.com/watch?v=OAbOeeoRy_I&t=820s!!
    Malheureusement j’ai un problème et je ne sais pas d’ou ça vient si quelq’un peux m’aider!
    Pour expliquer: quand je saute ou tombe la fall distance ne marche pas je ne sais pas pourquoi et je ne pense pas avoir fait d’erreur j’ai revu la vidéo 5 fois et ça m’énerve de ne pas savoir d’ou ça vient!!! (je tient e m’excuser pour les fautes d’orthographe)
    au passage unity m’affiche cette erreur mais d’ou peux elle de la ligne 22 pas possible, j’ai toute essaye et rien ne marche: NullReferenceException: Object reference not set to an instance of an object
    FallDamage.Update () (at Assets/GameAssets/Script/C# scripts/FallDamage.cs:22)
    Ps voici mon scripts:
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    public class FallDamage : MonoBehaviour {

    float LastPositionY = 0f;
    public float fallDisance = 0f;
    public float MaxFall = 5f;
    Transform Player;
    CharacterController cc;

    // Use this for initialization
    void Start () {
    cc.GetComponent<CharacterController>();
    Player.GetComponent<Transform>();
    }

    // Update is called once per frame
    void Update () {
    //si LP que pos Y du player il tombe donc calcul de la dist
    if (LastPositionY > Player.transform.position.y)
    {
    fallDisance += LastPositionY – Player.transform.position.y;
    }

    if (fallDisance>=MaxFall && cc.isGrounded)
    {
    GetComponent<CharacterStats>().health -= 10;
    ResetVariable();
    }
    if(fallDisance < MaxFall && cc.isGrounded)
    {
    ResetVariable();
    }
    //maj de lastposY
    LastPositionY = Player.transform.position.y;
    }
    void ResetVariable()
    {
    fallDisance = 0;
    LastPositionY = 0;
    }
    }
    Je n’ai pas cree de barre de vie car j’ai ce script qui s’en occupe:
    using UnityEngine;
    using UnityStandardAssets.ImageEffects;

    public class CharacterStats : MonoBehaviour {

    private CharacterController characterController { get { return GetComponent<CharacterController>(); } set { characterController = value; } }
    private RagdollManager RagMan { get { return GetComponentInChildren<RagdollManager>(); } set { RagMan = value; } }
    private Animator anim { get { return GetComponent<Animator>(); } set { anim = value; } }
    public Rigidbody Hips;
    public Rigidbody LeftUpLeg;
    public Rigidbody RightUpLeg;
    public Rigidbody LeftLeg;
    public Rigidbody RightLeg;
    public Rigidbody Spine1;
    public Rigidbody LeftArm;
    public Rigidbody RightArm;
    public Rigidbody LeftForeArm;
    public Rigidbody RightForeArm;
    public Rigidbody Head;
    public Camera DeathCam;
    public bool IsAi;

    [Range(0, 100)] public float health = 100;
    public int faction;

    public MonoBehaviour[] ScriptsToDisable;

    // Update is called once per frame
    void Update()
    {
    health = Mathf.Clamp(health, 0, 100);
    }
    public void Damage(float damage)
    {
    health -= damage;

    if (health <= 0)
    {
    Die ();
    }
    }

    void Die ()
    {
    //ragdoll
    Hips.isKinematic = false;
    LeftUpLeg.isKinematic = false;
    RightUpLeg.isKinematic = false;
    LeftLeg.isKinematic = false;
    RightLeg.isKinematic = false;
    Spine1.isKinematic = false;
    LeftArm.isKinematic = false;
    RightArm.isKinematic = false;
    LeftForeArm.isKinematic = false;
    RightForeArm.isKinematic = false;
    Head.isKinematic = false;
    characterController.enabled = false;
    anim.enabled = false;
    anim.applyRootMotion = false;
    DeathCam.GetComponent<Grayscale>().enabled = true;
    Time.timeScale = 0.3f;
    if (IsAi)
    {
    DeathCam.GetComponent<Grayscale>().enabled = false;
    Time.timeScale = 1f;
    }

    if (ScriptsToDisable.Length == 0)
    {
    Debug.Log(“Tous les scripts restent en marche sur le personnage en question mais il est mort”);
    return;
    }
    foreach (MonoBehaviour script in ScriptsToDisable)
    {
    script.enabled = false;
    }
    if (RagMan != null)
    RagMan.Ragdoll();
    }
    }
    Merci de m’aider! :)

    • Ce sujet a été modifié le il y a 1 mois et 1 semaine par  Veraliot_.
    #1430

    broumbroum
    Participant

    A la linge 22 il y a marque “Player.transform.position.y” aure Player est un Transform.
    Doit change la variable Transform Player en GameObject Player.

    • Cette réponse a été modifiée le il y a 1 mois et 1 semaine par  broumbroum.
    #1433

    Veraliot_
    Participant

    Milles Merci Broumbroum de m’avoir aider a corriger mes betises!
    et encore desoler de t’avoir derranger, je te souhaite une bonne journée! 😉
    cordialement Veraliot.

    #1434

    Veraliot_
    Participant

    Alors re après avoir tester ce que tu as dit ça ne marche toujours pas, je sais que j’ai encore foiré quelque part mais bon si tu pouvais encore m’aider!
    voila ce que j’ai fait dit moi ce qui cloche:
    public class FallDamage : MonoBehaviour {

    float LastPositionY = 0f;
    public float fallDisance = 0f;
    public float MaxFall = 5f;
    GameObject Player;
    CharacterController cc;

    // Use this for initialization
    void Start () {
    cc.GetComponent<CharacterController>();
    Player.GetComponent<Transform>();
    }

    // Update is called once per frame
    void Update () {
    //si LP que pos Y du player il tombe donc calcul de la dist
    if (LastPositionY > Player.gameObject.transform.position.y)
    {
    fallDisance += LastPositionY – Player.gameObject.transform.position.y;
    }

    if (fallDisance>=MaxFall && cc.isGrounded)
    {
    GetComponent<CharacterStats>().health -= 10;
    ResetVariable();
    }
    if(fallDisance < MaxFall && cc.isGrounded)
    {
    ResetVariable();
    }

    #1435

    broumbroum
    Participant

    retire la Linge

    Player.GetComponent<Transform>();

    dans la fonction Start

    #1438

    Veraliot_
    Participant

    Encore desoler de derranger mais cette fois ci 2 nouvelles erreurs 🙁
    voici l’erreur en question: NullReferenceException: Object reference not set to an instance of an object
    FallDamage.Start () (at Assets/GameAssets/Script/C# scripts/FallDamage.cs:15)
    NullReferenceException: Object reference not set to an instance of an object
    FallDamage.Start () (at Assets/GameAssets/Script/C# scripts/FallDamage.cs:21)
    Merci de voir ou j’ai fait une betise!

    #1439

    broumbroum
    Participant

    Ton script arrive pas a recéper le CharacterController dans la fonction Start

    #1440

    Veraliot_
    Participant

    Si je le mais en public ça pourrait résoudre le probleme??

    #1441

    Veraliot_
    Participant

    Re!! j’ai tester en public mais toujours cette satanée erreur!
    NullReferenceException: Object reference not set to an instance of an object
    FallDamage.Update () (at Assets/GameAssets/Script/C# scripts/FallDamage.cs:21)

    #1447

    broumbroum
    Participant

    Me ton inspector en debug

    puis lance le jeu est regarde si toute tes variable de ton script son pas égale a null (None).

    #1449

    Veraliot_
    Participant

    ok merci, je vais voir ça tout de suite !!

    #1450

    Veraliot_
    Participant

    Ah je crois savoir d’ou vient le problème!
    je t’envoie un screen pour voir par toi même si c’est bien ce que je pense !!
    https://cdn.discordapp.com/attachments/276424822576381962/313746961834704896/unknown.png
    Merci de me répondre!
    Cordialement Veraliot_!
    Pour info je crois que ça vient du game object qui est en null !!
    je test et je reply.

    • Cette réponse a été modifiée le il y a 1 mois et 1 semaine par  Veraliot_.
    #1452

    Zhass
    Participant

    Salut ! 🙂

    Dans ton script tu essais de récupérer un character controller : GetComponent<CharacterController>();

    Mais pour cela il faut que ton objet en ai un 😉

    Regardes dans le screenshot que tu as envoyés, il n’y a pas de character controller dans tes composants (à moins qu’il est en haut ?) , donc le script ne peut pas le trouver. Il te suffis de faire Add Componant : Character Controller dans l’inspector de ton objet Player.

    Peux tu mettre ton script dans une balise code s’il te plait ?

    • Cette réponse a été modifiée le il y a 1 mois et 1 semaine par  Zhass.
    • Cette réponse a été modifiée le il y a 1 mois et 1 semaine par  Zhass.
    #1456

    Zhass
    Participant

    Ou alors c’est dans ta ligne :
    cc.GetComponent<CharacterController>();

    C’est plutôt : cc = GetComponent<CharacterController>();
    que tu veux faire non ? 🙂

    • Cette réponse a été modifiée le il y a 1 mois et 1 semaine par  Zhass.
    #1472

    Veraliot_
    Participant

    Merci a tous de m’aider et encore desoler de vous avoir deranger :)!
    J’ai declacer une variable publique mais ta solution semble plus obti merci je te souhaite bonne soirée/journée et je souhaite la meme chose pour Broum Broum!!

15 sujets de 1 à 15 (sur un total de 16)

Vous devez être connecté pour répondre à ce sujet.