Jump to content
Sign in to follow this  
croviman

Salud autoregenerativa.

Recommended Posts

Buenas... como muchos saben estoy en medio de un proyecto y soy un CERO en código. Por lo que la única opción que tengo es pedir un poco de ayuda a esta comunidad. Alguien podría darme una mano con un script que sirva para:

1) El personaje camina sobre una superfice determinada y va perdiendo energía hasta morir. 

Para eso tengo este código:

Este va en el PLAYER

using UnityEngine;

public class PlayerHealth : MonoBehaviour
{
    public float startingHealth = 200f;
    public float currentHealth;

    void Awake()
    {
        currentHealth = startingHealth;
    }

    void Update()
    {
        if (currentHealth <= 0f)
        {
            Destroy(gameObject);
        }
    }

    public void remove(float amount)
    {
        currentHealth -= amount;
    }
}

Y este va en la superficie

using UnityEngine;

public class PlayerDrown : MonoBehaviour
{
    void OnTriggerStay(Collider drown)
    {
        if (drown.gameObject.tag == "Player")
        {
            PlayerHealth health = drown.GetComponent<PlayerHealth>();

            if (health != null)
            {
                health.remove(1);
                Debug.Log("Player is drowning");
            }
        }
    }
}

FUNCIONA! Pero no cumple con el lo que necesito en el punto 2)

2) Si el player sale de esa superficie automáticamente recupera su energía de manera gradual hasta rápidamente completarla al 100% 

Quien me de una mano irá a los créditos!

Desde ya MUCHAS GRACIAS!!!

Edited by croviman

Share this post


Link to post
Share on other sites
9 hours ago, croviman said:

Buenas... como muchos saben estoy en medio de un proyecto y soy un CERO en código. Por lo que la única opción que tengo es pedir un poco de ayuda a esta comunidad. Alguien podría darme una mano con un script que sirva para:

1) El personaje camina sobre una superfice determinada y va perdiendo energía hasta morir. 

Para eso tengo este código:


using UnityEngine;

public class PlayerHealth : MonoBehaviour
{
    public float startingHealth = 200f;
    public float currentHealth;

    void Awake()
    {
        currentHealth = startingHealth;
    }

    void Update()
    {
        if (currentHealth <= 0f)
        {
            Destroy(gameObject);
        }
    }

    public void remove(float amount)
    {
        currentHealth -= amount;
    }
}

FUNCIONA! Pero no cumple con el lo que necesito en el punto 2)

2) Si el player sale de esa superficie automáticamente recupera su energía de manera gradual hasta rápidamente completarla al 100% 

Quien me de una mano irá a los créditos!

Desde ya MUCHAS GRACIAS!!!

bool trap;
void Update(){
//esta en la trampa
if(trap){
	remove(amount);

}else{

regenerate(amount);

}
}
public void regenerate(float amount){

if(currenHealth< MaxHealth)
currenHealth += amount;
}

Es una idea. Si está fuera de la trampa, llamas al método regenerar, usando una boleana.

Edited by Megadok

Share this post


Link to post
Share on other sites
1 hour ago, Megadok said:

bool trap;
void Update(){
//esta en la trampa
if(trap){
	remove(amount);

}else{

regenerate(amount);

}
}
public void regenerate(float amount){

if(currenHealth< MaxHealth)
currenHealth += amount;
}

Es una idea. Si está fuera de la trampa, llamas al método regenerar, usando una boleana.

Genial! Pero este código lo tendría que poner en un script nuevo aparte o en el mismo que ya tengo del player o de la superficie???? En ese caso: Como los ensamblo?

 

He hecho esto: 

using UnityEngine;

public class PlayerHealth : MonoBehaviour
{
    public float startingHealth = 200f;
    public float currentHealth;

    void Awake()
    {
        currentHealth = startingHealth;
    }

    void Update()
    {
        if (currentHealth <= 0f)
        {
            Destroy(gameObject);
        }
    }

    public void remove(float amount)
    {
        currentHealth -= amount;
    }

    bool trap;
    void Update()
    {
       //esta en la trampa
          if(trap)
          { 
               remove(amount);
          }
               else
    {

              regenerate(amount);
          }
   
    public void regenerate(float amount)
    {
        if(currenHealth< MaxHealth)
            
            currenHealth += amount;
    }
 }

Pero me da error: error CS0106: The modifier 'public' is not valid for this item

 

Donde me equivoqué?

Edited by croviman

Share this post


Link to post
Share on other sites

Has intentado asignar public a algo que no lo soporta. Debería salirte la línea donde está el error en la console.

Share this post


Link to post
Share on other sites

1 - Estás asignando dos funciones Update.

2 - La segunda función Update no la estás cerrando

Te recomiendo que uses Bolt, puede ser más fácil en tu caso conseguir un resultado

 

Share this post


Link to post
Share on other sites
1 hour ago, francoe1 said:

1 - Estás asignando dos funciones Update.

2 - La segunda función Update no la estás cerrando

Te recomiendo que uses Bolt, puede ser más fácil en tu caso conseguir un resultado

 

Hola!  Como se hace? De veras no tengo idea...

Share this post


Link to post
Share on other sites
46 minutes ago, croviman said:

Hola!  Como se hace? De veras no tengo idea...

1 - Buscar en google "instalar bolt en Unity3D"

2 - Entrar en cualquier resultado y seguir los pasos

3 - Buscar forma de crear tu idea en nodos.

Share this post


Link to post
Share on other sites
On 4/12/2021 at 11:59 AM, francoe1 said:

1 - Buscar en google "instalar bolt en Unity3D"

2 - Entrar en cualquier resultado y seguir los pasos

3 - Buscar forma de crear tu idea en nodos.

Gracias... Lo instalé y lo estoy viendo... No va a ser nada sencillo por lo visto.

Share this post


Link to post
Share on other sites

Croviman,,, aquí un par de recomendaciones que a largo plazo te ahorraran mucho tiempo, esfuerzo y frustración.. en mi humilde opinión.

Si eres nuevo programando, aquí te dejo un tutorial de C# q es oro para nosotros los nuevos.

https://www.tutorialesprogramacionya.com/csharpya/

esta pagina se complementa con estos videos del mismo creador

https://www.tutorialesprogramacionya.com/csharpya/

 

después, la pagina de Unity tiene un excelente tutorial paso a paso, solo q es en ingles.

https://learn.unity.com/pathway/junior-programmer

 

En youtube hay miles de tutoriales, pero el de Unity te lleva paso a paso en una linea bien estructurada.

Para cuando termines esto tus problemas serán de otro tipo muy diferente.

 

Saludos a todos.

 

 

 

Share this post


Link to post
Share on other sites

Gracias a todos por tomarse el tiempo de responder... Al final lo hice de otra forma... Un trigger para que pierda vida dentro del agua y otro trigger a la salida del agua que te devuelve la energía...

Share this post


Link to post
Share on other sites
Sign in to follow this  

×
×
  • Create New...