Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - joserico

#1
Gracias @iRobb sé que mi cabeza no piensa como un programador sino como un diseñador y pensaba que era una buena solución :(


Al final he hecho lo que me has comentado en ambos scripts quedando algo así
 

float health = gameObject.GetComponent<HealthBar>().curHealth;
if (health <= 0)
{
    die();
}

 
Muchas gracias de verdad!
#2
@pioj Si con eso no tengo dudas. Entiendo que si pongo "CatapultaScript" funciona pero quiero que fincione tanto "CatapultaScript" como "ArqueroScript"
 
¿Cómo harías tú el Script? Abajo dejo mi código healthBar completo. Añade las modificaciones que creas oportunas.
 

using UnityEngine;
public class HealthBar : MonoBehaviour
{
    public float maxHealth = 100;       //Salud máxima
    public float curHealth = 100;       //Salud actual
   
    public GameObject bar;              //Objeto donde arrastramos la barra
    public Component script;            
   
    void Start()
    {
        receiveDamage(0);               //Actualiza el tamaño de la barra de salud
    }
    //Actualiza la barra de salud
    void updateHealth(float myHealth) {
        bar.transform.localScale = new Vector2(myHealth, bar.transform.localScale.y);
    }
    void callCharacterDie()
    {
        script.die();
    }
    public void receiveDamage(float damage)
    {
        curHealth -= damage;
        float calcHealth = Mathf.Clamp(curHealth / maxHealth, 0f, maxHealth);
        updateHealth(calcHealth);
        if (calcHealth <= 0)
        {
            callCharacterDie();
        }
    }
}

 
A la variable script de abajo tengo que instanciar tanto "arqueroScript" como "catapultaScript" para según el personaje que muera llame a una función u otra de los scripts arqueroScript o catapultaScript
 

public Component script;

 
Llevo dós días leyendo tutoriales y nada funciona! Gracias
#3
He creado un pequeño vídeo a ver si las cosas quedan más claras.
 


   
eature=oembed" width="480">

 
Gracias Ufita, a ver si así queda un poco más claro
#4
Pues me dice que no es un tipo válido
#5
Sinceramente gracias por tú comentario Arthure, me motiva mucho. Espero que no necesites nunca ayuda con Photoshop o Illustrator porque te voy a enumerar unas cuantar razones.
 
He puesto el ejempo anterior porque con esto y es como devería funcionar no funciona
 

public Component script; //En el inspector arrastro el componente script catapulta o arquero
script.die();

 
 
 
 
 
 
 
 
 
Cita de: Ufita date=1465307850Como ya te han comentado, mira un poco más el tema de programación. Como te dice Arthure (tranquilo al principio pasa) si creas una variable pública es tontería luego buscarla. 
   
   
      Si creas la variable de tipo Script, y la asignas en el inspecto, luego llamas a sus métodos, creo que más claro que como te lo ha dicho pioj no se puede. 
   
   

public Script variableScript;  
 
void callCharacterDie()
    {
       variableScript.die();
    }

   
       
   
   
      Por otro lado hacer el GetComponent cada vez que recibes daño es gastar muchos recurso recursos. Si lo pones publico (por inspector) no se busca, y si lo buscas hazlo en el start y asignalo a una variable.  
   


Hola Ufita, es que el tipo "Script" que comentas no existe. Yo lo asigno a Component pero luego no funciona
#6
Bueno después de un día probando no lo consigo, creo que no es tan fácil como pensaba. Este es mi código:
 

using UnityEngine;
public class HealthBar : MonoBehaviour
{
    public float maxHealth = 100;       //Salud máxima
    public float curHealth = 100;       //Salud actual
   
    public GameObject bar;              //Objeto donde arrastramos la barra
    public Component script;            
   
    void Start()
    {
        receiveDamage(0);               //Actualiza el tamaño de la barra de salud
    }
    //Actualiza la barra de salud
    void updateHealth(float myHealth) {
        bar.transform.localScale = new Vector2(myHealth, bar.transform.localScale.y);
    }
    void callCharacterDie()
    {
        gameObject.GetComponent<script>().die();
    }
    public void receiveDamage(float damage)
    {
        curHealth -= damage;
        float calcHealth = Mathf.Clamp(curHealth / maxHealth, 0f, maxHealth);
        updateHealth(calcHealth);
        if (calcHealth <= 0)
        {
            callCharacterDie();
        }
    }
}

 
Donde la variable script de tipo componen dan error. No puedo hacer script.die(); como yo esperaba
 

public Component script;
void callCharacterDie()
    {
        gameObject.GetComponent<script>().die(); //La variable script arrastro el componente arquero y catapulta pero no funciona aquí
    }

 
Seguro que es tan fácil como decis pero no doy con la solución
#7
General (Antiguo) / Parkube (Android)
Junio 06, 2016, 06:02:14 PM
Coincido con pioj, mientras veia el gameplay pensaba que habría quedado de lujo con unos buenos gráficos porque las mecánicas en sí están perfectas
#8
General (Antiguo) / slither.io
Junio 06, 2016, 05:59:10 PM
No se ve ningún vídeo ni nada...
#9
General (Antiguo) / Warcher Defenders
Junio 06, 2016, 05:57:01 PM
Me gusta la idea y los gráficos. Lo probaré cuando salga!
#10
Tiene buena pinta amigo!
#11

public GameObject myScript;
someScript = gameObject.GetComponent<myScript>();

 
Algo asi? He probado con todo pero no sé de qué tipo tengo que declararlo para luego arrastrarlo y poder recoger el componente :(
#12
Cita de: Braltor date=1465226532bienvenido, muy bonito el estilo de tu juego, felicitaciones!
   


Gracias! Saludos
#13
General (Antiguo) / Programa diseño 2D
Junio 06, 2016, 04:59:42 PM
Hola a todos, voy a exponer mi caso.
 
Yo trabajo las ilustraciones en Flash pero podría utilizar Photoshop o Illustrator, luego las coloco en capas en photoshop y las exporto para Spine.

Allí ya lo monto para exportar a Unity.
 
Para pixelart va muy bien Photoshop si lo configuras para ello pero es un rollo porque si luego quieres volver a la configuración normal tienes que cambiar.
 
 
 
Cualquier programa que exporte a png te va a servir creo yo

 
#14
Hola, he estado programando un script para gestionar la salud de los personajes pero no consigo lo que me interesa, que es que cada personaje tenga su propia animación de muerte y sus propios efectos. Lo que me falta es lo siguiente:
 

//en el archivo healthBar.cs que lo incluyo como componente script a cada personaje
    public void die()
    {
        //Aquí debería encontrar por ejempo el script "arquero.cs" o "catapulta.cs" donde tengo la función die();
        //y hacer algo como:
        someScript = gameObject.GetComponent<"arquero o catapulta">();
        someScript.die();
    }

 
La estructura sería algo así
 


  •    Arquero

       - Arquero.cs (componente script donde tengo su manera de morir)

       - HealthBar.cs (Común a todos los personajes)


  •    Catapulta

       - Catapulta.cs (componente script donde tengo su manera de morir)

       - HealthBar.cs (Común a todos los personajes)


El problema es que no encuentro la manera de pasar el componente script (arquero o catapulta) en una variable que luego pueda utilizar según el personaje que sea...
 
Gracias, espero que se entienda.
#15

Debug.Log("Hola");