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 58,34€ de 150,00€

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

Null

Registrados
  • Content Count

    121
  • Joined

  • Last visited

  • Days Won

    1

Null last won the day on August 25 2016

Null had the most liked content!

Community Reputation

3 Neutral

About Null

  • Rank
    Asiduo

Profile Information

  • Especialidad
    Coder

Recent Profile Visitors

616 profile views
  1. Hola! Cómo están? Tengo un pequeño problema con un script que hice. Lo único que hace es limitar el ángulo de rotación de la cámara en Y, pero única y exclusivamente al saltar. Funciona genial, pero he notado que al pasar por el 'grado' 0 (ó -0), hace un giro muy extraño y repentino. He exagerado un poco el salto del player para hacer un corto de ejemplo. El cubo verde representa la rotación 0: https://i.gyazo.com/06151e526fa4f9e3e0ecc557eb60abae.mp4 Nótese como el primer salto es correcto, funciona bien. Pero el segundo... al pasar por el 0 (cubo verde) hace un giro extraño al momento de volver a saltar. Lo que acaban de ver en ese vídeo también ocurre si giro en la dirección contraria a las agujas del reloj. El mencionado script está colocado en el player y así es como se lee: if (!controller.isGrounded) { cameraController.Yaw = Mathf.Clamp(cameraController.Yaw, transform.localEulerAngles.y - 20, transform.localEulerAngles.y + 20); } Ese es todo el código que hice al respecto para lograr esa funcionalidad, así que me imagino que es él quien está mal. A mi corto modo de ver, es como que al estar en números positivos y al pasar a negativos (y viceversa), es cuando se vuelve loco. No sé cómo podría solucionarlo y por eso hago este post Muchas gracias por su amabilidad.
  2. @Igor @pioj Muchas muchas muchas gracias! He conseguido solucionarlo usando ambas soluciones.
  3. Hola! @lightbug El modelo lo hice yo, pero las texturas las tomé de internet. No son definitivas para mi modelo. En cuanto al shader, estoy usando el shader Standard de Unity en los 3 materiales del modelo (asfalto, vereda y tierra): https://i.gyazo.com/bf84196f3b9bc42f9ab03d65939e20ac.mp4 @juguefre Actualmente el modelo no está usando ninguna textura AO, solo un par de normal maps. Estas son las texturas: Estos los dos normal maps: Aquí muestro los ajustes que tiene cada textura: https://i.gyazo.com/3b6008e0ac0a87fc874602fa4800be78.mp4 Mientras tanto estoy usando el Post Processing Stack de Unity para obtener el AO. Aquí estoy probando a desactivarlo y activarlo para ver cómo se ve: https://i.gyazo.com/3af119e9ed6ea9366432217b1319749c.mp4 Y aunque al desactivarlo se sigue notando la línea, tenerlo activado sin duda empeora las cosas. Estos son mis ajustes de iluminación: Los Quality Settings: Mi conocimiento de modelaje 3D no es aún tan amplio, pero como dato adicional puedo decir que el modelo no tiene baking de ningún tipo. Tendrá que ver? Pruebo a crear una mesh high poly y vemos si al hacer el baking se me soluciona?
  4. Hola, cómo están? Por casualidad alguien sabría decirme por qué ocurre ésto entre mis objetos 3D, en este caso la carretera? Nótese la raya negra que hay casi en el centro de la imagen: Estoy siguiendo el diseño modular para crear cosas como la carretera y los edificios del juego... pero si se va a ver ese extraño borde oscuro cada vez, pues como que me preocupa. Alguien sabe? :o
  5. @Centauro5legs Hola, cómo estás? Usa tu variable gravity en el eje Y de motion: float gravity = 0.0f; motion = new Vector3(Input.GetAxis("Horizontal"), gravity, Input.GetAxis("Vertical")); También usa la misma variable gravity en el código del salto... (En lugar de motion.y) : if (controller.isGrounded) { if (Input.GetButton("Jump")) { gravity = jumpForce; } } else { gravity += Physics.gravity.y * Time.deltaTime * 2; } A ver si así no tienes el mismo problema. Suerteee.
  6. No sé ha pasado... me puse a crear unas cuantas animaciones, e iba todo correctamente... Pero después de un rato sin tener ningún problema, pasó que intenté animar las rotaciones de un objeto, pero me ocurrió ESTO... Por si no se entiende el enlace: * Lo que hice fue rotar el objeto SOLO 90º aproximadamente, para que se añadiera un keyframe, pero como veis al pulsar el botón Play la rotación se vuelve completamente loca. No sé cómo solucionarlo! Cerré Unity, lo volví a abrir, y nada. Reinicié PC, nada. Reinstalé Unity al completo, y tampoco... Probé a animar las rotaciones de un cubo en otro proyecto totalmente nuevo, y allí sí que funcionaba bien! Una solución entonces podría ser migrar el proyecto entero a uno nuevo, pero es demasiado grande actualmente, así que mejor dejemos eso como último recurso. Mencionar que yo no toqué nada, casi podría decir que ocurrió al azar. Es primera vez que me pasa. Ojalá alguien me pueda dar soluciones alternativas. Muchas gracias :'b
  7. Supongamos que tengo el siguiente código que controla la variable vida de un enemigo: public class EnemyHealth : MonoBehaviour { float currentHealth; float amount = .5f; float maxHealth = 100; public float CurrentHealth { get { return currentHealth; } set { currentHealth = value; } } void Update() { if (currentHealth < maxHealth) currentHealth += Time.deltaTime * amount; if (currentHealth >= maxHealth) currentHealth = maxHealth; if (currentHealth <= 0f) currentHealth = 0f; } } Y también tengo este CustomEditor: [CustomEditor(typeof(EnemyHealth))] public class EnemyHealthEditor : Editor { public override void OnInspectorGUI() { EnemyHealth enemyHealth = (EnemyHealth)target; enemyHealth.CurrentHealth = EditorGUILayout.FloatField("Health", enemyHealth.CurrentHealth); } } El problema que tengo es que la variable (en el inspector) no se actualiza cuando es < maxHealth, tal como indica su código... Si por ejemplo le pongo el valor 55 en el inspector, vuelve a 0, sin actualizarse. Antes de haber escrito el CustomEditor, simplemente tenía la variable en public y se actualizaba bien. Peor aún: He notado que si pongo el mouse encima del inspector (sin hacer clicks de ningún tipo), y lo muevo hacia otra ventana de Unity, sí se actualiza... (?) >>> Vídeo de muestra (nótese que no estoy haciendo dragging) Cómo lo soluciono?
  8. Es decir, quieres que la cámara sea la que con su "visión" detecte si se están moviendo las pelotas. No sé mucho, pero podría darte algunas direcciones. Para obtener la coordenada/posición de la pelota, puedes hacer esto: public Vector3 pos; void Update() { // Obtienes la posición de la pelota cada frame. pos = transform.position; } Para obtener el tamaño: public Vector3 size; void Start() { size = transform.localScale; } Y por último, dices de capturar el movimiento, lo cual asumo a que te refieres a la dirección a la que va la pelota... Eso ya no te puedo ayudar, porque creo que involucra un poco de matemática con físicas y de eso voy bastante mal. AUNQUE si te refieres a capturar si se está moviendo o no... puedes hacer algo como esto: public Rigidbody rb; // Asumo que usas rigidbody en tus pelotas. public bool isMoving; void Update() { if (rb.velocity == Vector3.zero) isMoving = false; else isMoving = true; } // Este código es mejorable, ya que hay maneras de detener la pelota, como por ejemplo aumentando el drag. Siempre depende, pero pues ésto en concreto no es tanto. Aunque estoy seguro de que alguien por aquí te podría dar una mejor respuesta.
  9. Aloha. Estaba trasteando con un singleton, probando cosas, etc... y resulta que declaré un evento dentro del singleton, al cual quiero llamar desde otro script, pero me da un error el cual antes no tenía. Singleton!: public class GameManager { #region "Singleton" static GameManager instance; public static GameManager Instance { get { if (instance == null) instance = new GameManager(); return instance; } } #endregion public event Action OnPlayerGrounded; // El evento. CharacterController cc; public CharacterController CC => cc; void Awake() { cc = GameObject.FindGameObjectWithTag("Player").GetComponent<CharacterController>(); } } Script desde el que intento llamar al evento: public class PlayerController { void Update() { if (GameManager.Instance.CC.isGrounded) GameManager.Instance.OnPlayerGrounded?.Invoke(); // Aquí es donde obtengo el error. } } El error que me da es el Assets/Scripts/Player/PlayerController.cs(23,70): error CS0070: The event `GameManager.OnPlayerGrounded' can only appear on the left hand side of += or -= when used outside of the type `GameManager'... Antes simplemente tenía el evento declarado dentro de PlayerController y simplemente decía: if (cc.isGrounded) OnPlayerGrounded(); y funcionaba... pero ahora me dio por tener un poco más de orden y usar managers :P Qué solución puede haber en este caso? Mil y una gracias.
  10. Yo también quisiera saber cómo va el tema del outliner a objetos xd Si alguien sabe, aunque sea por shader, agradeceríamos!
  11. HOLA. Estaba leyendo y me pareció interesante ésto. En mi caso quiero usar un .json para guardar los diálogos, pero busco orientación. He visto vídeos, pero no me intero. Tienes más info? :O
  12. Hola! Puedes probar a añadirle a la nave un child que tenga la animación del fuego, en la jerarquía. Asegúrate de que la animación del fuego tiene el tick en "Loop Time", así nunca terminará, a menos que digas lo contrario por código. O cuando la nave explote, por ejemplo!
  13. No, el script no es de ninguna wiki! Lo hice antes. Por cierto, a cual wiki famosa te refieres? xd Es que en Unreal por ejemplo está esa función, que seleccionas algo, aprietas la tecla, que creo que era End (o Fin), y te lo colocaba a ras de suelo. Voy a probar primero con la respuesta de Harsel y luego sino probaré a hacerlo con una EditorWindow! :)
×
×
  • Create New...