Jump to content
UnitySpain

Aceptamos donaciones vía Paypal.

UnitySpain.com es un servicio gratuito, pero mantener la Comunidad conlleva una serie de gastos.

Fondo Anual Unityspain: Donados 51,34€ de 150,00€

  • Servidor: Dominio.com y Hosting Web
  • Mantenimiento de los Foros
  • Contenido y Servicios Extras
  • Mantenimiento para Redes Sociales

ftejada

Registrados
  • Content count

    399
  • Joined

  • Last visited

  • Days Won

    3

ftejada last won the day on August 7 2016

ftejada had the most liked content!

Community Reputation

39 Excellent

2 Followers

About ftejada

  • Rank
    Avanzado
  • Birthday 03/17/1980

Profile Information

  • Especialidad
    Coder

Recent Profile Visitors

1,162 profile views
  1. Re-abro este post pq creo que es mejor seguir por este hilo el problema que me ocurre ya que viene de todo esto que hemos estado mirando... Dejo este video abajo explicandolo todo pq creo que es mas comodo y rapido de explicar y entender para los demas. En resumen la Ventana Editor que programe me da problemas al cerrar y abrir Unity cuando esta ventana la dejo abierta. Unity crashea al cerrarlo. Y al abrirlo me pide reset el layout de ventanas para poder iniciar Unity. En el codigo de la Ventana de Editor utilizo OnEnable() y OnDisable() para crear un profile y destruirlo cuando se abre o cierra la Ventana. Pero si cierro Unity con la Ventana abierta me da el problema. Video A ver si alguien sabe que ocurre y como solucionarlo, Saludos
  2. Hola a todos!! Me está ocurriendo el siguiente problema y no se si estoy haciendo algo mal o es un bug de Unity. Me preguntaba si alguien puede tener una idea de que me está ocurriendo. Mediante scripts creo un Profile de un scriptableObject que tiene como variable una List<> de otra class que tiene ciertas variables, lo guardo en una carpeta y relleno la List<> con varios index y a cada index le doy una serie de valores a sus variables. Una vez hecho este proceso mencionado mediante una ventana de Inspector que programé, el Profile aparece en la carpeta donde se creo y guardó, conteniendo todos los datos (numero de index en la List<> y los datos que le asigne a sus variables) correctamente. Hasta aquí todo bien. El problema viene cuando cierro Unity y lo abro de nuevo. Si ahora voy a la carpeta donde debe estár ese Profile que creamos por script mediante la Ventana editor que programamos, el Profile está, pero la List<> me aparece vacia (a 0) cuando se habia creado con varios index y evidentemente todos los datos que le asisgnamos a cada variable de cada uno de sus index se pierden. En resumen la List<> está a cero y no ha servido de nada que haya guardado sus datos. Dejo video para que veais a lo que me refiero... Video Por otro lado, parece que si cuando creo el Profile y antes de cerrar Unity le cambio cualquier valor de alguna de sus variables, SI se queda guardado todos sus datos al cerrar Unity y volverlo a abrir. Dejo video: Video ¿Me estoy perdiendo algo? ¿Pensaba que un scriptableObject conservaba el valor de sus datos? ¿Hay algo que estoy haciendo mal? A ver si alguien sabe que estoy haciendo mal Un saludo
  3. No, lo probé. Pero es justo lo que buscaba, concretamente el que he utilizado y mejor me viene es el LoadAssetAtPath Gracias @lightbug!!!!!
  4. Si y no.... Porque eso solo me sirve de control para ver si ya existe el asset. Pero al final tengo que crearlo/Instanciarlo por script de todos modos y no puedo coger uno de los que ya tuviese creado manualmente sin script... Es decir no puedo hacer algo como: CreateAnchorPoints createAnchorPoints = AssetDatabase.FindAssets("t:CreateAnchorPoints", folders); //Suponiendo que esto obtuviese el asset que está guardado en la carpeta que se le pasa como ruta
  5. Gracias por las respuestas!! He estado mirando lo que dijo lightbug (AssetDatabase), pero no encuentro la manera de hacerlo. "FindAssets" devuelve un array de string[] y no un scriptableObject.asset en si. Mirando lo que dice pioj "Recuerda que son una especie de "prefab" con datos. No hay fichero único en sí, hay instancias del mismo tipo de asset." No se si la unica manera de hacer esto es Instanciar uno cada vez que se abre la ventana en OnEnable()), e ir borrandolos al cerrarse la ventana con OnDisable() De todos modos comparto el codigo que hice por si a alguien le ayuda o teneis alguna sugerencia: public class NombreClaseWindows : EditorWindow { CreateAnchorPoints createAnchorPoints; //class Tipo ScriptableObject //... private void OnEnable() { CreateAsset(); } private void OnDisable() { DeleteAsset(); } private void CreateAsset() { string[] guids; string[] folders = new string[] { "Assets/NombreCarpeta/NombreCarpeta" }; // search for a ScriptObject called ScriptObj guids = AssetDatabase.FindAssets("t:CreateAnchorPoints", folders); foreach (string guid in guids) { Debug.Log("Ya esxiste este asset en la siguiente ruta: " + AssetDatabase.GUIDToAssetPath(guid)); Debug.LogError("Debe arrastrar al Field 'PROFILE DE COMPORTAMIENTO' el profile de la ruta: " + AssetDatabase.GUIDToAssetPath(guid)); return; } CreateAnchorPoints asset = (CreateAnchorPoints)ScriptableObject.CreateInstance(typeof(CreateAnchorPoints)); AssetDatabase.CreateAsset(asset, "Assets/NombreCarpeta/NombreCarpeta/CreateAnchorPoints.asset"); createAnchorPoints = asset; } private void DeleteAsset() { if (AssetDatabase.DeleteAsset(""Assets/NombreCarpeta/NombreCarpeta/CreateAnchorPoints.asset")) { Debug.Log("Successfully removed..."); } else { Debug.Log("Delete failed..."); } } } Saludos y gracias por la ayuda!!
  6. Hola Gente! Tengo una ventana de Editor que estoy programando y dentro de ella una variable de un script, con ciertos comportamientos, que es un ScriptableObject. Actualmente, en la ventana del editor que he creado, tengo el campo para que se pueda arrastrar ese "Script ScriptableObject" una vez creado y que el script de la Ventana de Editor pueda trabajar con él internamente. El caso es que me gustaría NO tener que arrastrar el scriptableObject al campo que he creado en la ventana, sino que al abrir la ventana del editor, se carge el scriptableObject a la variable dandole el patch donde está almacenado en el project... Algo asi como lo que se hace con los Resources.Load(). He probado a intentar cargarlo con Resources.Load() pero me da error... No se cual es la mejor manera de abordar esto. A ver si alguien puede orientarme un poco. Saludos
  7. Hola de nuevo a todos!! En estos tutoriales Tutoriales se explica como utilizar estos componentes de Unity para el NavMesh. Son hechos por Unity pero hay que descargarlos de Gihub. Pone que son para Unity 5.6 en adelante creo. Los he probado en Unity 2018.2.0 y van bien. Pero cuando meto estos componentes para la version de Unity 2018.1.3f1 que es donde tengo el proyecto para el que los necesito, me da este error al importarlo: Assets/NavMeshComponents/Scripts/NavMeshSurface.cs(376,52): error CS0117: `UnityEditor.PrefabUtility' does not contain a definition for `GetCorrespondingObjectFromSource' No puedo actualizar el proyecto a Unity 2018.2.0 pq es un proyecto debe salir bajo Unity 2018.1.3f1, por temas de licencia. He preguntado en el foro oficial de Unity pero nadie me ha dado una solución y quería saber si alguien sabe como solucionar este problema. Un saludo y gracias por adelantado.
  8. Siii!!! Justo era eso!! Muchas gracias @lightbug
  9. Hola a todos!! Se puede congelar (Freeze) dos de los componentes de FreezeRotation de un rigidbody mediante script??? Por lo que veo en la api solo puedo o congelar toda la rotación: rigBdy.constraints = RigidbodyConstraints.FreezeRotation; o Congelar solo uno de los componentes: //Este codigo solo congelaria el ultimo freeze que se hiciese, en este caso el de la rotacion en Z rigBdy.constraints = RigidbodyConstraints.FreezeRotationX; rigBdy.constraints = RigidbodyConstraints.FreezeRotationZ; ¿Existe alguna manera de congelar la rotacion de X y Z de un rigidbody mediante script? Saludos
  10. No. Esto lo estuve tanteando pero no sirve para lo que necesito. Esto lo reescalaria a nivel general y hay veces que necesito reescalar solo el tamaño de alguno de los ejes... Por no mencionar el hecho de que no sabría cuanto reescalarlo respecto a otra malla cuando vienen con distintos tamaños reales de otros programas 3d.. Por ejemp, si tengo un cubo con todos sus lados iguales y debo adaptarlo a otro cubo que tiene dos lados iguales (x, y) pero uno más grande (z) formando un rectangulo más que un cubo, no podría hacerlo. Aparte usar Scale Factor creo que me plantearia otros problemas... Gracias por el aporte @francoe1
  11. Ok... Pensaba que al cambiar el tamaño de los bounds cambiaba el tamaño de la malla. @J Montes Gracias por la apreciación... con Vector3.scale el codigo está mas limpio... @J Montes Me refería a cuando una esfera no es totalmente redonda... por ejemplo y alguno de sus ejes de (localScale) es de tamaño distinto Es posible que esto me pueda servir, aunque en principio solo para figuras donde el tamaño deba aumentar o disminuir por igual en todos sus lados... gracias @Igor Saludos
  12. @Igor He probado a hacer lo que dices pero la malla no cambia de tamaño, al menos visiblemente en la pantalla: Vector3 size = meshTarget.bounds.size; Vector3 nSize; nSize.x = Target.transform.lossyScale.x * size.x; nSize.y = Target.transform.lossyScale.y * size.y; nSize.z = Target.transform.lossyScale.z * size.z; mesh.bounds = new Bounds(mesh.bounds.center, nSize / 2); Supongo que no estaré utilizandolo bien... Saludos
  13. Hola a todos y muchas gracias por los aportes!!! respecto a lo que dijo Igor, concuerdo con francoe1, la magnitud de la posición de cada vertice, solo serviría para esferas "totalmente redondas". En cuanto la esfera tuviese una escala distinta en alguno de sus ejes o en otras figuras irregulares... no parece ser una solución J Montes he estado probando lo que dijiste y va perfecto para los cubos... no tenia ni idea de que multiplicandolo por su lossyScale podría conseguirlo, por eso cuando estuve probando no me servia esta solución ya que no lo estaba haciendo bien. Siguiendo tu información he hecho algo así. targetMeshBounds = gameObjectTarget.GetComponent<MeshFilter>().mesh; //.... Vector3 sizeBoundsTarget = targetMeshBound.bounds.size; Vector3 nSize; nSize.x = Target.transform.lossyScale.x * size.x; nSize.y = Target.transform.lossyScale.y * size.y; nSize.z = Target.transform.lossyScale.z * size.z; transform.localScale = nSize; También lo he estado probando con esferas y parece ir perfecto también aunque la esferaTarget tenga escalas diferentes en cada eje X, Y, Z... Es cierto que he notado que la escala no es totalmente exacta, pero es más que suficiente para lo que necesito, ya que la perdida de precisión es como de 0.000001 o algo asi... supongo que es a esto a lo que te referias con si no dimelo pq con las prubas que he hecho parece bastante preciso y no representaría un problema para mi: Otro cantar parece ser con figuras como los cilindros, en los que la altura de este siempre se incrementa al doble ya que al final le estamos pasando el tamaño del bound.y a la escala del otro objeto... por lo que si es un cilindro conviene dividir el bound.y/2 ¿Existe alguna manera de poder modificar el mesh.bounds.size de una malla para que cambie su tamaño en vez de andar tocando la escala de su transform? Saludos
  14. Si. Creo que llevas toda la razón y tomaré el camino de implementar Lod´s en principio. Saludos y gracias
  15. Gracias por la respuesta @Igor !! Lo de hacer el script es lo primero que he pensado, pero no pensé en hacerlo mediante corrutinas para que no asesine al rendimiento en escenas muy pesadas... Por otro lado lo del LODs es buena idea, y quizás sea la que finalmente termine haciendo para que todo lo gestione Unity internamente con LODs Saludos y muchas gracias por el aporte
×