Jump to content
UnitySpain

Ben

Registrados
  • Content Count

    8
  • Joined

  • Last visited

Community Reputation

1 Neutral

About Ben

  • Rank
    Recién Llegado

Profile Information

  • Especialidad
    Coder

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Estoy intentando hacer una seria de experimentos en RV y nada mas empezar me encuentro con un problema de físicas "sencillo" que no encuentro como resolver. Tengo en un controlador un rectangulo con el que quiero golpear una esfera, al hacerlo esta no reacciona como tendría aunque los 2 objetos tienen las físicas en el modo mas preciso, y tienen un material con bounce=1. Me he dado cuenta que si golpeo la pelota desde abajo esta "bota" lo que tendría que botar en el mismo momento de la colisión, pero al no aplicarse la aceleración del objeto que "la empuja" no se suma a la fuerza del bounce de la física y por eso reacciona mal, aquí doy por sentado que solo tendría que agregar a la velocity de la pelota, la del objeto que la impacta. Pero quiero ir un poco mas allá y es aquí donde tengo el gran problema: Si quiero aplicar un efecto completamente realista, me encuentro que no se como aplicar una fuerza de impacto basándose, no solo en el velocity del objeto que empuja, si no en el rigidbody del mismo, pongo un ejemplo: Si golpeo una esfera perfecta con una pala en vertical, la espera sera empujada en completo horizontal, en cambio si pongo la pala a 45º, y muevo la pala en perfecto horizontal, la bola saldrá en esta dirección, y esto es incorrect, la bola tendría también que elevarse al recibir un impacto de forma inclinada. Otro ejemplo seria si en vez de una bola esférica usas un cuadrado, si le impactas en el centro, saldrá en un horizontal perfecto, pero si se golpea cerca de una esquina, el cuadrado ademas de salir en horizontal, tendría que ir hacia abajo y también agregarse una pequeña fuerza de rotación. ¿Cuales son las formulas para aplicar esta física de impacto realista? ¿Unity tiene alguna función que me permita aplicar un impacto indicando el punto exacto de 2 rigidbodys + la velocity para que las físicas calculen esto de forma realista? Gracias.
  2. Vamos que lo de que rasque es normal entonces, de usar partículas con iluminación ya ni hablamos... He estado buscando mucho y ademas de muchas recomendaciones de bajar calidades en Project -> Quality y eliminar el "Sun" en Lighting por el shader que usa por defecto, (lo cual no me ayuda nada en el S3) lo que si he visto es que bajar la resolución con Screen.SetResolution(w, h, true) se nota una BURRADA, me refiero a que hacer una resolución del 90% en el S3 incrementa en mi ejemplo los FPS en 15... el problema ahora lo tengo con el UI que se me descojona al cambiar la resolución (los objetos de abajo se salen de la pantalla). Al final optare por desarrollar para el Nexus (algo medio) y por dejar al usuario una pantalla de "settings" y que el usuario pueda ajustar la resolución entre un 50% y el 100% ademas de poder habilitar o quitar cosas como el Glow.
  3. Buenas, este post es mas que nada para verificar si es un problema mio o es "normal". Tengo 3 dispositivos android para testear: Un Nexus5, Galasy S3 y tablet Lenovo Tab 2 10" Estoy haciendo un juego y en el exus me va bien después de ciertas optimizaciones, pero en los demás me va horriblemente mal (por debajo de 30FPS), asi que me ha dado por actualizar a unity 5.5, y hacer un proyecto desde cero para testear: - Nuevo unity, projecto 3D, sin adds, he agregado a la escena por defecto (cámara y una luz) un simple plano inclinado a 45º y he cambiado la geometría para que sea mas ancho y largo y ocupe toda la camara. - He puesto la cámara en ortográfico y ajustado el view distance a 50. - He agregado 10 cubos, por defecto sin shaders ni nada (blancos), a algunos les he cambiado el tamaño para que sean rectangulos. - He puesto las opciones de exportación de android, seleccionado solo ARM, multithread y el rendering en 2.0 (quitando el automatico y de la lista el 3, he leido que mejora mucho el rendimiento) - A uno de los cubos le he puesto una pequeña animacion con el animator para ver el "feeling" del movimiento, no solo los FPS. - He agregado un canvas con un texto y he metido un script para ver los FPS Cuando compilo esto, en los 3 dispositivos me da 59-60 constantemente. Ahora.. pillo la luz de la escena (la de por defecto) Control-D y compilo nuevamente la escena. Bajada de 10 FPS... 49-50, el cubo animado pegando trompicones a veces, faltal.. desactivo la luz adicional, compilo y de nuevo 60 FPS. He probado de todo: - Toquetear las opciones de lighting para usar backed CI, sin backed, aumentando y reduciendo los caches de las luces, cambiando opciones del compilador de Android (CPU Skinning, y nosecuantas cosas mas) y no consigo que con 2 simples luces direccionales me valla a mas de 60 FPS con una escena tan simple. Entiendo que son 2 (el S3 y la tab) dispositivos de gama baja, pero no se si es un problema de configuración o es el motivo que de que 80% de los juegos que veo para Android sean en 2D siempre, no me parece "normal" que el rendimiento sea tan malo.
  4. Cierto, usando el plano puedo mover lo que tengo dentro sin problemas! aun así sigo con problemas de rendimiento, me ha dado por mirar el profiler comparado con un projecto nuevo con solo el texto y el script para animar el texto, he probado a sacar el canvas del gameobject, meter el canvas fuera de todo, desactivar los demás elementos de la escena y me mejoro el rendimiento, al final me he dado cuenta que los FPS me bajan una burrada al poner las 2 luces (area y directional), si las pongo en "backed" en vez de realtime, la animación del canvas me va fluida, pero luego la escena 3D no me muestra las sombras correctamente... ¿No se puede hacer que el canvas ignore las luces de la escena? (o que las luces ignoren el canvas, he modificado el culling mask para omitir el layer UI y he metido el canvas en ese layer) Me parece muy raro que unas luces de la escena hagan tanto en el rendimiento del canvas... PD: He estado trasteando un poco, quite una luz y aumenta el rendimiento casi 80fps (en el editor), pero una cosa que he visto que consumía bastante también eran unas imágenes debajo del texto que muevo que baje de resolución (sprite2D -> override for android -> max size 128k), aun así, me parece taan raro que las luces de la escena 3D afecten al canvas, porque los FPS del juego no bajan de 60.
  5. Sobre lo del canvas siempre pensé que solo estaba pensado para "objetos 2D", por eso no pensé nunca en hacer lo inverso (meter cualquier cosa que no sea de UI dentrod el canvas), tendré que probar lo que me comentas y meter el gameobject contenedor dentro del canvas y probar. Lo de la cámara la verdad es que no me esta dando problemas, el rendimiento es bastante bueno y realmente la cámara solo se mueve en casos particulares, no siempre, el problema de rendimiento lo tengo aun con la cámara parada. Sobre lo de sacar de pantalla me refiero a, por ejemplo, tener un canvas con un panel al 100% para que haga de fondo, y dentro unos botones o imágenes, y lo que quiero es que al darle a un botón, mover todo fuera del área de la cámara haciendo un efecto de slideOut sacando todos los elementos por un lado (en plan position.x = screen.width para que se salga por la derecha). Lo de lo layers no lo pillo, ¿es una pregunta trampa? :P ahora mismo estoy renderizando en la cámara todos, pero es que realmente no tengo tantos objetos, no creo que sea ese el problema. Gracias!.
  6. Hola a todos. Estoy teniendo un problema realmente raro (o no, llevo trasteando unity solo un mes) que no consigo solucionar. Actualmente tengo una escena con una cámara en modo ortografico, y dentro de la cámara varios objetos que se mueven con ella, se que parece algo extraño pero tiene lógica... El problema lo estoy teniendo con un Canvas con una animación con iTween, exactamente tengo, un gameobject vació en el que he metido un canvas, este canvas los tengo en el render mode en "world" porque necesito hacer una animación con el y sacarlo de pantalla, cosa que no puedo hacer con un canvas en pantalla completa. El canvas esta a 1920x1080, con la escala 0.001 en X,Y y Z pero tengo un script que al iniciar el juego me lo redimensiona al tamaño de la pantalla del dispositivo (calcula los pixeles de ancho y alto) teniendo en cuenta el tamaño de la camara en ortográfico para que ocupe el 100% de la pantalla del dispositivo. Dentro del canvas tengo un texto a 160p animado con iTween, pegando saltos en loop y detrás un panel blanco sin transparencia, que tapa el juego que esta detrás El problema que tengo es que la animación del texto en Android va poco fluida.. parece que va a 30FPS, he probado a poner el canvas en los otros 2 modos que tapan toda la pantalla, y se ve mucho mas fluido el movimiento. He probado de todo, cambiar el texto y quitarle raycasting a todo dentro del canvas, cambiar el tamaño de fuente, quitarle el richtext y todas las opciones que hagan que consuma mas, transparencias y todo al texto, pero nada, no consigo una animación fluida en el modo "world". Lo mejor de todo es que el juego va perfecto, pero el canvas en frente va poco "smoth". Si se pudiera "sacar de pantalla" con animaciones el canvas en los modos a pantalla completa, me daría un poco igual, pero para poder hacer eso necesito el modo "World". ¿Alguna idea de porque este problema de rendimiento en este modo? Saludos.
  7. Entonces es como me imaginaba, existe una diferencia de tiempo entre la parte que se encarga de las colisiones y la parte gráfica. He intentado poner en los otros 2 modos tanto el jugador como las plataformas pero aun así me daban problemas, así que lo que he hecho es hacer algo parecido a lo del raycast pero con un collider transparente y como trigger que sea un 50% mas grande que el cubo en todas direcciones, así puedo detectar colisiones de canto / de lado contra los bordes de las plataformas, el código me ha quedado así: void OnCollisionEnter(Collision col) { if (col.gameObject.tag == "Player") { Rigidbody body = col.gameObject.GetComponent<Rigidbody>(); if (Mathf.Abs(this.GetComponent<Renderer>().bounds.max.y - col.gameObject.GetComponent<Renderer>().bounds.min.y) > 0.15) { } else { body.velocity = new Vector3(col.relativeVelocity.x, this.bounceForce, col.relativeVelocity.z); } } } void OnTriggerEnter(Collider col) { if (col.gameObject.tag == "GroundCheck") { if ((this.GetComponent<Renderer>().bounds.max.y - col.gameObject.GetComponent<MeshCollider>().bounds.min.y) > 0.15) { this.GetComponent<Collider>().isTrigger = true; } else { this.GetComponent<Collider>().isTrigger = false; } } } Y parece que ya no hace ningún efecto visual raro. Gracias!
  8. Buenas. No se si es el foro correcto, pero es que en los demás foros parece que no tengo permiso para publicar posts, si es posible que se mueva donde este mejor. Estoy intentando hacer un pequeño script para que unas plataformas en 3D (rectángulos 3D) permitan ser atravesadas por el jugador únicamente de debajo a arriba, haciendo que sean solidas y hagan rebotar al jugador de arriba a abajo. El problema que tengo es que si el jugador se mueve muy rápido, en ocasiones se produce como un lijero, casi imperceptible cambio de dirección del jugador al atravesar la plataforma, como si el objeto del colisionador de la plataforma no tuviera los valores de velocidad correctamente actualizados, tengo la sensación de que el evento OnCollisionEnter() no se actualiza exactamente al entrar haciendo que aparezca este efecto, este es mi código en las plataformas: void OnCollisionEnter(Collision col) { if (col.gameObject.tag == "Player") { Rigidbody body = col.gameObject.GetComponent<Rigidbody>(); if (Mathf.Abs(this.GetComponent<Renderer>().bounds.max.y - col.gameObject.GetComponent<Renderer>().bounds.min.y) > 0.1) { this.GetComponent<Collider>().isTrigger = true; body.velocity = new Vector3(col.relativeVelocity.x, col.relativeVelocity.y, col.relativeVelocity.z); // prevent block movement } else { this.GetComponent<Collider>().isTrigger = false; body.velocity = new Vector3(col.relativeVelocity.x, 10, col.relativeVelocity.z); } } } void OnTriggerExit(Collider col) { this.GetComponent<Collider>().isTrigger = false; } No se si es la mejor forma de hacerlo o existen mejores sistemas mas precisos, o cual puede ser exactamente el problema de esa "vibración" o pequeño cambio en el movimiento. Saludos.
×
×
  • Create New...