Jump to content

francoe1

Admins
  • Content Count

    1,048
  • Joined

  • Last visited

  • Days Won

    81

Everything posted by francoe1

  1. Busca información sobre Animator Layer y Animator LayerMask.
  2. Sí, fíjate que en inicio del foro te muestra la versión recomendada.
  3. Elimina la variable volumen y en la función start llama a la función SetLevel con el valor guardado. SetLevel(PlayerPrefs.GetFloat("Musica"));
  4. Cada animación puede tener una posición diferente para el pivote, es por eso que cuando cambias la posición del personaje se cambia. Todas la animaciónes deben tener el pivote 0,0,0.
  5. Pienso igual, a veces los desarrolladores damos muchas vueltas buscando la forma "correcta" de hacer las cosas, pero lo que verdaderamente importa es que te sientas cómodo con el resultado 😊 ... Es mejor implentar rápido nuestras ideas y luego refinar... Comentario únicamente aplicado para personas que trabajan de forma solitaria en proyectos pequeños.
  6. No deberías detectar la pulsación de una tecla dentro del callback del colisionador. Te recomiendo crees una variable booleana y la asignes detectando el input desde la función update. Luego usa ese valor como flag para el callback del colisionador.
  7. Más que la dimensión intentaría revisar el pivote. Te dejo si querés un assets que desarrolle para crear Sprite animations https://assetstore.unity.com/packages/tools/sprite-management/spriteanimator-153405
  8. Ey, ey.... La verdad es que hasta que me moví el juego estaba bien, me gusta, tienes que hacerlo un poco más rápido, pero mi felicitación sobre la mesa por el resultado 🙂
  9. @ST-16 Todo apunta ser un problema del PIVOTE, y con certeza de un 100% te diría que así es.
  10. @nomoregames ¿404 no found?
  11. 1 - Ya cuenta con una estructura de datos para tu información. 2 - Tienes una función que captura el tiempo desde el último "Add Energy". 3 - Cuando cierras la app guardas la fecha y hora. 4 - Cuando abres la aplicación cargas la hora y la comparas para saber cuantos minutos pasaron. 5 - En un futuro si quieres evitar hagan trampa cerrando y cambiando la hora del juego podes encriptar el dato guardado y obtener la hora desde un servidor NTP. public class GameInfo { public DateTime LastAddEnergy { get; set; } public int GetEnergyAvailable (int minutes) { int amount = Mathf.CeilToInt ((GetCurrentTime () - LastAddEnergy).TotalMinutes / minutes); if (amount != 0) LastAddEnergy = GetCurrentTime (); return amount; } private DateTime GetCurrentTime () { return DateTime.Now; // O Lo obtenes desde un servidor NTP } public void Save () { PlayerPref.SetString ("date_addEnergy", LastAddEnergy.ToString ()); } public void Load () { if (PlayerPref.ExistKey ("date_addEnergy")) LastAddEnergy = new DateTime (PlayerPref.GetString ("date_addEnergy")) } }
  12. Si, cumpliendo las normas de la sección de proyectos!
  13. El orden de renderizado está definido por la jerarquía. Deberías poner el RawImage arriba del botón en la ventana de Hierarchy.
  14. francoe1

    City Building

    Se ve interesante, es fácil de aplicar? Que algoritmo estás utilizando para buscar el camino?
  15. @Igor El problema de esta creando constátente objetos es la llamada y costo del recolector de basura. En PC no se nota en sesiones cortas, pero te diría que habrás el Administrador de Tareas y Dejes disparando tu juego unas 3 horas y verás como el consumo de RAM empieza a subir. Por otro lado la implementación de un PoolObject no debería por que ser un cambio radical en tu Script. Simplemente cambiarias Instantiate por PoolObject<BulletBehaviour>["bullets"].GetObject(); ------------------------------------ @iRobb Me parece una buena arquitectura, en lo particular la sección 2 y 3 nunca las entendí a pesar de querer implementarlas parece como un pseudo MVC, no digo que esté mal, solo digo que nunca entendí la aplicación en Unity, use y uso MVC para desarrollo de software en general. El único consejo que te daría es sobre AudioManager, es importante que en cada juego definas los Mixer que vas a contener, por eso, dentro del manager deberías tener una lista con todos los mixer, por ejemplo FX, UI, SOUNDs, MUSIC ... etc.. y cuando llamas a AudioManager.Instance.PlayOnShot(MixerIndex, AudioManager.Instance.GetAudioClip("MiAudio"));
  16. De nada, no, no tiene un nombre.
  17. Creas una lista de todas las personas, esta puede ser estática y estar dentro del componente "ActorBehaviour" luego con una función de contacto basándonos en la distancia calcularía el nivel de contagio actual. Pseudo código public class ActorBehaviour : MonoBehaviour { public int InfectionAmount => m_infectionAmount; public bool IsInfected => m_infectionAmount > 95; [SerializeField] private LayerMask m_layerMask = 0; [SerializeField] private int m_radiusInfection = 3; [SerializeField] private bool m_usePhysicsMode = true; [SerializeField, Range (0, 100)] private int m_infectionAmount = 0; private void Start () { m_actors.Add (this); } private void OnDestroy () { m_actors.Remove (this); } private void Update () { foreach (ActorBehaviour actor in GetNearestActors ()) actor.Contact (this, Vector3.Distance (transform.position, actor.position)); } private void Contact (ActorBehaviour from, float distance) { m_infectionAmount += Mathf.RountToInt (from.InfectionAmount * (distance / m_radiusInfection)); m_infectionAmount = Mathf.Clamp (m_infectionAmount, 0, 100); } private IEnumerable<ActorBehaviour> GetNearestActors () { if (m_usePhysicsMode) { RaycastHit[] hits = Physics.SphereCastAll (new Ray (transform.position, Vector3.Up), m_radiusInfection, Mathf.Infinity, m_layerMask); foreach (RaycastHit hit in hits) { ActorBehaviour actor = hit.GetComponent<ActorBehaviour> (); if (actor is object) yield return actor; } } else { foreach (ActorBehaviour actor in GetActors ()) { if (Vector3.Distance (transform.position, actor.position) < m_radiusInfection) yield return actor; } } } #region Static Region private static List<ActorBehaviour> m_actors { get; set; } = new List<ActorBehaviour> (); public static IEnumerable<ActorBehaviour> GetActors () { for (int i = 0; i < m_actors.Count; i++) if (m_actors[i] is object) yield return m_actors[i]; } #endregion } Podes elegir si hacerlo mediante colisiones o recorriendo la lista comparando distancias, ambos métodos son un poco lentos, pero son los más fáciles de implementar. Lo mejor en este caso seria implementar QuadTree o similar. Saludos.
  18. @jecfmaatrix Por favor preséntate en la sección correspondiente y podrás realizar las consulta en la categoría de scripting.
  19. @Flauros Te recomiendo veas videos sobre programación en YouTube e intentes aprender a programar al menos lo básico, luego cuando prueba nuevamente crear cosas dentro de Unity3D, la comunidad intenta ayudarte pero estas cosas son muy sencillas y demuestran que no tienes el conocimiento básico. La comunidad es de "Desarrolladores" de videojuegos, no brindamos ayuda de programación básica, los próximos topics con estas características serán eliminados informando al usuario, si la acción se vuelve a repetir tendré que tomar medidas más drásticas.
  20. Te propongo 2 alternativas para poder encontrar una solución a tu problema. 1 - Haz un vídeo, guardalo en to Google drive y compartilo con permisos para ver. 2 - únete a nuestro servidor de discord para tener un contacto más directo.
  21. Esta imagen es tu respuesta. El pivote está en el lugar incorrecto.
UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...