Hola muy buenas a ver si me podéis dar algún consejo o referencia de como hacer que se active la sangre al darle a un enemigo con un cuchillo.Explico, tengo un gameobject que es una sparcle(un salpicon de sangre),añadida a mi arma un cuchillo en este caso,.La cual solo quiero que se active cuendo el cuchillo toca el enemigo y le daña(eso va bien le pose un Debug.log), pero no consigo la formula.Probe asi:
using UnityEngine;
using System.Collections;
public class sangre : MonoBehaviour {
public GameObject sangre2;
void OnCollisionEnter ( Collision collider ){
if(collider.gameObject.tag == "cuchillo")
{
sangre2.SetActive(true);
}
else
{
sangre2.SetActive(false);
}
}
}
este script esta en el enemigo lleva su box collitder y todo eso.básicamente le digo que cuando colisione(el enemigo), con mi cuchillo(tag:cuchillo), se active el gameobject(sangre2), que ya le he proporcionado en el inspector.Pero no se activan.....Alguna sugerencia o idea por favor?Gracias de antemano.
No es mejor instanciarlo? Es decir, el script ponlo al cuchillo, en OnCollisionEnter le pones Instantiate con las coordenadas del cuchillo y el prefab de la sangre.
[quote author=leocub58" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="17672" data-ipsquote-contentcommentid="103520 date=1440280680]No es mejor instanciarlo? Es decir, el script ponlo al cuchillo, en OnCollisionEnter le pones Instantiate con las coordenadas del cuchillo y el prefab de la sangre.[/quote]He instanciado balas clonando rigidbodys pero ..en cuchillo no vuela...lo llevo en la mano y golpea con el...No se ahora mismo a que te refieres.Algun ejemplo practico?Gracias de antemano.
using UnityEngine;
using System.Collections;
public class sangre : MonoBehaviour
{
public GameObject sangre2;
void OnCollisionEnter ( Collision collider )
{
if(collider.gameObject.tag == "cuchillo")
{
sangre2.SetActive(true);
}
else
{
sangre2.SetActive(false);
}
}
}
Yo creo que el problema está en ese "else".
Verás, cuando tu juego se ejecuta, el personaje estará seguramente detectando muchos otros colliders durante la ejecución (el cuchillo, el suelo, el jugador, etc...), cuando el cuchillo entra en ese código, pues sí, activará la sangre, pero si en el mismo ciclo, entra también otro collider que no tenga el tag cuchillo (que seguro que entrarán), pues te volverá a desactivar la sangre, y al final de ciclo, cuando dibuje el frame que ves en pantalla, pues es como si no hubieras hecho nada. O.ò
Creo que lo que buscabas, era aplicar la función OnCollisionExit, que se activa cuando el cuchillo deja de colisionar con el collider, ahí es cuando podrías poner el SetActive en false.
Creo que Adngel tiene razón. Ramunda, a lo que me refiero es que instancies la sangre en la posición del cuchillo, así la sangre sale en donde lo acuchillastes y no siempre en el mismo lugar.
[quote author=Adngel" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="17672" data-ipsquote-contentcommentid="103547">
using UnityEngine;using System.Collections;
public class sangre : MonoBehaviour
{
public GameObject sangre2;
void OnCollisionEnter ( Collision collider )
{
if(collider.gameObject.tag == "cuchillo")
{
sangre2.SetActive(true);
}
else
{
sangre2.SetActive(false);
}
}
}
Yo creo que el problema está en ese "else".
Verás, cuando tu juego se ejecuta, el personaje estará seguramente detectando muchos otros colliders durante la ejecución (el cuchillo, el suelo, el jugador, etc...), cuando el cuchillo entra en ese código, pues sí, activará la sangre, pero si en el mismo ciclo, entra también otro collider que no tenga el tag cuchillo (que seguro que entrarán), pues te volverá a desactivar la sangre, y al final de ciclo, cuando dibuje el frame que ves en pantalla, pues es como si no hubieras hecho nada. O.ò
Creo que lo que buscabas, era aplicar la función OnCollisionExit, que se activa cuando el cuchillo deja de colisionar con el collider, ahí es cuando podrías poner el SetActive en false.[/quote]Razón tienes amigo Adngel, es mejor un OnCollisionExit, si definitivamente, pero la cosa es que no se llega a activar. :), voy a probar.
[quote author=leocub58" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="17672" data-ipsquote-contentcommentid="103548">Creo que Adngel tiene razón. Ramunda, a lo que me refiero es que instancies la sangre en la posición del cuchillo, así la sangre sale en donde lo acuchillastes y no siempre en el mismo lugar.[/quote]Seria genial!!!, pero no veo la manera de instanciar como bien tu me dices....dame alguna referencia o pista...por favor
![:) date=1440286411]
</div><!-- .postbody -->
<div class= :)](Smileys/invision/default_smile.png)
Título:
Colision con enemigo
Publicado por:
Antonio en
Agosto 23, 2015, 03:18:37 AM
Sï se activa, el problema es que también se desactiva, por eso no llegas a verlo activado, prueba quitando el caso del elseE'to fuerah!
else
{
sangre2.SetActive(false);
}
Y no veo motivos para que el objeto sangre2 no pueda activarse. Lo que queda después es desactivarlo, que para ello digo que puedes usar el OnCollisionExit
A ver, en caso de que funcione el cuchillo no estará mucho tiempo dentro del collider, lo que provoca que se active y se desactive. Simplemente haz la sangre en un prefab, le pones una cuenta atrás para que se elimine a los 5 minutos por ejemplo y haces que se instancie cuando el collider entra en el enemigo en la posición del cuchillo. Si necesitas ayuda creo que tienes mi skype.
[quote author=Adngel" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="17672" data-ipsquote-contentcommentid="103568">Sï se activa, el problema es que también se desactiva, por eso no llegas a verlo activado, prueba quitando el caso del elseE'to fuerah!
else{
sangre2.SetActive(false);
}Y no veo motivos para que el objeto sangre2 no pueda activarse. Lo que queda después es desactivarlo, que para ello digo que puedes usar el OnCollisionExit using UnityEngine;
using System.Collections;
public class sangre : MonoBehaviour {
public GameObject sangre2;
void OnCollisionEnter ( Collision collider )
{
if (collider.gameObject.tag == "enemigo") {
sangre2.SetActive (true);
}
}
void OnCollisionExit ( Collision collider ){
if (collider.gameObject.tag == "enemigo") {
sangre2.SetActive (false);
}
}
} [quote author=leocub58" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="17672" data-ipsquote-contentcommentid="103572 date=1440293264]A ver, en caso de que funcione el cuchillo no estará mucho tiempo dentro del collider, lo que provoca que se active y se desactive. Simplemente haz la sangre en un prefab, le pones una cuenta atrás para que se elimine a los 5 minutos por ejemplo y haces que se instancie cuando el collider entra en el enemigo en la posición del cuchillo. Si necesitas ayuda creo que tienes mi skype. [/quote]Jolines!!!, por no decir otra cosa, te pido mil prdones Leo , por n reconocerte antes!!! esque has cambiado el monigote XDDD, si claro que te tengo!! despues de comer te pegoe el toque XDD si no lo suluciono.Pero antes os detallo todo todo.El cuchillo:Leeva una mesh Collider,convex y triger.(asi daña bien al entrar en contacto con el bicho, tengo un log y lo demuestra).Las salpicaduras, son hijas de el cuchillo,osea estan pegadas a la puntita de el XD, y si sin un prefab....El bicho, tiene una capsule collider que no esta triguer ni nada.Las salpicaduras son de intervalos de medio segundo mas o menos lo cual donde va el cuchillo...van ellas...Pero sigue sin furular:
Pues el SetActive no tiene más misterios donde rascar void OnCollisionEnter ( Collision collider )
{
print (collider); //Esta
if (collider.gameObject.tag == "enemigo")
{
print ("El collider " + collider + " entró en la función."); //Y esta
sangre2.SetActive (true);
}
}Me resulta raro que funcione para quitar daño y no para activar el objeto sangre2, pero en fin, a ver que sale. O.ò