Hola gente...
Os comento intento acceder a una variable de un script mediante el siguiente proceso:
function OnTriggerEnter(obj : Collider) {
if(obj.transform.tag == "Enemigo"){
var script = obj.transform.GetComponent(Enemigo);
script.vida -= damage;
}
[/quote]
Lo que me pasa es que a todos los enemigos que tienen el script unido les va quitando vida...
y solo quiero que le vaya restando la vida con el objeto en que entre en contacto.
Hay otra forma? Sabeis en que me estoy equivocando??
Muchas gracias de antemano!!
Se puede deber a que la variable "vida" sea un campo estático, o bien, porque OnTriggerEnter está detectando varios objetos.
Dudo mucho de que sea un campo estático por la forma de acceder a dicha variables. Verifica que On Trigger este solo colisionando con el objeto deseado.
Yo pienso que es porque todos los enemigos tienen el mismo codigo.
El verifica si esta dentro del collider y baja la vida a todos los objetos con el codigo.
La verdad no sabria que puede ser, pero intenta lo que dice francoe.
Como dice francoe1, una variable estática no puede ser por la forma de acceder a ella (tengo un poco oxidado mi javascript pero en C# no se puede acceder así), puede ser que el OnTriggerEnter este colisionando con varios objetos a la vez, pon una traza con Debug.Log() para ver cuantas veces entra dentro y déjanos ver el código del enemigo a ver si sacamos lo que es.
Buenas, las variables como energia, vida, etc son propias de cada gameObject, seguramente vida sea una public static, no lo se, lo que te conviene hacer es preparar en el script del enemigo una funcion publica que permita quitar vida en este caso
void OnTriggerEnter(Collider col){
if(col.GetComponent<ScriptdelEnemigo>()){ //podes detectar tmb con tags, yo prefiero detectar el componente
col.GetComponent<ScriptdelEnemigo>().QuitarVida(valorDaño);
}
}
y en el scirpt del enemigo
public void QuitarVida(int cantidad)
{
salud -= cantidad;
}
Yo prefiero trabajar con scripts de Salud o Health, ya que se aplica a cualquier cosa que admite daño como paredes, enemigos, el mismo Player, etc.
Saludos
@lightbug el problema esta posteado en unityscript no en C#
@francoe1 tenga razon y la variable sea 'static' si es asi borra ese argumento y ya.
Un Saludo :)
Cita de: kingtrase date=1479160481@lightbug el problema esta posteado en unityscript no en C#
@francoe1 tenga razon y la variable sea 'static' si es asi borra ese argumento y ya.
Un Saludo :)
Si me di cuenta, ahora llaman UnityScript a JavaScript, igual no importa el lenguaje importa la logica empleada, cambiando dos cosas podes pasar de uno a otro
saludos
@lightbug no te lo tomes a mal, te lo dije solo por que igual este usuario no sabe de C# copia tu codigo y se hace la picha un lio :D jajajaja no por otra cosa
Un saludo!
Jajaja No, no me lo tomo a mal para nada, esta perfecto copiar y pegar un codigo de un lenguage a otro, solo asi se aprende que jamas se debe copiar y pegar un codigo , lo mejor es analizarlo