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 - francoe1

#151
Otros / Unity Google Play + AdMod
Enero 25, 2019, 05:06:49 AM
https://assetstore.unity.com/packages/tools/integration/android-native-pro-125691 Mira este, estaba buscando la versión NO PRO. por que esta PRO tiene algunos problemitas.. Pero sin embargo puedes mirarla y probar si te va.
#152
Scripting / Ayuda con Raycasts!
Enero 25, 2019, 12:27:22 AM
Todos los IF estan bien, el problema que presentas es ASIGNACIÓN de VARIABLES que no se están utilizando.
 
La variable "b" la declaras dentro del bloque del IF, por lo que si no la utilizas en el mismo ámbito entonces te dará un Warning. "La variable 'b' se asignó pero nunca se uso"
 
 
 
IF, FOR, WHILE, FOREACH y algunas características más no requieren delimitar el bloque (BLOQUE: es todo aquello que se encierra en 2 llaves), es más los bloques funcionan por sí solo. Siempre y cuando estemos hablando de una línea. 
 

//Ejemplo 1 - Sin bloque
if (a > b)
Debug.Log("A win");
//Ejemplo 2 - Con Bloque
if (a > b)
{
Debug.Log("A win");
}

 
Ejemplo de USO de bloques en cualquier lugar.
 

private void Update()
{
  float c = 1;
  //BLOQUE 1
  {
    float a = 0;
    float b = 1;
   
    Debug.Log("Bloque 1 => " a + b * c);
    c++;
  }
 
  //BLOQUE 2
  {
    float a = 0;
    float b = 1;
   
    Debug.Log("Bloque 2 => " a - b * c);
  }
}

 
La variable C es local, quiere decir que solo puede ser utilizada dentro de la función UPDATE. Las variables a y b, pertenecen a un bloque de código, gracias a esto podes tener lógicas separadas dentro de una misma función.
 
 
 
Saludos.
#153
Otros / Unity Google Play + AdMod
Enero 24, 2019, 06:30:48 PM
Deberías corroborar el archivo - AndroidManifest.xml
 
En Assets Store existen varias herramientas para solucionar esta clase de problemas.
#154
Otros / Unity Google Play + AdMod
Enero 24, 2019, 04:50:26 PM
@PereMartra Interesante tu WordPress, me quede leyendo los blog sobre  Jugando con SQL Injection, bastante básico pero entretenido.
#155
Scripting / Script cierra unity
Enero 24, 2019, 04:38:08 PM
Te recomiendo algo para que lo tomes muy encerio y lo apliques desde el momento que lees este comentario.
 
1 - No deberias usar UnityScripts, ya se encuentra descontinuado y es un pseudo lenguaje donde confunde muchas características de la programación orientada a objeto. Desde este momento empieza por utilizar C#, todo te sera mucho mas simple y a medida que avances podrás resolver problemáticas complejas que UnityScripts no puede.
 
2 - El foro recomiendo una versión estable de Unity y esta es la que deberias de tener, con más razón si estás aprendiendo.
 
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 
Cuando empieces a programar con C# necesitarás practicar la abstracción de los problemas para poder reflejarlos dentro del código.
 
Te dejo el código que publicaste en C# y comentado-
 

//Using sirve para incluir [NameSpace (Nombres de espacio)] al codigo librerias de tercero, por ejemplo,
//System contiene clases como Action que se utiliza para representar un evento. UnityEngine contiene a MonoBeahviour, Transform, Vector3,2, etc.
using System;
using System.Collections; // NameSpace que contiene IEnumerator.
using UnityEngine;
   
