Dudas Unity

Programación Orientada a Objetos (Tower defense - kingdom rush)

Moderator: julianmartinez16

Post Reply
User avatar
juanpa1612
Posts: 102
Joined: Tue Jan 19, 2016 10:40 am

Dudas Unity

Post by juanpa1612 » Mon Sep 26, 2016 1:33 pm

Profe como hago para llamar un metodo desde un evento?
Image
Quiero llamar "CargarNivel" por ejemplo cuando haga click sobre un objeto
Pero en las funciones del Evento "OnClick" no me aparece:
Image

Gracias

User avatar
xacarana
Site Admin
Posts: 1213
Joined: Fri Jan 15, 2016 6:13 pm

Re: Dudas Unity

Post by xacarana » Mon Sep 26, 2016 10:20 pm

Juan Pablo, trata poniendo el evento publico, la otra es usar alguno de los eventos disponibles, pero debes consultar cuando se disparan y para que sirve. O una opción mejor, pero todavía no la hemos visto es crear tu propio evento, usando delegados.
Andrés Bedoya Tobón
Profesor
"I only smile in the dark, I only smile when it's complicated" Raybiez

User avatar
Sara.Rod
Posts: 107
Joined: Tue Jan 19, 2016 12:09 pm

Re: Dudas Unity

Post by Sara.Rod » Fri Oct 07, 2016 4:08 pm

xacarana wrote:.
No se si puedo poner esto aquí o debería crear otro post,, pero tengo un problemita con Unity.
No puedo editar ningún script porque me sale esto cada vez que abro monodevelop :
Image
Se abre el script de Tiled2Unity automaticamente con estos errores,,
No he movido intencional (ni que me haya dado cuenta accidentalmente) el archivo del nivel, pero igualmente intenté:
1. Re-importar el archivo de Tiled desde tiled 2 unity
2. Guardar el archivo de Tiled bajo otro nombre y re-importar todo

Ninguna de estas opciones me ha funcionado.
El juego aún corre con normalidad, es solo cuando quiero editar un script que no me deja compilar :')

Me empezó a salir cuando creé un script de WaveSpawner, no estaba moviendo el nivel en ese momento, lo cual solo me confunde mas, ya que aunque le había cambiado unos tiles al nivel y reimportado eso fue el día anterior y seguía funcionando con normalidad :s

El repositorio está en bitbucket y ya lo compartí con tu cuenta,,

aiuda por favor, no se que hice,,

EDIT: Al final lo arreglé al quitar toda la parte de Tiled2Unity y re-importar todo el fondo,, pero me aparece este letrerito en mono develop, no se si tenga algo que ver

Image
Sara Rodríguez V / Fundamentos de Prog. SMSTR I 2016 // Prog. orientada a objetos SMTR II 2016 /

User avatar
CalleSantiago
Posts: 80
Joined: Tue Jan 19, 2016 10:38 am

Re: Dudas Unity

Post by CalleSantiago » Mon Oct 10, 2016 12:34 am

Ayuda por favor

Lo que pasa es que aún no logro que cuando la bala entre en colisión con un barco, se destruya cualquiera de los dos, he intentado creando un método de manera que cuando estén colisionando, se detecte un gameObject por el nombre y se destruya, pero no ocurre nada, si miran en el último if, sí logro destruir la bala pero solo cuando se sale del escenario, de otra manera no he podido, si me pueden dar ayuda o encuentran un tutorial que me sirva, lo agradecería mucho, feliz noche.

Código de la bala

Code: Select all

using UnityEngine;
using System.Collections;

public class Bullet : MonoBehaviour {
    private float speedBullet;
    Vector2 _direccion;
    bool isReady;

    void Awake()
    {
        speedBullet = 8;
        isReady = false;
    }

    public void setDirection(Vector2 direccion)
    {
        _direccion = direccion.normalized;
        isReady = true;
    }

    void Update () {
	if(isReady)
        {
            
            Vector2 position = transform.position;
            position = position + _direccion * speedBullet * Time.deltaTime;

            transform.position = position;
            Vector2 min = Camera.main.ViewportToWorldPoint(new Vector2(0, 0));
            Vector2 max = Camera.main.ViewportToWorldPoint(new Vector2(1, 1));
         
            if((transform.position.x < min.x) || (transform.position.x > max.x) || 
                (transform.position.y <min.y) || (transform.position.y > max.y))
            {
                Destroy(gameObject);
            }           
        }
	}
}
Santiago Calle R.
Programación orientada a objetos.
Image

User avatar
juanpa1612
Posts: 102
Joined: Tue Jan 19, 2016 10:40 am

Re: Dudas Unity

Post by juanpa1612 » Mon Oct 10, 2016 10:19 am

CalleSantiago wrote:Ayuda por favor

Lo que pasa es que aún no logro que cuando la bala entre en colisión con un barco, se destruya cualquiera de los dos, he intentado creando un método de manera que cuando estén colisionando, se detecte un gameObject por el nombre y se destruya, pero no ocurre nada, si miran en el último if, sí logro destruir la bala pero solo cuando se sale del escenario, de otra manera no he podido, si me pueden dar ayuda o encuentran un tutorial que me sirva, lo agradecería mucho, feliz noche.
Proba con este código, de pronto puede servir:

