Hola muy buenas , tengo un quebradero de cabeza con este script, que funcionar funciona de maravilla, dispara , recarga, deja de disparar si no tiene balas....pero....me gustaria que cuando tiene balas y esta disparando reproduciera el sonido de metralleta por ej, que cuendo no tuviera balas(esperando el "R" de recarga que sonara a por ej cargador vacio, y al recargar un sonido de recarga osea cuando aprieto la R....
Seguro que es una tonteria pero me esta llevando de pura cabeza!! , un dato estoy con Unity5 lo digo porque es parte de mi problema que los Guetcomponet.Audio nose que han cambiado todo y me llevan loco.
Una ayudita por favor?, tengo la Var de recarga con uadiclip y la de gunshot...pero ....
aqui el script: "JS"
var Bala : Rigidbody;
var Velocidad = 20;
var municion : int = 60;
var municiontotal = 300;
var guimuni : GUIText;
var guitotal : GUIText;
var destello : GameObject;
var manoanim : GameObject;
var municionanim : GameObject;
var recarga : AudioClip;
var gunShot : AudioSource;
function Start(){
destello.active = false;
}
function Update(){
guimuni.text = municion.ToString();
guitotal.text = municiontotal.ToString();
if(Input.GetMouseButton(0)){
if (municion > 0 && municiontotal >= 0){
var clona = Instantiate(Bala, transform.position, transform.rotation);
clona.velocity = transform.TransformDirection(Vector3(0, 0, Velocidad));
municion -= 1;
Destroy (clona.gameObject, 1);
}
}
if(Input.GetKeyDown("r") && municiontotal > 0){
//manoanim.Animation.Play();
//municionanim.Animation.Play();
municion = 0;
Invoke ("recargando",2);
}
if(Input.GetMouseButtonDown(0)){
destello.active = true;
}
else
if(Input.GetMouseButtonUp(0)){
destello.active = false;
}
if (municion <= 0){
destello.active = false;
}
}
function recargando (){
if(municiontotal > 0){
municiontotal -= 100;
municion +=100;
}
if (municion >100){
municion = 100;
}
}
Si tienes animaciones, puedes poner eventos, así lo hice yo. Vete a la ventana anim y en el frame que creas que puede quedar bien el sonido creas un evento, se crea dándole a una pestañita cercana al contador de frames. Con el evento puedes disparar métodos, yo creé un script con diferentes sonidos y los reproducía mediante eventos (pasos, balas, herida).
Además te aconsejaría que el tema de munición revises más los valores, si tienes en munición total 60 y recargas la munición total te quedará en -40 y eso no estaría bien
Crea 3 Empty y añadele a cada uno un audio (Uno que contenga el de disparo, otro el recarga e.t.c) al añadirselo en el inspector donde dice Audio Source desactiva el "Play on Awake"
public AudioSource Disparo;
public AudioSource Recargando;
public AudioSource Sincarga;
if( precciono tecla de disparo)
Disparo.Play()
if(precciono tecla recargar)
Recargando.Play()
if (bala == 0)
Sincarga.Play()
En el inspector a cada variable añadele el Empty correspondiente.
Puedes utilizar los eventos en animaciones como dice @juanma_teso. Si no tienes animaciones utiliza simplemente esto :
http://docs.unity3d.com/ScriptReference/AudioSource.PlayOneShot.html El sistema de los GameObjects cuando tienes muchos puede ser un lio y no se hasta que punto es eficiente o no.
Además si no tienes que simular la bala te recomendaría que mirases los Raycast, son mas eficientes y dan menos errores.
Cita de: juanma_teso date=1434241228Si tienes animaciones, puedes poner eventos, así lo hice yo. Vete a la ventana anim y en el frame que creas que puede quedar bien el sonido creas un evento, se crea dándole a una pestañita cercana al contador de frames. Con el evento puedes disparar métodos, yo creé un script con diferentes sonidos y los reproducía mediante eventos (pasos, balas, herida).
Muchas gracias por responder Juanma_teso, lo estudiare aver que puedo hacer con animaciones y gracias por el detalle de los contadores de balas lo revisare.
Cita de: DavidV date=1434244294Crea 3 Empty y añadele a cada uno un audio (Uno que contenga el de disparo, otro el recarga e.t.c) al añadirselo en el inspector donde dice Audio Source desactiva el "Play on Awake"
public AudioSource Disparo;
public AudioSource Recargando;
public AudioSource Sincarga;
if( precciono tecla de disparo)
Disparo.Play()
if(precciono tecla recargar)
Recargando.Play()
if (bala == 0)
Sincarga.Play()
En el inspector a cada variable añadele el Empty correspondiente.
Que buena ideaaaaa si señor voy a probarlo ahora mismo y os cuento ))) muchas gracias DavidV.Pero una cosa los empty los añado a que? al arma por ejemplo??
Cita de: Samusan date=1434270954Puedes utilizar los eventos en animaciones como dice @juanma_teso. Si no tienes animaciones utiliza simplemente esto :
http://docs.unity3d.com/ScriptReference/AudioSource.PlayOneShot.html
El sistema de los GameObjects cuando tienes muchos puede ser un lio y no se hasta que punto es eficiente o no.
Además si no tienes que simular la bala te recomendaría que mirases los Raycast, son mas eficientes y dan menos errores.
Samusan, muy interesante también y si te doy toda la razón del mundo en lo de los Raycasts, pero....lo he intentado varias veces y lo único que consigo es que dispare pero no he conseguido lo de recargar , tu entiendes de raycasts y eso podrías convertirme el script que tengo arriba en raycast?, te estaría muy agradecido!!!
Cita de: DavidV date=1434244294Crea 3 Empty y añadele a cada uno un audio (Uno que contenga el de disparo, otro el recarga e.t.c) al añadirselo en el inspector donde dice Audio Source desactiva el "Play on Awake"
public AudioSource Disparo;
public AudioSource Recargando;
public AudioSource Sincarga;
if( precciono tecla de disparo)
Disparo.Play()
if(precciono tecla recargar)
Recargando.Play()
if (bala == 0)
Sincarga.Play()
En el inspector a cada variable añadele el Empty correspondiente.
Estimado David..la cosa esta semi arreglada añadiendo los 3 vars gunshot, recarga y vacio , cuando dispara suena bien, si recarga suena bien, pero el problemilla esta al quedarse sin balas...suena el de no tener balas pero tambien suena el de disparo normal? donde esta el fallo? te dejo el script corregido aver si me puedes dar luz a esto graciasss
var Bala : Rigidbody;
var Velocidad = 20;
static var municion : int = 100;
var municiontotal = 1000;
var guimuni : GUIText;
public var guitotal : GUIText;
var destello : GameObject;
var manoanim : GameObject;
var municionanim : GameObject;
var gunShot : AudioClip;
var recarga : AudioClip;
var vacio: AudioClip;
//var recarga : AudioClip;
//var gunShot : AudioSource;
//public var Sonidodisparo : AudioClip;
//public var Sonidorecarga : AudioClip ;
//public var Sonidovacio : AudioClip ;
function Start(){
destello.active = false;
}
function Update(){
guimuni.text = "Municion: " + municion.ToString();
guitotal.text = "Municion Total: " + municiontotal.ToString();
if(Input.GetButton("Fire1")){
AudioSource.PlayClipAtPoint(gunShot, transform.position, 1);
if (municion > 0 && municiontotal >= 0){
var clona = Instantiate(Bala, transform.position, transform.rotation);
clona.velocity = transform.TransformDirection(Vector3(0, 0, Velocidad));
municion -= 1;
Destroy (clona.gameObject, 1);
}
}
if(Input.GetKeyDown("r") && municiontotal > 0){
municion = 0;
AudioSource.PlayClipAtPoint(recarga, transform.position, 1);
Invoke ("recargando",2);
}
if(Input.GetMouseButtonDown(0)){
destello.active = true;
}
else
if(Input.GetMouseButtonUp(0)){
destello.active = false;
}
if (municion <= 0){
if(Input.GetButton("Fire1")){
AudioSource.PlayClipAtPoint(vacio, transform.position, 1);}
destello.active = false;
}
}
function recargando (){
if(municiontotal > 0){
municiontotal -= 100;
municion +=100;
}
if (municion >100){
municion = 100;
}
}
Cita de: ramunda date=1434275388
f(Input.GetButton("Fire1")){
AudioSource.PlayClipAtPoint(gunShot, transform.position, 1);
if (municion > 0 && municiontotal >= 0){
var clona = Instantiate(Bala, transform.position, transform.rotation);
Prueba poniendo el "AudioSource.PlayClipAtPoint(gunShot, transform.position, 1);" debajo del
if (municion > 0 && municiontotal >= 0)
Cita de: DavidV date=1434305962
f(Input.GetButton("Fire1")){
AudioSource.PlayClipAtPoint(gunShot, transform.position, 1);
if (municion > 0 && municiontotal >= 0){
var clona = Instantiate(Bala, transform.position, transform.rotation);
Prueba poniendo el "AudioSource.PlayClipAtPoint(gunShot, transform.position, 1);" debajo del
if (municion > 0 && municiontotal >= 0)
Siempre he dicho...ser un Genio no es un titulo es tener cabeza!! y tu tienes las dos cosas , funciona perfectamente tal y como dijiste!!, muchas muchas gracias por la prestura y por la amabilidad y tiempo invertido en mi pobre conocimiento.
Me arriesgo a pedirte una cosa mas!!, mi personaje la palma sisisi hahahah, y esta perdido por el bosque y me gustaria que cuando muriera respawneara en algun lugar de este bosque aleatorio...he probado varias cosas y sin exito...se te ocurre algo?
Aquí
if(currentHealth <= 0){
player.transform.position = new Vector3(6,1,4);
currentHealth = 100;
}
se que hay algo de un ramdom pero no consigo atinarlo
el fragmento de JS que la palma y las coordenadas que le especifique ya que de momento no tengo otra cosa
Sí es que aparezca en cualquier parte del bosque o área podrías probar con este.
if(currentHealth <= 0){
transform.position = new Vector3(Random.Range(-10.0f, 10.0f), 0, Random.Range(-10.0f, 10.0f));
currentHealth = 100;
}
El personaje va a aparecer en una posición entre -10.0 y 10.0 en el Eje de las X y las Z.
Puede Aumentar el número para que la zona en donde aparezca sea más amplia.
Cita de: DavidV date=1434322815Sí es que aparezca en cualquier parte del bosque o área podrías probar con este.
if(currentHealth <= 0){
transform.position = new Vector3(Random.Range(-10.0f, 10.0f), 0, Random.Range(-10.0f, 10.0f));
currentHealth = 100;
}
El personaje va a aparecer en una posición entre -10.0 y 10.0 en el Eje de las X y las Z.
Puede Aumentar el número para que la zona en donde aparezca sea más amplia.
Un 10 para ti de nuevo...que envidia me das, sana eso si pero envidia me tire 4 dias con esto del random y solo consegui aspirinas...bien funciona!!, pero hay un handicap xd la isal en si...esta rodeada de agua y ...la mayoria de veces aparece en el agua...y claro...se jodio XD pregunto sirve de algo que te diga las dimensiones de el terrain? alli todo es suelo se podrian mas o menos calcular desde eso?? entiendo lo de el 10.0 y menos 10 eso lo veo claro pero estaria guay que apareciera en cualquier parte de todo el terrain...el terrain tiene 2000 x 2000 no se si sirve para nada.Pero GRACIAS de antemano de verdad! el mundo necesita gente como tu amigo!!