Jump to content

Oak Human Flesh

Fosiles
  • Content Count

    164
  • Joined

  • Last visited

  • Days Won

    7

Oak Human Flesh last won the day on November 15 2015

Oak Human Flesh had the most liked content!

Community Reputation

110 Excellent

About Oak Human Flesh

  • Rank
    Asiduo

Recent Profile Visitors

598 profile views
  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).
UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...