0

Estoy intentando hacer una operación muy sencilla en Unity, en la que tengo un problema con el siguiente código:

public class Vida : MonoBehaviour
{
    public int hp = 100;

    public void RestarVida(int cantidad)
    {
        hp -= cantidad;
    }
}
public class Damage : MonoBehaviour
{
Vida v;
public int cantidad = 10;
public void mkDmg()
{
    v.RestarVida(cantidad);
}    
}

Quiero llamar a la función public void RestarVida(int cantidad) desde Damage.cs, y está definida en otro archivo Vida.cs. Al hacerlo me da este error:

NullReferenceException: Object reference not set to an instance of an object.

Contexto por si ayuda: Al clicar un botón tiene asignado un objeto vacío (ButtonResponder) con el script citado.

Imagino que será una tontería, porque no puede haber cosa más sencilla... pero estoy empezando en C# y vengo de Python... No sé qué me está fallando... Parece correcto.

padaleiana
  • 2,175
  • 5
  • 16
  • 24
Jaime
  • 1
  • Lo pruebo y marca error porque no se reconoce el tipo MonoBeahabord. Pero la solución puede estar cambiando v.RestarVida(cantidad); por Vida.v.RestarVida(cantidad); – Alejandro Caro Aug 01 '21 at 21:45
  • Gracias por tu respuesta Alejandro! Pero Vida.v.RestarVida(cantidad); da un error de compilado donde 'Vida' does not contain a definition for 'v' – Jaime Aug 01 '21 at 21:55
  • 1
    Nose que haga eso de MonoBehaviour pero si hablamos de C# puro no puedes llamar al método de una clase sin haber creado la instancia antes, o sea v = new Vida(); – Cristina Carrasco Aug 01 '21 at 21:57
  • 2
    Puedes intentar crear la instancia: v = new Vida(); despues llamar al metodo v.RestarVida(cantidad); – Cristina Carrasco Aug 01 '21 at 21:57
  • Cristina Carrasco. Me gustaría contactarte contigo por privado, ya que tengo un código que marca error y no sé como solucionarlo. – Alejandro Caro Aug 02 '21 at 14:05

1 Answers1

1

Solucion instaciar el objeto v, de la siguiente manera:

public class Damage : MonoBehaviour
{
  var v = new Vida();
  public int cantidad = 10;
  public void mkDmg()
  {
    v.RestarVida(cantidad);
  }    
}
TheOligarch
  • 1,051
  • 6
  • 12