Code: Select all

void OnTriggerEnter2D(Collider2D collider)
	{
		if (collider.tag.Equals ("Barco")) 
		{
			collider.gameObject.SetActive(false);
			Destroy(gameObject)
		}
    }
A todos los barcos les pones un Tag para que cuando la bala choque con uno de esos se destruya.

User avatar
xacarana
Site Admin
Posts: 1213
Joined: Fri Jan 15, 2016 6:13 pm

Re: Dudas Unity

Post by xacarana » Mon Oct 10, 2016 7:59 pm

Sara.Rod wrote: EDIT: Al final lo arreglé al quitar toda la parte de Tiled2Unity y re-importar todo el fondo,, pero me aparece este letrerito en mono develop, no se si tenga algo que ver
Que bueno que te pudiste defender, cuando se trabaja con plugins externos a unity se debe tener precaución ya que estos son programas que pueden tener algúns bugs, además puede que esten hechos para versiones anteriores de unity, por tanto es importante revisar los requerimientos técnicos, ya que Unity últimamente esta cambiando y deprecando funcionalidades.

Con respecto al letrero es normal cuando se trabaja con mac que aparezca ese letrero, se puede omitir, pero se recomienda convertir el formato como sugiere el mensaje, ya que he visto proyectos que dejan de compilar por un manejo de los saltos de línea y ese tipo de problema es dificil de detectar.
Andrés Bedoya Tobón
Profesor
"I only smile in the dark, I only smile when it's complicated" Raybiez

User avatar
xacarana
Site Admin
Posts: 1213
Joined: Fri Jan 15, 2016 6:13 pm

Re: Dudas Unity

Post by xacarana » Mon Oct 10, 2016 8:02 pm

CalleSantiago wrote: Lo que pasa es que aún no logro que cuando la bala entre en colisión con un barco, se destruya cualquiera de los dos
Nosotros vamos a ver un ejemplo de como solucionar este tipo de situaciones dentro de poco, por el momento la solución es poner colliders con trigger event, para que al producirse la collision se destruya la bala, sin embargo les adelanto que las balas no se deben destruir, sino que se deben reciclar, en algo que se llama object polling, de esta forma se recicla memoria.
Andrés Bedoya Tobón
Profesor
"I only smile in the dark, I only smile when it's complicated" Raybiez

User avatar
Sara.Rod
Posts: 107
Joined: Tue Jan 19, 2016 12:09 pm

Re: Dudas Unity

Post by Sara.Rod » Sun Oct 16, 2016 10:04 pm

xacarana wrote:
Sara.Rod wrote:
Profeee, me surgió otro problema con los scripts de Unidad, ayudaa

Estaba trabajando en ajustar la barra de salud, normal, cuando aparece un error como el de la clase, por no inicializar, bien
Image

Pero creo que no entendí que era lo que tenía que inicializar,,
Image

No se si se entiende bien pero actualicé el repositorio, ahí están los scripts completos,,
Sara Rodríguez V / Fundamentos de Prog. SMSTR I 2016 // Prog. orientada a objetos SMTR II 2016 /

User avatar
xacarana
Site Admin
Posts: 1213
Joined: Fri Jan 15, 2016 6:13 pm

Re: Dudas Unity

Post by xacarana » Tue Oct 18, 2016 6:43 am

Revisa que el objeto unidad haya sido asignado antes de preguntar por el miembro dato salud.

Code: Select all

	if(unidad != null)
	{
	  anim.SetInteger(Estado_Salud,unidad.Salud);
	}
	else
	{
	   Debug.Log("La unidad no ha sido asignada");
	}
Andrés Bedoya Tobón
Profesor
"I only smile in the dark, I only smile when it's complicated" Raybiez

User avatar
CalleSantiago
Posts: 80
Joined: Tue Jan 19, 2016 10:38 am

Re: Dudas Unity

Post by CalleSantiago » Sun Oct 30, 2016 3:15 pm

Aiuda

Aún no logramos solucionar que se detecten los barcos por el tag en el momento del disparo, las torres solo disparan a la primera oleada, intentamos ya con el "FindGameObjectWithTag" pero no funciona.
Agradeceríamos mucho una ayuda.

Code: Select all

if (dist <= distancia_umbral)
        {
            this.tiempo += Time.deltaTime;
            Debug.DrawLine(this.transform.position, enemigo.transform.position, Color.green);

            GameObject enemig = GameObject.Find("Barco1");
            if (enemig != null)
            {
                if (this.tiempo > this.tiempoDeSalir)
                {
                    this.tiempo = 0;
                    GameObject bullet = (GameObject)Instantiate(CanonBall);
                    bullet.transform.position = transform.position;
                    Vector2 direction = enemig.transform.position - bullet.transform.position;
                    bullet.GetComponent<Bullet>().setDirection(direction);
                }
            }
           
            
        }
Santiago Calle R.
Programación orientada a objetos.
Image

Post Reply