[RequireComponent(typeof(NavMeshAgent))] // Atributo que indica que el componente NombreScripts requiere que el Objeto donde esta asignado contenga NavMeshAgent, Si no lo contiene lo agrega automaticamente.
public class NombreScripts : MonoBehaviour // <<< Todos los componente en Unity requiere Heredar de esta clase para que funcionen. Existen otros tipos de componentes que mas adelante podras ir descubriendo.
{
private NavMeshAgent m_navMeshAgent {get; set;}   // Componente NavMeshAgent usado como CACHE
private Transform m_meta {get; set;} // Variable Transform usado como CACHE

[SerializeField]
private int m_salud = 100; // Variable de Tipo Entero, utilizada para la SALUD
[SerializeField]
private bool m_patrullar = false; // Variable de Tipo Booleano, ¿utilizada como BANDERA (Flag)?
[SerializeField]
private Transform[] Puntos = null; // Variable de Tipo Arreglo de Transform, ¿Utilizada para el recorrido (WayPoints)?
[SerializeField]
private Action m_eventDead;    // Evento, al ser invocado se llaman todos los delegados (Funciones) asignado.

public bool IsAvailableMeta { get { return  m_meta != null; } } // Propiedad que nos returna con un Booleano si la Variable m_meta es NULL.

private void Awake()
{
   m_navMeshAgent = GetComponent<NavMeshAgent>(); // Obtenemos el componente NavMeshAgent y lo asignamos a m_navMeshAgent.

   m_eventDead += () =>  //Asignamos un delegado Anonimo al evento m_eventDead, este delegedo Destruye el objeto cuando muere.
   {
      Destroy(gameObject);
   };
   
   StartCorrutine(YieldUpdate()); // Iniciamos una corrutina para evitar buscar en cada ciclo del Update. Esto lo hago para que entiendas como funcionan estas cosas en C#.
}

private IEnumarator YieldUpdate() // Las Corrutinas son delegados que retornan un object IEnumerator, no es complejo de comprender pero en este momento te podria complicar bastante.
{
   while(true)  // Ciclo infinito
   {
      if(IsAvailableMeta) // Comprobar si m_meta esta asignado, si es asi, entonces que espere 1 segundo y vuelva a repetir el bucle.
      {
         yield return new WaitForSeconds(1);
         continue;
      }
      
      // si la condición anterior es falsa, entonces se llama a la función FindMeta, si se encuentra una meta se vuelve a dar 5 segundo antes de repetir el ciclo nuevamente, de lo contrario solo 1 segundo.
      
      if(FindMeta())
         yield return new WaitForSeconds(5);         
      else
         yield return new WaitForSeconds(1);         
   }
}

private void Update()
{
   if(IsAvailableMeta) // Si m_meta esta asignado entonces creas la logica requerida.
   {
   
   }
}

private bool FindMeta() // Metodo que nos devuelve un booleano para saber si se entontro o no una meta
{
   GameObject go = GameObject.FindGameObjectWithTag("Enemigo"); // Buscamos un GameObject que contenga el TAg Enemigo y lo asignamos a go (Variable Local)
   if(go != null) // Si go es diferente a NULL tomamos el componente transform y lo asignamos a m_meta, a la misma vez cortamos la ejecución de la función retornando un valor verdadero.
   {
      m_meta = go.transform;
      return true;
   }
   else // Si go es NULL entonces se cota la ejecución de la función retornando un valor falso.
   {
      return false;
   }
}

private void OnTriggerEnter(Collider col)
{
   if(col.gameObject.CompareTag("Enemigo")) // Utiliza CompareTag para verificar si el objeto colisionado tiene como TAG "Enemigo"
      TakeDamage(1); // Si es asi aplicar Daño de 1.
}

public void TakeDamage(int amount) // Función que aplica daño modificando la variable m_salud con el valor enviado a través del parametro amount.
{
   m_salud -= amount; // se decrementa m_salud con el valor de amount.
   if(m_salud <= 0 && m_eventDead != null) // se comprueba si m_salud es menor o igual a cero y si m_eventDead es diferente a null. m_eventDead es null cuando no se le asigna ningun delegado.
      m_eventDead.Invoke(); // si la condición anterior se cumple entonces invocamos m_eventDead.
}
}

 
 
#156
Offtopic / Dudas
Enero 24, 2019, 03:51:04 PM
¿Que pasara cuando ECS en Tiny pase a C#?
 
Sigue así, es perfecto que la gente sienta pasión por el desarrollo... 
#157
Offtopic / Dudas
Enero 23, 2019, 08:57:29 PM
Bastante interesante el Trabajo, felicitaciones por la iniciativa de apostarte a ECS en conjunto con Tiny Project... Creo esto tendrá una gran aceptación por parte de algunos desarrolladores, pero una vez se incorpore el concepto de ECS a Unity de manera más óptima y como única alternativa de desarrollo este "Tiny Project" terminará desapareciendo, es cierto que muchos desarrolladores se quejan del peso excesivo de los proyectos compilados y exponen ejemplos donde una escena con una cámara pesa 30mb cómo APK. Y es por esta razón que Unity intenta crear este proyecto, para juegos super simples y óptimos. Me imagino juegos con mecánicas al estilo Flappy Bird. 
 
A mi tambien me intereso muchisimo este tema, actualmente estoy leyendo como Unity implementó ECS ya que lo he utilizado para otros proyectos externos a Unity y fuera del ámbito de los juegos. Se ve prometedor, creo que Unity tiene mucho trabajo con el código compilado y los desarrolladores aún más con las pseudo soluciones que dan para que ciertas acciones sean más óptimas. 
 
