Jump to content

Oak Human Flesh

Fosiles
  • Content Count

    164
  • Joined

  • Last visited

  • Days Won

    7

Everything posted by Oak Human Flesh

  1. Eso para la versión de Unity 5.
  2. Cuando pongas en el código, ejecuta la animación morir. .. También pones a true el valor del bool death. Luego pones a false el bool death cuando se restablezca la vida del personaje. Tiene lógica... Personaje vivo... death = false; Personaje muerto. .. death = true;
  3. si no esta muerto evalúa y ejecuta idle.
  4. Simple... un bool para la muerte luego si no esta muerto se evalua si se debe iniciar el idle siempre que no haya otra animación ejecutándose. bool death = false; void Update () { // other code.... //................................................................ if(!death) { if (!animationComponentLegacy.isPlaying) { animationComponentLegacy.CrossFade("idle", 0.3f);// play the idle animState } } }
  5. Bueno supongo que lo mas fácil seria agregar al final del Update() la instrucción de ejecutar el Idle, esto dependiendo de si se esta ejecutando alguna animación: void Update () { // el codigo ya programado.... // al final del Update revisar si alguna animacion esta siendo ejecutada // en el componente respectivo... // Revisa si ninguna animacion esta siendo ejecutada por dicho componente... if (!animationComponentLegacy.isPlaying) { //... ejecuta la animacion idle. animationComponentLegacy.CrossFade("idle", 0.15f); } }luego probe esto con este script y un Gato animado... using UnityEngine; using System.Collections; public class PlayerCatController : MonoBehaviour { private Animation animationComponentLegacy; public string[] animClips; public string[] controls; // Use this for initialization void Start () { animationComponentLegacy = gameObject.GetComponentInChildren<Animation>(); } // Update is called once per frame void Update () { CatControls(); if (!animationComponentLegacy.isPlaying) { CatAnimate(0, 0.5f);// play the idle animState } } void CatControls() { for (int i = 0; i < controls.Length; i++) { if (Input.GetButtonDown(controls[i])) { CatAnimate(i + 1, 0.3f); } } } void CatAnimate(int animID, float fadeTime) { animationComponentLegacy.CrossFade(animClips[animID], fadeTime); } }Funciona bien.
  6. Ahora comprendo... Supongo que el friend ataca, y después de que culmina el ataque, a el friend no se le indica que vuelva a la animación Idle, por eso se quedan como momificados los personajes. Desgraciadamente hoy no te puedo ayudar con mi PC y crear o modificar un script para adaptarlo a tu proyecto, tengo bastante trabajo en un B787 software Update. Pero... dependiendo de el instante en que se requiere volver al Idle, se debe poner el código respectivo para que ejecute esta animación, la cual supongo esta configurada como bucle o loop en el inspector de Unity. En mi caso crearía una función para controlar las animaciones, la cual me permita reutilizar código o fácilmente cambiar de sistema de animación, y por cierto mejorar la interpretación de la lógica humana. Respecto a el uso de el Invoke () supongo que esta bien si el resultado es inevitable, de lo contrario usar colliders u otro sistema para gatillar las animaciones sería mejor. En mi caso también almacenaria las animaciones y los componentes Animation en una matriz (una para cada una) para luego usarlas. Bueno son ideas, no puedo plasmarlas en código desde mi teléfono móvil, lo siento. Pero por ahí se va.
  7. Hola, al referir información exigua indico información insuficiente, como podría ser que te indiquemos como aprobar o modificar tu script con fragmentos?. .. sería como tratar de armar un rompecabezas de 1000 piezas o más con 3 piezas. Ok, ahora tenemos algo más con tu réplica. .. En Unity he visto básicamente 3 sistemas de animación. .. Usando el Sistema de animación legacy (con su componente Animation). Usando el Sistema Mecanim (con su componente Animator). Y el último pero muy importante usando directamente el Transform. De este último he visto un ejemplo muy bueno al comprar el UFPS del asset store. De los otros en el manual fácil puedes encontrar info... http://docs.unity3d.com/Manual/AnimationSection.html También en la sección de Tutorales en vídeo de Unity esta lo mejor... http://unity3d.com/es/learn/tutorials Un manjar. .. Luego YouTube. ... solo buscar animación En Unity o Mecanim Unity y aparece una gran lista de tutoriales o explicaciones, resultado que muy lejos de ser exiguo, es pingüe... entonces puedes tomar solo lo que te sirva para adaptar a tu proyecto y tu versión de Unity y lograr un acabado brillante según tú percepción. Esto es un Arte del cual la creación de la historia es de lo único que no se puede encontrar información. Antes solo hay una nebulosa. Del resto solo son procedimientos y lógicas.
  8. Esa información es exigua, no es posible ayudarte a modificar tu script.
  9. Usar el componente Rigidbody, sería una idea.
  10. Mucho if... poco práctico Tal vez.: public Texture [] textures; void Update () { if(Input.GetButtonDown("Fire1")) { foreach(Texture tex in textures) { // alguna instrucción que afecta a todas las texturas. tex.Alguna funcion = alguna nueva propiedad; } // instrucciones para una textura textures[Random.Range(0, texturas.Lenght)].Alguna función = alguna nueva propiedad; } } Con respecto a que hacer con la textura depende de como quieras renderizar la imagen, como dice @KaceEDP. Por cierto en tu código pasas los parámetros del Random. Range dentro de corchetes [ ], esto no es así, es entre paréntesis ( ).
  11. Yo use hace un tiempo cgi y php (solo por probar) con un server casero corriendo xampp y creo que es muy importante mantener muy lejos a los usuarios de las ddbb sobretodo de las cuentas de administrador. Hace tiempo leí sobre un ataque a un banco... tuvo una fuga de seguridad, el atacante remoto logro con una cuenta de administrador (que quien sabe como obtuvo), crear otra cuenta de admin, y desde esta última, reseteo las claves de los otros administradores, luego, las cambio por (Smile) y entonces dejó sin poder hacer nada a los administradores en la db que contenía los datos de los clientes. A partir de ahí quien sabe que más hizo el tipo. (Dicen que no hizo nada más)... pero nada menos Dejar muy lejos las ddbb de los usuarios es un paso mínimo. Yo no almacenaría los turnos, pienso que son datos transitorios, luego como dice Arthure el server de las ddbb tendría que notificar cada uno de los movimientos a todos los usuarios... pero para que? Si cuando termine la partida ya nadie la requiere. Tal vez solo programar el guardar el estado de la partida y los puntajes cuando se salga de esta pero sea el player que hace de server de el juego, el que se comunique con el servidor de la db que perfectamente puede estar en otro lugar... Siempre hay como... una db para los datos de usuarios y otra para los datos de las partidas. Siempre podrían ser manipuladas por algún tercero. Esconder los datos importantes es lo principal.
  12. un ejemplo simple podría ser algo asi: using UnityEngine; using System.Collections; // Script para el objeto Administrador... // este gameObject debe estar instanciado en escena. public class GameManager : MonoBehaviour { public int myIndex, powerCount; public GameObject[] powers; GameObject clon; public Transform player; // Use this for initialization void Start () { player = GameObject.FindWithTag("Player").transform; powerCount = 0; } // Update is called once per frame void Update () { if (!clon && powerCount > 0) { if (Input.GetButtonDown("Fire1")) { clon = Instantiate(powers[myIndex], player.position, player.rotation) as GameObject; Destroy(clon, 1f); powerCount--; } } } void UpdateIndex(int rxIndex) { myIndex = rxIndex; powerCount++; } }y para el objeto con el isTrigger using UnityEngine; using System.Collections; // este script envia un mensaje al componente administrador del objeto // que posee el tag GameController public class ColMessager : MonoBehaviour { GameObject theManager; // Use this for initialization void Start () { theManager = GameObject.FindWithTag("GameController"); } // OnTriggerEnter para proyectos en 3d void OnTriggerEnter(Collider other) { if (other.gameObject.CompareTag("Player")) { // envia un mensaje al metodo UpdateIndex y le pasa como parametro un // integer aleatorio cuyo valor es entre 0 y el largo del array powers de // el componente GameManager. theManager.SendMessage("UpdateIndex", Random.Range(0, theManager.GetComponent<GameManager>().powers.Length)); } } }con estos script se consigue que se instancie un objeto a la vez (de los almacenados en el array powers del script GameManager), y además se aumente la cantidad de powers disponibles (variable powerCount). El power instanciado dependerá de el ultimo valor del myIndex actualizado por el método UpdateIndex del script GameManager. El segundo script (la clase ColMessager ) lo puedes poner en cuantos objetos desees, pero el script administrador solo es uno. espero solucione tu problema...
  13. Creo que volver al script administrador y el SendMessage() serian la solución, este debe ser quien decida cuando se deben instanciar los poderes y cuantos.
  14. No te preocupe mucho lo del largo del array, debido a que tenia una duda por el Random.Range al usar parámetros Enteros, luego salí de mi duda al leer la doc. de Unity, esta es la respuesta, de el por que no se pasa del largo de la matriz: tal vez podrías usar una variable entera como contador de poderes instanciados, y usarlo para evaluar si se crea un poder... si es mayor o igual a 1 no permitir instanciar, y cuando el objetoHijo no exista restar la cantidad del contador. (es una idea).
  15. Cambios cambios GetButton() por GetButtonDown (). GetButton es usado para detectar cuando el botón es mantenido presionado, luego como esta dentro del Update lo lee una vez por frame resultando en una creación de un GameObject por frame. GetButtonDown es un evento llamado por una vez cuando se presiona el Botón... según el código creará un GameObject cuando el botón sea presionado pero no cuando se mantenga presionado. Por cierto sigo pensando que anim.Lenght devuelve el largo correspondiente del array anim, entonces si el Random.Range llegara a devolver el valor de largo del array (anim.Lenght), este estara fuera del rango de elementos del array debido a que la cuenta de los elementos de un array empieza en 0. Entonces por ejemplo si anim.Lenght es 3 y escribo: int element = anim.Lenght; y selecciono de esta forma GameObject obj = anim[element]; Y los elementos del array son 0, 1, 2, Entonces estará seleccionando un elemento fuera del largo de el array.
  16. Si esta bien que no lo instancie según tu código. El método Generar () es llamado un instante por el método OnTriggerEnter (), (se supone llamado único, no es un bucle); por esto cuando presionas el botón Poder no pasa nada, pues la ejecución del método Generar () depende del momento en el que se entra en colisión y no cuando se permanece en colisión o cuando se presiona el botón. Puedes poner la parte del código del botón dentro del Update pero su ejecución dependiente de tal vez un booleano que podría ser activado después de asignar el poder en el método Generar (). Por otro lado obviamente el código va a depender de donde este puesto (que gameObject). En mi caso para almacenar cosas como poderes almaceno un index (por ejemplo una variable tipo int) dentro de un script administrador, luego esa variable se convierte en el número de elemento de un array que contiene objetos los cuales deseo instanciar al presionar un botón ( objetos también almacenados en el Administrador). Muchas veces utilizo la instrucción SendMessage () de unity para actualizar el valor del index. Por cierto en tu código... que pasa si el valor devuelto por Random.Range es igual al largo del array anim... no estaría eligiendo un elemento fuera del largo del array?.
  17. This is a joke? Into the UnitySpain forum the predominant language is the spanish, your code contains many words in this language. you want to continue in this language? Sure?
  18. Este sistema nuevo de GI es muy bueno, pero dependiendo de la configuración puede tardar bastante en crear una textura con el lightmap. En mi caso he esperado hasta medio día a que culmine el proceso, pero el resultado ha valido la espera. Escenas muy simples si no se ha configurado bien pueden también tardar demasiado, pero en mi caso, luego de una configuración una escena pequeña ya tarda entre unos 3 a 30 minutos en crear la textura nueva. https://unity3d.com/es/learn/tutorials/modules/beginner/unity-5/unity5-lighting-overview?playlist=17102 https://unity3d.com/es/learn/tutorials/modules/beginner/graphics/lighting-and-rendering?playlist=17102 Se debe llegar a lago óptimo según como lo requiere el dispositivo objetivo y lo deseado. Y por cierto también he tenido resultados desastrosos al estar experimentando y una pérdida de tiempo ja ja ja. Pero con confianza y modicando los parámetros según el manual y YouTube he logrado mejorar esto. Busca Unity 5 iluminación global. En mi caso, en los proyectos he desactivado la opción de precomputed automáticamente, luego pongo a static los objetos deseados y por último le doy al botón build cuando deseo que cree la textura. También sufría por los cuelgues al ir modificando los objetos cuando el precomputed estaba en auto.
  19. En mi caso use la cuenta de email de live.com para activar el comunity gratis. Supongo que también puedes hacerlo con Hotmail.
  20. Obviamente los scripts controlan el personaje
  21. gracias @TeoEstudio habíamos pensado lo mismo, aquí dejo un video donde se muestra este procedimiento:
  22. Al parecer es una empresa de taiwan http://www.rayark.com/ Tal vez ni piensan en solucionar ese problema tienen un método de contacto... y el Engine tal vez es desarrolado por ellos.
  23. pienso que tal vez debimos haber trabajado en el proyecto del resident evil , te responderíamos sin problemas, pero tal vez usar colliders o rayos o cálculos de distancia sea sencillo después de haber hecho un buen script. un video de lo que pienso que es lo que deseas, este usando la idea aportada por @Adngel Aquí te dejo un paquete para Unity 5.2.0f3 que puede ayudar (obviamente el del video), en la descripción del video también hay un enlace de descarga. ChageFixedCams.unitypackage
  24. Una buena idea podría ser el lanzar un rayo desde la cámara hacia el personaje, luego si no se toca al personaje con el Ray mover la cámara hacia algún lugar hasta que el Ray toque el player. También imaginar a la cámara como un personaje que es un camarografo y crearle una IA no es malo.
UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...