En este momento estás viendo Novato de C# que tiene problemas con CS0131: el lado izquierdo de una tarea debe ser una variable, una propiedad o un indexador

 – Unity

Novato de C# que tiene problemas con CS0131: el lado izquierdo de una tarea debe ser una variable, una propiedad o un indexador – Unity

Novato de C# que tiene problemas con CS0131: el lado izquierdo de una tarea debe ser una variable, una propiedad o un indexador

– UnityAssets3Free

bienvenido , soy jorge y aqui os traigo
nueva pregunta

Soy bastante nuevo en la codificación en C # y estoy tratando de aprender más. He estado tratando de trabajar en un juego de rol simple con estadísticas de nivel en el juego de rol y me quedé atascado tratando de aplicar daño a un enemigo según las estadísticas de mis personajes.

Justo cuando pensaba que había resuelto el problema al dividir mi secuencia de comandos de estadísticas para el jugador por un segundo para las Unityes enemigas, desafortunadamente me encontré con el problema en el que el lado izquierdo de la asignación tenía que ser una propiedad variable o un indexador y no importa cómo por mucho que busco soluciones, me quedo perplejo. ¿Alguien podría echar un vistazo a mis guiones y señalar cualquier error evidente que haya cometido?

¡Por favor y gracias!

   public void TakePhysicalDamage()
    
    defaultStats.GetPhysicalDamage()-= armor; //This is the offending line
    physicalDamage = Mathf.Clamp(physicalDamage, 0, int.MaxValue);
    health -= (int)Math.Round(physicalDamage);   
    
    if(health <= 0)
        
        health = 0;
        Die();
    

void Die()

    
        playerLevel.AddExperience(experience_reward);
    
    Destroy(gameObject);


}

Aquí está el script de playerstats (defaultstats) solo como referencia desde donde estoy tratando de obtener el daño físico

[SerializeField] fuerza de flotabilidad = 5f;
[SerializeField] floatDaño físico = 5f;

  public float GetPhysicalDamage()
  
    return physicalDamage += strength;
  

Lo siento si esto suena súper básico, ¡pero échale un vistazo si estás aburrido!

1 respuesta 1

Estás tratando de modificar una función:

defaultStats.GetPhysicalDamage()-= armor;

pero no puedes porque GetPhysicalDamage simplemente devuelve daño, no está configurado como una propiedad que le permitiría modificarlo (¡y tampoco haga eso!)

public float GetPhysicalDamage()

  return physicalDamage += strength;

En cambio, parece que tienes una variable physicalDamage que deberías usar en su lugar, como:

public void TakePhysicalDamage()

    physicalDamage = defaultStats.GetPhysicalDamage() - armor; //This is the offending line
    physicalDamage = Mathf.Clamp(physicalDamage, 0, int.MaxValue);
    health -= (int)Math.Round(physicalDamage);   
    
    if(health <= 0)
    
        health = 0;
        Die();
    

De hecho, en una inspección más cercana, creo que probablemente no estés haciendo lo que crees que estás haciendo. Aspecto physicalDamage se supone que es el daño base que estás infligiendo, pero cuando tienes una línea como la siguiente de GetPhysicalDamage():

return physicalDamage += strength;

Y si physicalDamage es 5 y strength son 5 entonces la primera vez que llamas GetPhysicalDamage() obtienes 10. PERO lo que estás haciendo es agregando la fuerza para el daño físico y almacenar este valor como el nuevo daño físico con el += operador, así que la próxima vez que llame GetPhysicalDamage() los physicalDamage variable ahora es 10 (de la llamada anterior) y ahora devuelve 15. Luego 20, 25, etc.

Creo que lo que quieres es solo la suma de daño físico y fuerza, como:

return physicalDamage + strength;

Pero si ese es el caso, creo que el nombre de la variable physicalDamage es engañoso Yo personalmente preferiría algo como basePhysicalDamage y luego puedes tener una propiedad como:

public int PhysicalDamage => basePhysicalDamage + strength;

Recomendaría especialmente hacer esto porque más adelante en su código, donde tiene problemas ahora, está modificando el physicalDamage variable en líneas como:

physicalDamage = Mathf.Clamp(physicalDamage, 0, int.MaxValue);

Esto también es confuso porque parece que estás intentando GetPhysicalDamage y modificarlo con armorpero cuando llamas GetPhysicalDamage y armor los obtienes de la misma fuente (local), por lo que sería el daño físico del jugador hecho a sí mismo con la armadura del jugador, o sería el daño físico de la multitud hecho a sí mismo con su armadura.

Pasaría el daño como argumento para que puedas enviar el daño de una cosa a otra, como:

public void TakePhysicalDamage(int damage)

    damage -= armor;
    damage = Mathf.Clamp(damage, 0, int.MaxValue);
    health -= (int)Math.Round(damage);
    if(health <= 0)
    
        health = 0;
        Die();
    

nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias

eso es todo,hasta la proxima

Deja una respuesta