No me quiero ir mucho del tema principal, me gusta mucho esto que lograste, sería más interesante si armaras un juego de tanques vistos desde arriba donde la gente que se va conectando pueda ir largando cañonazos entre sí, digo, seria mas entretenido.
 
Técnicamente hablando, el proyecto tiene algunos bug, al parecer al generar errores de conexión el cliente (Chrome) empieza a recolectar basura, estuve con el cliente en "Background" y note que la PC estaba empezando a ir lenta, abro el administrador de tareas y Chrome estaba ocupando 14GB de ram, algo que realmente me sorprendió, justamente se trataba de la pestaña donde estaba el juego. No creo que sea algo que hayas hecho mal, lo más probable es que esto tenga que recorrer un largo camino para ser un opción para el desarrollo.
#158
Assets / Guardar Cambios Al Prefab
Enero 23, 2019, 03:52:50 PM
Si es en la nueva versión de Unity fijate en Prefab Flows un blog que escribieron. 
 
Deberías utilizar Variación de Prefabs.
#159
Assets / Guardar Cambios Al Prefab
Enero 23, 2019, 01:39:24 PM
Los prefabs no se pueden editar en Runtime.
#160
Te recomiendo que leas esto, donde vas a aprender sobre Operadores lógicos.
 
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/
#161
Scripting / Ayuda con los SO porfavor!!
Enero 22, 2019, 03:57:04 PM
Tienes tres opciones,
 


  1.    Poner todos los Scriptables-Objects dentro de la carpeta Resources y seguir las instrucciones que describe en el link.


  2.    Crear una lista de Scriptable-Objects dentro de un script, por ejemplo DataSO y luego que tienes todo cacheado buscar por nombre, si esa lista no va a cambiar a lo largo de la ejecución del juego entonces podrias optar para que los Scripts hagan un referencia al índice de la lista para no tener referencia de memorias múltiples a un objeto.


  3.    Mezclar ambas, para que DataSO cargue y asigne a una lista todos los SO dentro de Resources.


Aunque parezca opciones diferentes la realidad es que los assets dentro de Resources se deben cargar completamente antes de que la escena finalice la etapa de carga, por lo que sería equivalente a tener todos los SO en una lista dentro de un scripts.
 
Si los SO solo contienen información podías crear archivos con formato Json y utiliza JsonUtility de unity para cargar la información y deserializar sobre un clase, de esta manera tendrías un sistema más flexible al exterior.
 
Si ninguna de las formas te convence te propongo utilizar Lite DB un sistema de base de datos basado en archivo, es NoSQL y se integra con Linq para su funcionamiento.
 
 
#162
Mira, UNET vino para irse, ya esta bastante muerto y descontinuado ¿la razón?, no es práctico para el desarrollo de un Juego, sirve para prototipar de manera acelerada pero pasando por alto muchas cosas.
 
Te recomiendo utilizar la siguiente librería https://github.com/francoe1/LiteNetLib
#163
Las múltiples variables (primer parámetro del for) la use muy pocas veces para la resolución de algunos problemas matematicos, solo como modo de resumen de código, al final queda bastante ilegible la lógica. 
 
Las múltiples acciones (ultimo parámetro del for) si lo uso bastante, ya que este permite trabajar con diferentes tipos de datos.
 
Nunca lo use para programar Juegos, ya que la implementación de estas técnicas son bastante dañinas para la lectura y el entendimiento, desde mi punto de vista es mejor no usarlas, pero, puede surgir la necesidad.
#164
@pioj Si, se puede declarar múltiples variables y múltiples acciones. suponiendo que la estructura de un for es (variables, condición, acciones).
 
Lo que no se puede hacer es declarar múltiples tipos de datos hasta la versión 4.5 .NET. El error está en las variables, (int alfa = 0, int beta  = 9). Si trabajas con el mismo tipo de datos entonces no es necesario redeclarar. 
 
Para que el bucle funcione solo debes eliminar la declaración de tipo.
 

for (int alfa = 0, beta = 9; alfa < 10; ++alfa, --beta )
{
  Console.WriteLine("Alfa:" + alfa + "     Beta:" + beta);
}

 
Saludos.
 
 
 
 
#165
General (Antiguo) / "Reinicio de escenas"
Diciembre 17, 2018, 12:25:14 AM
SceneManager.UnloadSceneAsync