[DB AL]Faire une barre de vie
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :
Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé
Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie
Exemple :
[DB-RS] Mouvement perso multijoueur
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :
Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé
Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie
Exemple :
[DB-RS] Mouvement perso multijoueur
[DB AL]Faire une barre de vie
Bonjour,
Je suis un débutant et j'utilise la dernière version d'Unity (2019.2.11f1).
Pour mon projet je souhaite créer une barre de vie qui décroit lorsque que le FPS player tombe de trop haut sur le terrain).
Pour l'instant j'ai mis en place un Canvas avec un ButtonSpacebarSprite.
J'utilise comme FPS player le prefab de base d'Unity RigidBodyFPSController.
Je pense qu'il faudrait chopper quelque part la valeur de vélocité d'Y et baisser la barre de vie en fonction de la chute.
Quelqu'un pourrait m'aider ou me filer un petit script pour faire cela ?
Merci d'avance,
Je suis un débutant et j'utilise la dernière version d'Unity (2019.2.11f1).
Pour mon projet je souhaite créer une barre de vie qui décroit lorsque que le FPS player tombe de trop haut sur le terrain).
Pour l'instant j'ai mis en place un Canvas avec un ButtonSpacebarSprite.
J'utilise comme FPS player le prefab de base d'Unity RigidBodyFPSController.
Je pense qu'il faudrait chopper quelque part la valeur de vélocité d'Y et baisser la barre de vie en fonction de la chute.
Quelqu'un pourrait m'aider ou me filer un petit script pour faire cela ?
Merci d'avance,
Re: [DB AL]Faire une barre de vie
Bonjour,
Concernant la barre de vie, là c'est l'autre aspect (à la base indépendant). Les tuto ne manquent pas sur le sujet.
Quand tu auras passé les deux étapes, il faudra alors songer à lier les deux
Pour la vélocité, tu peux la récupérer sur le m_Rigidbody au niveau du script du RigidBodyFPSController, voir la doc sur Rigidbody.velocity.
Concernant la barre de vie, là c'est l'autre aspect (à la base indépendant). Les tuto ne manquent pas sur le sujet.
Quand tu auras passé les deux étapes, il faudra alors songer à lier les deux
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ
Re: [DB AL]Faire une barre de vie
Merci pour les conseils.
En fait j'essaye d'adapter un scripte qu'on m'avait filer et qui était conçu initialement pour un FirstPersonController classique.
Dans ce scripte la vélocité était chopée dans CharacterController mais je ne sais pas comment l'adapter pour un RigidBodyFPSController ? Une âme charitable pourrait m'aider à faire les changements ? L'objectif étant d'afficher le Deatmenu lorsque la vie <=0.
En fait j'essaye d'adapter un scripte qu'on m'avait filer et qui était conçu initialement pour un FirstPersonController classique.
Dans ce scripte la vélocité était chopée dans CharacterController mais je ne sais pas comment l'adapter pour un RigidBodyFPSController ? Une âme charitable pourrait m'aider à faire les changements ? L'objectif étant d'afficher le Deatmenu lorsque la vie <=0.
Code : Tout sélectionner
private void OnControllerColliderHit(ControllerColliderHit hit) // fonction gerant la detection de chute
{
if(GetComponent<CharacterController>().velocity.y <= -minimumFalling && !falling)
{
GetFallDamage(GetComponent<CharacterController>().velocity.y);
falling = true;
}
}
void GetFallDamage(float yVelocity) // fonction qui gere les degats de chute
{
pv -= Mathf.RoundToInt( -yVelocity * fallingRatio);
SetPvBar();
StartCoroutine(ResetFallingBool());
if (pv <= 0) DeathMenu();
Re: [DB AL]Faire une barre de vie
Bonjour,
là tu pars sur du bricolage, pas très sein comme approche.
Pour ce qui est de chopper la vélocité de ton Player, je t'ai donné en grande partie la réponse dans mon précédent message. Tu l'auras par le biais de m_RigidBody.velocity, donc pour la partie verticale: m_RigidBody.velocity.y.
Dans ton cas le principe est de se dire:
Si on touche un élément du sol avec une vélocité verticale trop grande, alors je soustrait des points de vie.
Donc au niveau du script RigidbodyFirstPersonController, pour détecter quand le player touche le sol tu peux t'aider de la methode GroundCheck(), et pour tester la valeur de descente donc de m_RigidBody.velocity.y.
là tu pars sur du bricolage, pas très sein comme approche.
Pour ce qui est de chopper la vélocité de ton Player, je t'ai donné en grande partie la réponse dans mon précédent message. Tu l'auras par le biais de m_RigidBody.velocity, donc pour la partie verticale: m_RigidBody.velocity.y.
Dans ton cas le principe est de se dire:
Si on touche un élément du sol avec une vélocité verticale trop grande, alors je soustrait des points de vie.
Donc au niveau du script RigidbodyFirstPersonController, pour détecter quand le player touche le sol tu peux t'aider de la methode GroundCheck(), et pour tester la valeur de descente donc de m_RigidBody.velocity.y.
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ
Re: [DB AL]Faire une barre de vie
Merci.
Tu n'as pas un lien vers un exemple de code proche de ce que je voudrais faire ?
Tu n'as pas un lien vers un exemple de code proche de ce que je voudrais faire ?
Re: [DB AL]Faire une barre de vie
Non, et tu as bien peu de chance d'en trouver un. Si pour chaque implémentation d'une nouvelle mécanique dans ton jeu tu comptes la dessus, tu es mal barré.
A un moment, si tu veux vraiment t'impliquer dans la création de ton projet, il va falloir apprendre les bases, et passer outre le bricolage de bout de script trouvé ça et là. Après, pour des explications et autres conseils, le forum est ton ami.
Dans mes messages, je t'es donné l'essentiel. Regarde le fonctionnement de la méthode GroundCheck() dans le script du controller. Elle permet de savoir si ton player est sur le sol ou pas. Après, tu peux très bien y ajouter un test mesurant la vélocité vertical du RigidBody (qui sera négative dans ce cas pour une descente), et voir si elle est supérieure à une valeur de consigne définis par test soin. Une fois cela fait, tu passeras à l'étape suivante, avec l'impact sur les points de vie.
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ
Re: [DB AL]Faire une barre de vie
J'ai trouvé une vidéo qui explique de façon très simple comment appliquer des dégâts d'une chute à un FPS controller.
Je voudrais l'utiliser comme base pour l'adapter à ma situation.
https://www.youtube.com/watch?v=OAbOeeoRy_I
Seulement ça n'est valable que pour un FPS controller qui utilise un character controller et cela ne fonctionne pas avec le RigidBodyFPSController.
Dans ce petit scripte il faudrait, entre autre, que je trouve le moyen de tester la variable m_IsGrounded définie dans le RigidBodyFPSController. GroundCheck étant private je ne sais pas si c'est possible ?
Dans la vidéo, l'auteur utilise le y du transform ; je pense que ça pourrait fonctionner dans mon cas mais le résultat serait surement plus juste avec la vélocité ?
Je voudrais l'utiliser comme base pour l'adapter à ma situation.
https://www.youtube.com/watch?v=OAbOeeoRy_I
Seulement ça n'est valable que pour un FPS controller qui utilise un character controller et cela ne fonctionne pas avec le RigidBodyFPSController.
Dans ce petit scripte il faudrait, entre autre, que je trouve le moyen de tester la variable m_IsGrounded définie dans le RigidBodyFPSController. GroundCheck étant private je ne sais pas si c'est possible ?
Dans la vidéo, l'auteur utilise le y du transform ; je pense que ça pourrait fonctionner dans mon cas mais le résultat serait surement plus juste avec la vélocité ?
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class FPSDamageScript : MonoBehaviour
{
float lastPositionY = 0f;
public float fallDistance = 0f;
public float MaxFall = 5f;
Transform Player;
public Text TxHealth;
public int Health = 100;
CharacterController Cc;
// Start is called before the first frame update
void Start()
{
Cc = GetComponent<CharacterController> ();
Player = GetComponent<Transform> ();
}
// Update is called once per frame
void Update()
{
TxHealth.text = "Health" + Health;
// Si LP Y est plus grand que pos Y du player -> Il tombe -> Calcul FallDistance
if(lastPositionY>Player.transform.position.y)
{
fallDistance += lastPositionY - Player.transform.position.y;
}
if(fallDistance>=MaxFall && Cc.isGrounded)
{
Health -= 10;
ResetVar();
}
if(fallDistance < MaxFall && Cc.isGrounded)
{
ResetVar();
}
// Maj de LastPositionY
lastPositionY = Player.transform.position.y;
}
void ResetVar()
{
fallDistance = 0;
lastPositionY = 0;
}
}
Re: [DB AL]Faire une barre de vie
Dans ton cas, ce genre de calcul ne te sert pas vraiment, tu disposes de la vélocité de ton player, comme déjà évoqué plus haut.
Pour une donnée private, tu peux créer dans le script RigidBodyFPSController une methode public permettant la récupération de m_IsGrounded (moins conseillé, mais tu peux aussi passer m_IsGrounded de private en public).
Tout est possible. C'est la base.
Pour une donnée private, tu peux créer dans le script RigidBodyFPSController une methode public permettant la récupération de m_IsGrounded (moins conseillé, mais tu peux aussi passer m_IsGrounded de private en public).
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ
Re: [DB AL]Faire une barre de vie
Bonjour,
Il faut que tu calcule la distance entre ton sol et le player que tu récupère dans une variable
Et que tu calcule l’ancienne position de ou tu es tombé
Je te donne un code ce soir : exemple de code
Voici une vidéo il faut adapter les code : https://www.youtube.com/watch?v=J1mf2kDOoT0
Il faut que tu calcule la distance entre ton sol et le player que tu récupère dans une variable
Et que tu calcule l’ancienne position de ou tu es tombé
Je te donne un code ce soir : exemple de code
Code : Tout sélectionner
public Vector3 Velocity;
public Rigidbody RidgedBody;
public bool Vivant = true;
private double dectolerance = 12.0;
void Start()
{
RidgedBody = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
if(Vivant)
{
// calcule de la distance entre A et B pour voir si le joueur est Vivant
Vivant = Vector3.Distance(RidgedBody.velocity, Velocity) < dectolerance;
Velocity = RidgedBody.velocity;
}
}
Voici une vidéo il faut adapter les code : https://www.youtube.com/watch?v=J1mf2kDOoT0