Jump to content

Igor

Registrados
  • Content Count

    808
  • Joined

  • Last visited

  • Days Won

    56

Everything posted by Igor

  1. tambien puedes invokar una funcion con retraso Invoke("miFuncion", retrasoEnSegundos)
  2. prueba la funcion esa que he encontrado... el rendimiento dependera de la cantidad de poligonos del avion... si no te funciona ya intentaria escribirte la funcion yo mismo... o prueba tu si quieres... sino se me ocurre lo de la camara "orthographic"... no hace falta que tenga mucha resolucion... y puedes hacer el recuento de pixeles medio rapido...
  3. explicanos un poco mas que es lo que quieres hacer para que podamos ayudarte mejor... calcular la superficie de un mesh tendrias que usar la formula del area de un triangulo iregular en cada de los triangulos que forman el mesh... pero claro... tu quieres el area de triangulo proyectado respecto a un direction "v", no del triagulo real... entonces se complica mas... tendrias que recalcular cada arista (linea) parecido a como te he explicado antes.... para despues calcular el area... tambien se me ocurre que puedes usar una camara "ortografica" (que solo grabe ese mesh) para conseguir una imagen de la proyeccion del mesh viendolo en la direccion "v".... y entonces con esa imagen calcular la superficie haciendo recuento de pixeles (sabiendo el "size" del "orthographic" de la camara, claro) quieres hacerlo solo una vez en void Start... o quieres que sea algo que se ejecute todo el rato (en void Update)? mira he encontrado esto, igual te sirve, aunque esta en Java... tendrias que cambiar el "var triangles" por "int[] triangles"... y el "var vertices" por "Vector3[] vertices"... float CalculateFacingArea(Mesh mesh, Vector3 direction) { direction = direction.normalized; var triangles = mesh.triangles; var vertices = mesh.vertices; double sum = 0.0; for(int i = 0; i < triangles.Length; i += 3) { Vector3 corner = vertices[triangles[i]]; Vector3 a = vertices[triangles[i + 1]] - corner; Vector3 b = vertices[triangles[i + 2]] - corner; float projection = Vector3.Dot(Vector3.Cross(b, a), direction); if (projection > 0f) sum += projection; } return (float)(sum/2.0); } si te fijas hace lo que te decia yo, hace "Vector3.Dot" del "Vector3.Cross"...
  4. es en 2d o en 3d? si es en 2d puedes usar los vertices para crear un vector. por ejemplo en la primera imagen: porejemplo creas el vector "linea" con las posicion de dos los vertices del segmento de 10cm (restando los dos vertices consiges el vector (punto1-punto2)) con Vector3.Cross puede hayar la perpendicular del vector "v"... y lo llama vectorPV suponiendo que usas los ejes "X" y "Y" seria: Vector3 linea = Vector3.Cross(v, new Vector3(0,0,1)); y con Vector3.Dot(vectorPV, linea) te daria lo que mide linea (float) mirandolo desde "v" (en tu ejemplo son 5cm) en 3d se complica un poco mas... no se si se entiende... espero haberme explicado bien
  5. playerPrefs tiene la funcion "HasKey" para "preguntarle" a ver si esa key existe... en cuyo caso procedes a "cargar" el valor de esa key
  6. si es el angulo z el que quieres comprobar en vez de "transform.forward.z" pon "transform.right.y"
  7. euler angles puede dar un valor "raro" dependiendo s de como este rotado el objeto.... si quieres saber si el objeto "mira" hacia arriba mas de 20 grados puedes usar "transform.forward.y"... el seno de 20 es 0.34202 si "transform.forward.y" es mayor de 0.342 el objeto mira para arriba mas de 20 grados (si lo que quieres es saber si es mayor de 20 grados hacia abajo sera "transform.forward.y < -0.342f")
  8. jejejeje el build de schrodinger: no sabes si funciona o no funciona hasta que le haces doble click al ejecutable.
  9. hola supongo que ese script lo usas solo para el player o para enemigos u objetos que se muevan... para el resto de objetos que no se muevan deverias hacerlo todo en "void Start" porque no hace falta que estes comprobando cada frame la posicion porque no se mueven
  10. onColliderEnter solo se activa durante un frame. el frame en el que justo entra en contacto. puedes probar a hacerlo en onColliderStay o sino hace lo que dice @francoe1
  11. las partculas tienen "modulos"... uno de ellos es "externalForces" puedes ajustarlo para usar un "windZone" sino tambien tienes otros modulos como forceOverLifeTime o varios mas que puedes usar para el objetivo que quieres.... puedes acceder a los modulos via script porejemplo asi: public ParticleSystem rain; private ParticleSystem.MainModule rain_main; private ParticleSystem.EmissionModule rain_emi; private ParticleSystem.ForceOverLifetimeModule rain_force; void Start() { rain_main = rain.main; rain_emi = rain.emission; rain_force = rain.forceOverLifetime; rain_main.startLifetime = 4.5f;//tiempo de cida de cada particula rain_emi.rateOverTime = 60;//partiulas emitidas al segundo rain_force.x = 0.6f; rain_force.z = -0.4f;//añadir fuerzas en "X" y en "Z" }
  12. Igor

    City Building

    parece una especie de pathfinding por nodos. esta chulo
  13. espera un pocoa ver si alguien del foro tiene una solucion mejor... yo tengo poca experiencia con el 2d y los sprites... quizas hay una forma facil de hacerlo por ejemplo @Pere hace algo parecido a lo que quieres en su proyecto "way home" estaria guai que nos explicase como hace lo de las "luces"
  14. hola he estado mirando mas y parece que el sprite mask funciona usando "stencil buffer" en que cada pixel solo podria ser ON o OFF.... entonces no va a poder usar el alpha como te decia... la mejor solucion creo que seria usar un shader en el que los colores cambien dependiendo de la distancia a una luz o a un punto (vector3) especifico.... eso seria si quieres que la forma ser redonda.... pero si no quieres que sea redonda pues entonces se complica un poco mas... tendrias que usar Grab texture en el shader para cojer la imagen de la pantalla y modificarla.... o usar un efecto de postProcess que al final tambien seria un shader
  15. hola pues no suelo trabajar con sprites.... pero creo que se puede usar una imagen con alpha que sea mas "fuerte por el centro y debil por los bordes"... echale un ojo a esto https://forum.unity.com/threads/feathered-soft-sprite-mask.498764/
  16. muchas gracias. vi ayer que me habias contestado pero lo vi en el curro, y como llegue a casa tarde pues no me puse a mirar el codigo con detenimiento... ahora ya si. entiendo que casi todo el codigo es solo para ver la memoria gastada y liberada... para eliminar assets no usados usas "unloadUnusedAssets()".... y cuando esto ha acabado usas "GC.Collect" para eliminar la basura... supongo que es este ultimo el que libera la ram... es algo asi? lo usas al iniciar una escena y al "terminarla"? (cuando vas a cargar otra) he mirado lo de unloadUnusedAssers y pone que hay que tener cuidado con las variables estaticas o modificaciones hechas a assets en la memoria... Static variables are also examined. This requires extra care for assets which have been modified in memory. gracias de nuevo
  17. si son sprites puedes hacerlo con un "mask" aqui te pongo un video de ejemplo que he encontrado si es con objetos 3d podrias hacer un efecto de post Proceso de camara... seria con un shader... tambien podria hacerse que los materiales de la escena tubieran un shader especial que cuando haya una luz cerca tengan "color" y cuando no pues se vean en tonos de gris o negros...
  18. como lo haces. me puedes poner un ejemplo?
  19. hola mirare de realizar ese cambio... pero no son solo las balas... son un montos de FX... laseres y explosiones de varios tipos, chispas y hits... etc.... y puede ser una locura controlar todos.... tener un pool con un monton de todos los posibles efectos.... por esos obte por crearlos y destruirlos... de todas formas yo entiendo que al cambiar de escena (loadScene) se vacia el recolector de basura y la ram, no? porque en ese juego estas de media 5 minutos en cada escenario. entonces la ram se vacia al cambiar, no?
  20. esta muy bien. todo bien organizado y separado. mi "arquitectura" no es una arquitectura... sino que voy creando y poniendo cada pieza que necesecito conforme me hace falta... y si es necesario modifico otras piezas para que esa encaje. si que hago algunos "controllers" o "managers" pero no para todo. y lo del pool de objetos antes solia hacerlos mas.... ultimamente no lo hago.... antes lo hacia para objetos que de otra manera estarian todo el reto instanciandose y destruyendose.... como por ejemplo disparos, explosiones, etc... cosas que se crea y se destruyen todo el rato.... y asi se supone que es menos trabajo para la CPU, porque en vez de crear un objeto usarlo y destruirlo, lo que haces es cojer un objeto ya existente (cojerlo del pool) ponerlo donde te hace falta, usarlo, y luego volver a ocultarlo o desactivarlo... y asi le evitas al programa tener que crearlo cada vez.... pero ultimamente ya no lo hago... salvo en casos de objetos "grandes"... porejemplo tengo un generador de terrenos procedurales que tiene un manager que coje pedazos del terreno que se han quedado atras, los oculta, los modifica (a lo largo de varios frames, con una corrutina) y te los pone delante y los muestra para que el terreno continue y sea infinito... reaprobecha los mismos pedazos todo el rato... tiene tambien un pool de arboles y rocas para colocarlos (o no), si es necesario, donde sea necesario... lo he usado para varios proyectos, uno de ellos es de naves, hize una version alternativa para que en vez de ser un terreno infinito serian planetas esfericos... pero las naves disparaban... muchos disparos.... pues porejemplo esos disparos no estan en un pool... se crea y se destruye cada uno de los disparos... asi que se podria decir que no tengo un sistema. simplemente voy haciendo lo que me parece mejor cada vez... aunque eso no es muy bueno, a veces me da muchos quebraderos de cabeza por no haberlo organizado todo mejor desde el principio...
  21. hola he visto este video en un post de Vandal y no he podido resistirme a compartirlo era de una jam que se ha celebrado entre el 10 y el 12 de julio... ...o de unos locos que se han escapado de un psiquiatrico... no me ha quedado muy claro...
  22. hola, no se si estoy entendiendo bien la pregunta.... si, puedes usar referencias de otros scripts, gameObjecs, o componentes sin problema. de hecho el leguaje orientado a objetos funciona asi... esta pensado de ese modo. pueden ser "public" y asignarlos tu mismo desde el inspector. puedes "buscarlo" en el "void Start" y asignarlo a una variable "private"... por ejemplo imagina que el script "Enemy" necesita tener acceso al script "Player", pues dentro de "Enemy" deberias tener una variable "private Player m_player;" (el nombre "m_player" es por poner un ejemplo) y en el "void start" buscas ese "objeto" y lo asignas... seria algo asi... public class Enemy : monoBehaviour { private Player m_player; void Start() { //buscar por nombre el objeto // y cojer una referencia del componente (script) Player m_player = GameObject.Find("player").GetComponent<Player>(); } void Update() { //aqui irian las cosas que hace el enemy } } ....... pero seguramente si preguntas cosas tan "basicas" la gente te diga que primero te mires unos libros o tutoriales... que seguramente es lo que deberias hacer.... te aconsejo igual que te mires los conceptos basicos de Java porejemplo, que es muy "sencillo" y hay muchos tutoriales de iniciacion y muchos ejercicios muy sencillo de entender...y luego C# (que es el que se usa en Unity) es muy parecido... te decia de empezar a aprender lo Basico en Java porque creo que hay mas ejemplos y ejercicios basicos.... mas simples... y es muy parecido..... ya que C# es una copia de Java..... pero si quieres puedes ir direcamente a mirar ejercicios de C# ...o igual no he entendido bien y ya sabes estas cosas.... porque vi que estabas haciendo un proyecto con mecanicas tipo "assasins creed".... y eso no es muy basico...
  23. hola, yo no creo que haya problema, siempre que no quieras monetizarlo o cobrar por el.... y no se muy bien a que te refieres con "encargo"? quieres que te lo hagamos para ti? y... fangame de que juego? explica un poco mas...
  24. si, yo creo que con "onTriggerEnter" o con "onCollisionEnter" esta bien
UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...