[quote author=kaito" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="15859" data-ipsquote-contentcommentid="100996">Por eso te he dicho que apliques el daño al final de la animación con un evento de animación. Es decir, dentro de una función que es llamada mediante evento de animación compruebas que el player sigue cerca del enemigo y no ha cambiado de posición, y aplicas el daño, una sola vez y al final del ataque.Por eso te he dicho que apliques el daño al final de la animación con un evento de animación. Es decir, dentro de una función que es llamada mediante evento de animación compruebas que el player sigue cerca del enemigo y no ha cambiado de posición, y aplicas el daño, una sola vez y al final del ataque.[/quote]Eso mismo XD
#167
General (Antiguo) / Pausa entre ataques...
Julio 30, 2015, 10:40:35 PM
[quote author=Arthure" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="15859" data-ipsquote-contentcommentid="100982">de buen rollo ramunda, si te pierdes con un "tutorial" de la pagina oficial de unity mejor aprender programacion general antes de querer programar un videojuego xd si para entender algo necesitas que te den justo lo que necesitas hacer, no se llama entender si no hacer copy-paste.segun comentaste, por un problema que tienes (que no es cuestion de recordar el problema) no puedes salir todo lo que te gustaria; pues porque no sacas una ventaja de eso y lo aprovechas para aprender programacion si te gusta este mundillo ? la de gente que quisiera aprender a programar y no puede porque no dispone del tiempo necesario ... si aprendieras programacion antes de meterte a unity, tendrias una nocion y te seria mas o menos sencillo entender los scripts y adaptar-modificar cualquier script a tus necesidades.si no siempre tambien esta la opcion de la seccion "Colaboraciones" en el foro para buscar a alguien que te haga los scripts a medida que tengan la funcion especifica que necesitas para tu proyecto[/quote]hey, compi , que mas quisiera yo que tener todo el dia para aprender mas...cada dia tengo sesiones de bueno unas cosas desagradables que me hacen para que mi cuerpo no me quede vejetal..pero eso es otro tema jejej, aunque no lo creas....aprendo de los copi pastes porque luego me los miro horas y horas y como se que estan bien..pues los aprendo mas rapido
No apliques pausas, en su lugar utiliza eventos de animacion: http://docs.unity3d.com/es/current/Manual/AnimationEventsOnImportedClips.html">http://docs.unity3d.com/es/current/Manual/AnimationEventsOnImportedClips.html al final de la animacion de ataque.[/quote]Gracias @Kaito de buen grado le echare un ojo a la cosa.Sabeis que la he liado.....ahora me doy cuenta de que,,,las animaciones, no son el problema!!!El problema es que me esta aplicando el daño frame a frame en esta intruccion!!
No apliques pausas, en su lugar utiliza eventos de animacion: http://docs.unity3d.com/es/current/Manual/AnimationEventsOnImportedClips.html">http://docs.unity3d.com/es/current/Manual/AnimationEventsOnImportedClips.html al final de la animacion de ataque.[/quote]Gracias @Kaito de buen grado le echare un ojo a la cosa.Sabeis que la he liado.....ahora me doy cuenta de que,,,las animaciones, no son el problema!!!El problema es que me esta aplicando el daño frame a frame en esta intruccion!!character.ApplyDamage(30);Osea explico, que me esta machacando daño de 30 a 1000 revoluciones por segundo sea cual sea la animación , lo que necesito saber..entonces es como relentizar el daño que me aplica por segundo. Mi personaje tiene 100 de vida y tarda el eskeleto 1 segundo en matarme imaginaros lo rapido que me aplica el daño.Osea, un retardo de aplique de daño , algo que relentice esto: character.ApplyDamage(30);Por favore
#168
General (Antiguo) / Pausa entre ataques...
Julio 30, 2015, 09:10:23 PM
Hola gracias a los 2 por las respuestas , y si , por favor @ACarranza te lo agradeceria ya que no tengo ni idea de como hacerlo
[quote author=GSG3D" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="15859" data-ipsquote-contentcommentid="100975">Asihttp://docs.unity3d.com/es/current/Manual/Coroutines.html"> http://docs.unity3d.com/es/current/Manual/Coroutines.html date=1438278150]http://docs.unity3d.com/es/current/Manual/Coroutines.html[/quote]Madre de dios del saber hermoso....la de comas y puntos que hay aqui...alguna aunque sea muestra de como seria?, porque en el link que me has mandado habla de colores y cosas muyyy extrañas...Sea cual sea tu decision.Gracias.
[quote author=GSG3D" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="15859" data-ipsquote-contentcommentid="100975">Asihttp://docs.unity3d.com/es/current/Manual/Coroutines.html"> http://docs.unity3d.com/es/current/Manual/Coroutines.html date=1438278150]http://docs.unity3d.com/es/current/Manual/Coroutines.html[/quote]Madre de dios del saber hermoso....la de comas y puntos que hay aqui...alguna aunque sea muestra de como seria?, porque en el link que me has mandado habla de colores y cosas muyyy extrañas...Sea cual sea tu decision.Gracias.
#169
General (Antiguo) / Pausa entre ataques...
Julio 30, 2015, 07:31:04 PM
Hola muy buenas,tengo este script a un enemigo eskeleto el cual funciona ...pero no muy bien, si me vee en un rango de 50 me persigue y me ataca, eso va bien pero la cosa esque me daña a 1000 revoluciones por segundo....me hace 30 de daño:character.ApplyDamage(30); pero a velocidad rayo!!!he intentado ponerle una pausa o relentizar el tiempo de el ataque con un yield wait for seconds, pero lo de la coorutina o como se llame no hay manera de colocarsela. el script es cortito:
using UnityEngine;en la linea 26 es donde hace el ataque ...le puse el return yeld waitforseconds y me manda al carajo XDD Alguna idea por favor de donde o como poner la coorutina? Gracias!!!
using System.Collections;
public class skellyattack : MonoBehaviour {
public GameObject player;
public GameObject skelly;
public float distance;
//private int damage =10;
public PlayerInfo character;
private float timer = 5f;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
player = GameObject.FindWithTag("jugador");
skelly = gameObject;
distance = Vector3.Distance(player.transform.position,skelly.transform.position);
if (distance <= 3) {
skelly.GetComponent<Animation>().CrossFadeQueued("Run", 0.3f, QueueMode.PlayNow);
skelly.GetComponent<Animation>().CrossFade("SwingHeavy");
character.playerInCombat(true);
character.ApplyDamage(30);
}
else if (distance < 45 && distance > 3.0f) {
skelly.GetComponent<Animation>().CrossFadeQueued("SwingHeavy", 0.3f, QueueMode.PlayNow);
skelly.GetComponent<Animation>().CrossFade("Run");
skelly.transform.LookAt(player.transform.position);
transform.position = Vector3.MoveTowards(transform.position, player.transform.position, 0.15f);
//character.playerInCombat(true);
}
else
//GetComponent<FollowPath>().enabled = true;
{
skelly.GetComponent<Animation>().CrossFadeQueued("Run", 0.3f, QueueMode.PlayNow);
skelly.GetComponent<Animation>().CrossFade("IdleHoldSword");
//character.playerInCombat(true);
}
}
}
#170
General (Antiguo) / Restar vida a jugador
Julio 30, 2015, 06:35:46 PM
o0Charly0o, he cho varios cambios y estoy cerca muy cerca ...pro me falta solo una cosa.Mira este es el codigo modificado:
//substract 30 Health from your currentHealth
currentHealth -= 10;///////////// aquiiiii Todos los bichos sea cual sea me hacen 10 de daño.si pongo esto:character.ApplyDamage(30);me hace 30 si.....pero a velocidad del rayo osea 30 x1000 veces rapido me quita 100 de vida en 1 milisegundo.... Porfavor dime que tienes alguna idea.....
using UnityEngine;de la 111 a la 125.lo que no consigo hacer de ninguna manera es que no tenga que ponerle un valo fijo al daño...explico.if (damageCount >= 100) {
using System.Collections;
public class PlayerInfo : MonoBehaviour {
public GameObject Bocaarma;
public GameObject healthBottle;
public GameObject balarigidbody;
public GameObject player;
public AudioClip deathClip;
public AudioClip deathClip2;
public AudioSource sonido;
public AudioSource sonido2;
public GameObject sonidoisladino;
public GameObject sonidoaguadino2;
public GameObject sonidoaguadino1;
public GameObject sonidoaguadino3;
public GameObject sonidoaguadino4;
public GameObject sonidoaguadino5;
public GameObject sonidoaguadino6;
public GameObject sonidoaguadino7;
public GameObject cave1;
public Animation muerto2;
public float length;
public int Xmin = 400;
public int Xmax = 700;
public int Ymin = 300;
public int Ymax = 800;
int health = 100;
int damageCount = 0;
int currentHealth;
bool playerFighting;
public GUIText healthbar;
float timer = 0.0f;
float healthTimer = 0.0f;
bool healthShouldRespawn = false;
public bool muerto = false;
public GameObject tuUI;
void Start () {
currentHealth = health;
tuUI.SetActive(false);
}
void Update () {
Cursor.visible = false;
print("player in combat? " + playerFighting);
if(!playerFighting){
print("player is not fighting");
if(currentHealth != 100){
timer += Time.deltaTime;
print ("timer: " + timer);
if(timer > 90.0f){
currentHealth += 10;
timer = 0.0f;
}
}
}
else
{
if(currentHealth <= 0 && !muerto ){
muerto = true;
sonido.PlayOneShot(deathClip2);
muerto2.Play("muerto");
GetComponent<CharacterController>().enabled = false;
Bocaarma.SetActive(false);
sonidoisladino.SetActive(false);
sonidoaguadino2.SetActive(false);
sonidoaguadino3.SetActive(false);
sonidoaguadino4.SetActive(false);
sonidoaguadino5.SetActive(false);
sonidoaguadino6.SetActive(false);
sonidoaguadino7.SetActive(false);
sonidoaguadino1.SetActive(false);
cave1.GetComponent<AudioSource>().enabled = false;
//Destroy(gameObject);
}
}
healthbar.text = "Vida " + currentHealth + " / 100";
if(healthShouldRespawn)
{
healthTimer += Time.deltaTime;
if(healthTimer > 5.0f)
{
healthBottle.gameObject.SetActive(true);
healthTimer = 0.0f;
}
}
if(muerto){
Cursor.visible = false;
tuUI.SetActive(true);
if(Input.GetKeyDown(KeyCode.Space)){
Respawn();
}
}
}
public void ApplyDamage(int damage) {
damageCount += damage; // Add new DamageCount
//Than check if damageCount is higher or equal to your limit 100
if (damageCount >= 100) {
//substract 30 Health from your currentHealth
currentHealth -= 10;
//check if health is lower than 0 when true it's set to 0 to avoid negative health.
if (currentHealth < 0) {
currentHealth = 0;
}
sonido2.PlayOneShot(deathClip);
healthbar.text = "Health " + currentHealth + " / 100";
damageCount = 0;
}
print(currentHealth);
}
public void playerInCombat(bool combat){
playerFighting = combat;
playerFighting = true;
}
//else
//{
// playerFighting = false;
//}
//}
public void Respawn(){
tuUI.SetActive(false);
muerto = false;
transform.position = new Vector3(Random.Range(Xmin, Xmax),0, Random.Range(Ymin, Ymax));
//transform.position = new Vector3(Random.Range(400.0f, 700.0f), 0, Random.Range(300.0f, 800.0f));
GetComponent<FPSInputController>().enabled = true;
GetComponent<CharacterController>().enabled = true;
sonidoisladino.SetActive(true);
sonidoaguadino2.SetActive(true);
sonidoaguadino3.SetActive(true);
sonidoaguadino4.SetActive(true);
sonidoaguadino5.SetActive(true);
sonidoaguadino6.SetActive(true);
sonidoaguadino7.SetActive(true);
sonidoaguadino1.SetActive(true);
cave1.GetComponent<AudioSource>().enabled = true;
Bocaarma.SetActive(true);
currentHealth = 100;
}
void OnCollisionEnter(Collision collision) {
if (collision.gameObject.tag == "bala") {
ApplyDamage(collision.gameObject.GetComponent<Dañodebala>().damage);
}
}
void OnTriggerEnter(Collider item){
if(item.gameObject.tag == "PlayerHealthBottle")
{
if(currentHealth < 100)
{
currentHealth = currentHealth + 50;
item.gameObject.SetActive(false);
healthShouldRespawn = false;
}
}
}
}
//substract 30 Health from your currentHealth
currentHealth -= 10;///////////// aquiiiii Todos los bichos sea cual sea me hacen 10 de daño.si pongo esto:character.ApplyDamage(30);me hace 30 si.....pero a velocidad del rayo osea 30 x1000 veces rapido me quita 100 de vida en 1 milisegundo.... Porfavor dime que tienes alguna idea.....
#171
General (Antiguo) / Restar vida a jugador
Julio 30, 2015, 03:31:41 PM
[quote author=o0Charly0o" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="15848" data-ipsquote-contentcommentid="100962">creo que no lo has pegado entero, falta el final del codigo y tio, la funcion apllydamage, la puedes poner? xD[/quote]Hola muy buenas compañero perdona por la demora, El codigo esta entero, lo acabo de comparar este codigo es el que recibe el daño etc etc...la funcion que me pides debe ser esta character.ApplyDamage(1);Te dejo un ejemplo de un eskeleto que tengo en el juego que me hace daño al pegarme pero es melee osea con espada.
skelly = gameObject;linea 26
distance = Vector3.Distance(player.transform.position,skelly.transform.position);
if (distance <= 3) {
skelly.GetComponent<Animation>().CrossFadeQueued("Run", 0.3f, QueueMode.PlayNow);
skelly.GetComponent<Animation>().CrossFade("SwingHeavy");
character.ApplyDamage(1);
character.playerInCombat(1);
}
else if (distance < 45 && distance > 3.0f) {
skelly.GetComponent<Animation>().CrossFadeQueued("SwingHeavy", 0.3f, QueueMode.PlayNow);
skelly.GetComponent<Animation>().CrossFade("Run");
skelly.transform.LookAt(player.transform.position);
transform.position = Vector3.MoveTowards(transform.position, player.transform.position, 0.18f);
character.playerInCombat(1);
}
else
{
skelly.GetComponent<Animation>().CrossFadeQueued("Run", 0.3f, QueueMode.PlayNow);
skelly.GetComponent<Animation>().CrossFade("IdleHoldSword");
character.playerInCombat(1);
}
}
}
#172
General (Antiguo) / Restar vida a jugador
Julio 30, 2015, 12:22:06 AM
[quote author=o0Charly0o" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="15848" data-ipsquote-contentcommentid="100934">pega aqui los errores que te de, y puedes poner la funcion applydamage? por lo que veo te da un error al pasar el valor, en algun sitio tienes puesto un int donde deberia ir un float, y todos los float con su f en el valor, tb puedes poner todos en int, eso al gusto, pero todos iguales, si no no rula![/quote]Are una cosa , asi te evito molestias ya que eres tan amable de asesorarme.Este es el código donde todo se mueve (ya se que esta echo un asco pero me funciona
)
) if(!playerFighting){
print("player is not fighting");
if(currentHealth != 100){
timer += Time.deltaTime;
print ("timer: " + timer);
if(timer > 90.0f){
currentHealth += 10;
timer = 0.0f;
}
}
}
else
{
if(currentHealth <= 0 && !muerto ){
muerto = true;
sonido.PlayOneShot(deathClip2);
muerto2.Play("muerto");
GetComponent<FPSInputController>().enabled = false;
GetComponent<CharacterController>().enabled = false;
Bocaarma.SetActive(false);
sonidoisladino.SetActive(false);
sonidoaguadino2.SetActive(false);
sonidoaguadino3.SetActive(false);
sonidoaguadino4.SetActive(false);
sonidoaguadino5.SetActive(false);
sonidoaguadino6.SetActive(false);
sonidoaguadino7.SetActive(false);
sonidoaguadino1.SetActive(false);
cave1.GetComponent<AudioSource>().enabled = false;
}
}
healthbar.text = "Vida " + currentHealth + " / 100";
if(healthShouldRespawn)
{
healthTimer += Time.deltaTime;
if(healthTimer > 5.0f)
{
healthBottle.gameObject.SetActive(true);
healthTimer = 0.0f;
}
}
if(muerto){
Cursor.visible = false;
tuUI.SetActive(true);
if(Input.GetKeyDown(KeyCode.Space)){
Respawn();
}
}
}
public void ApplyDamage(int damage){
damageCount = damageCount + damage;
if(damageCount == 100){
if(currentHealth < 0){
currentHealth = 0;
}
currentHealth = currentHealth - 30;
sonido2.PlayOneShot(deathClip);
healthbar.text = "Health " + currentHealth + " / 100";
damageCount = 0;
}
print(currentHealth);
}
public void playerInCombat(int combat){
if(combat == 1){
playerFighting = true;
}
else
{
playerFighting = false;
}
}
public void Respawn(){
tuUI.SetActive(false);
muerto = false;
transform.position = new Vector3(Random.Range(Xmin, Xmax),0, Random.Range(Ymin, Ymax));
GetComponent<FPSInputController>().enabled = true;
GetComponent<CharacterController>().enabled = true;
sonidoisladino.SetActive(true);
sonidoaguadino2.SetActive(true);
sonidoaguadino3.SetActive(true);
sonidoaguadino4.SetActive(true);
sonidoaguadino5.SetActive(true);
sonidoaguadino6.SetActive(true);
sonidoaguadino7.SetActive(true);
sonidoaguadino1.SetActive(true);
cave1.GetComponent<AudioSource>().enabled = true;
Bocaarma.SetActive(true);
currentHealth = 100;
}
void OnTriggerEnter(Collider item){
if(item.gameObject.tag == "PlayerHealthBottle")
{
if(currentHealth < 100)
{
currentHealth = currentHealth + 50;
item.gameObject.SetActive(false);
healthShouldRespawn = false;
}
}
}
}
y lo que me pides creo que es esto:public void ApplyDamage(int damage){
damageCount = damageCount + damage;
if(damageCount == 100){
if(currentHealth < 0){
currentHealth = 0;
}
currentHealth = currentHealth - 30;
#173
General (Antiguo) / Torreta que gira mal
Julio 30, 2015, 12:17:30 AM
[quote author=antoniomdk" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="15833" data-ipsquote-contentcommentid="100905">Hola buenas. "rotate" no es una propiedad, es un método, por tanto tienes que usar:
transform.Rotate(new Vector3 (0, angulo, 0));O más recomendable:transform.Rotate(new Vector3 (0, angulo, 0) * Time.deltatime);Con esto no te aseguro que la torreta rote correctamente, esta es la función correcta y dentro de ella ya tienes que poner un vector que se adecue.Yo te recomiendo si quieres que la torreta siga al personaje, lo siguiente:int sign = Vector3.Cross(transform.position, Target.position).z < 0 ? -1 : 1;.Rotate(Vector3.up * sign * Time.deltatime);Ten en cuenta que he cogido el eje Z, pero lo puedes cambiar depende de la orientación que tenga tus objetos y demás. Y he cogido el Vector Up pero lo puedes cambiar también por la orientación que deseessSaludos![/quote]Hola ,@antoniomdk , muchas gracias por tu respuesta , el codigo no da error alguno pero la torreta no me sigue solo va hacia adelante o hacia atras muyyy lentamente.Deberia girar sobre su eje y seguir mi posición. de echo tiene varios "trozos articulados especialmente para ello" pero solo va alante y atras, le he cambiado el UP por un right o un left y el efecto es el mismo....la z por la y ..lo mismo.
#174
General (Antiguo) / Restar vida a jugador
Julio 29, 2015, 11:55:53 PM
[quote author=o0Charly0o" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="15848" data-ipsquote-contentcommentid="100932 date=1438206438]ponlos! , seguro que por ahi van los tiros! jajaja[/quote]Yo los pongo pero donde XDDd
#175
General (Antiguo) / Restar vida a jugador
Julio 29, 2015, 11:46:22 PM
[quote author=o0Charly0o" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="15848" data-ipsquote-contentcommentid="100930">declara los int como float, y recuerda que deben ir con una f despues del valor, por ejemplo: float x = 1.0f; Enviado desde mi iPhone utilizando Tapatalk[/quote]quieres decir algo asi?private float Danio = 10.0f;/// EL DAÑO QUE ME HACE ESTA BALA????y asi?character.ApplyDamage(Danio);/// APLICO EL DAÑO?




???me da 2 errores





???me da 2 errores
#176
General (Antiguo) / Restar vida a jugador
Julio 29, 2015, 10:51:01 PM
[quote author=o0Charly0o" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="15848" data-ipsquote-contentcommentid="100925">Hola, puedes poner el script ApplyDamage?Perdona, ya lo he visto, lo tenías arriba MonoBehaviour{
float Danio = 50;
HealthInfo healthInfo;
void OnCollisionEnter(Collision col)
{
if(healthInfo == null)return;
healthInfo.ApplyDamage(Danio);
}
}Y si lo pones así y asignas el healtinfo desde el editor de unity (arrastrando)? los getcomponent no gastan muchos recursos? yo siempre intento evitarlos.un saludo.[/quote]@o0Charly0o, antes que nada agradecerte el tiempo y la molestia de reportar, gracias.Desgraciadamente lo que intento, es con el script de arriba. lo vuelvo a poner.
float Danio = 50;
HealthInfo healthInfo;
void OnCollisionEnter(Collision col)
{
if(healthInfo == null)return;
healthInfo.ApplyDamage(Danio);
}
}Y si lo pones así y asignas el healtinfo desde el editor de unity (arrastrando)? los getcomponent no gastan muchos recursos? yo siempre intento evitarlos.un saludo.[/quote]@o0Charly0o, antes que nada agradecerte el tiempo y la molestia de reportar, gracias.Desgraciadamente lo que intento, es con el script de arriba. lo vuelvo a poner.
using UnityEngine;conseguir que me reste vida a mi jugador.El script que me has escrito da 2 errores: error CS1502: The best overloaded method match for `PlayerInfo.ApplyDamage(int)' has some invalid argumentsy este error CS1503: Argument `#1' cannot convert `float' expression to type `int'esque el script que necesito que funcione es el de arriba y no hay manera de que me reste una misera vida a mi jugador .La segunda opcion , supongo que es la que tu enfocabas es darle un daño a la bala en si y que me la reste, y quitarlo de el de arriba, pero esque tampoco hay manera.....Alomejor tu le vees un color diferente al script y me puedes tirar una luz.Lo unico que puedo aportar es decir que esta linea.
using System.Collections;
public class enemigoataca : MonoBehaviour {
public Transform player;
public float range = 50.0f; /// DISTANCIA EN QUE ME DETECTA
public float bulletImpulse= 70.0f;///FUERZA DE LA BALA
public AudioClip recarga;///SONIDO AL DIAPARA
public PlayerInfo character;///EL SCRIPT DONDE TENGO EL SISTEMA DE VIDA
private bool onRange= false;///SI NO ESTA AL ALCANCE
public Rigidbody projectile;///RIGIDBODY DE LA BALA FISICA
private int Danio = 10;/// EL DAÑO QUE ME HACE ESTA BALA?
void Start(){
float rand = Random.Range (1.0f, 2.0f);///TIENPO DE DISPARO
InvokeRepeating("Shoot", 1, rand);
}
void Shoot(){
if (onRange){
Rigidbody bullet = (Rigidbody)Instantiate(projectile, transform.position + transform.forward, transform.rotation);
bullet.AddForce(transform.forward*bulletImpulse, ForceMode.Impulse);///LA BALA!! QUE DISPARARA QUE COJE DE ARRIBA
//character.ApplyDamage(Danio);
//character.playerInCombat(1);
AudioSource.PlayClipAtPoint(recarga, transform.position, 1);/// EL SONIDO DEL DISPARO
Destroy (bullet.gameObject, 2);///DESTRUYE LA BALA A LOS 2 SEGUNDOS
}
}
void Update() {
onRange = Vector3.Distance(transform.position, player.position)<range;/// BUSCA AL JUGADOR SI ESTA AL ALCANCE
character.ApplyDamage(Danio);/// APLICO EL DAÑO?
//character.playerInCombat(1);
if (onRange)
transform.LookAt(player);///SE GIRA HACIA MI JUGADOR
}
}
private int Danio = 10;/// EL DAÑO QUE ME HACE ESTA BALA?Lo que hace esque se baje la vida pero se para al valor que le pongas , sisi la vida baja sola de 30 en 30 ....a saber porque.Muchas gracias
#177
General (Antiguo) / Restar vida a jugador
Julio 29, 2015, 08:15:14 PM
[quote author=francoe1" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="15848" data-ipsquote-contentcommentid="100918">Te Dejo un UnityPackage y pégale un ojo, están estos dos script mas una pequeña modificación en el del bullet, pero todo funciona. Player Healt.unitypackage[/quote]Bien , tiene un script de una bala parece ser en raycast y un script de vida para el player.Los cuales no puedo probar porque no tengo el script que me dispara la bala(la raycast).Antes usaba este para probar que arriba el compañero Arthure me ha dicho una manera para que me funcionara pero no va te lo ejo aqui :
}Este dispara la bala, sale del cañon en un intervalo de 1 a 2 segundos, e impacta con mi player pero no le hace daño, Te pido POR FAVOR, que me digas que tengo mal en este script , porque por mucho que me esfuerzo no veo porque! no me quita vida, documentare cada linea segun lo que entienda de acuerdo por favor:
void Shoot(){
if (onRange){
Rigidbody bullet = (Rigidbody)Instantiate(projectile, transform.position + transform.forward, transform.rotation);
bullet.AddForce(transform.forward*bulletImpulse, ForceMode.Impulse);
character.ApplyDamage(1);
character.playerInCombat(1);
AudioSource.PlayClipAtPoint(recarga, transform.position, 1);
Destroy (bullet.gameObject, 2);
}
}
void Update() {
onRange = Vector3.Distance(transform.position, player.position)<range;
character.ApplyDamage(1);
if (onRange)
transform.LookAt(player);
}
}
using UnityEngine;Esto va simplemente a un empty GO y dispara esta bala perfectamente , a los intervalos de 1 o 2 segundos, se gira hacia mi el GO y sigue disparando segun el rango de distancia que le diga.Pero no se porque! no daña a mi jugador!!Por favor y mil veces mas porfavor, el codigo lo entiendo pero no entiendo el porque!!! no funciona!!Gracias.
using System.Collections;
public class enemigoataca : MonoBehaviour {
public Transform player;
public float range = 50.0f; /// DISTANCIA EN QUE ME DETECTA
public float bulletImpulse= 70.0f;///FUERZA DE LA BALA
public AudioClip recarga;///SONIDO AL DIAPARA
public PlayerInfo character;///EL SCRIPT DONDE TENGO EL SISTEMA DE VIDA
private bool onRange= false;///SI NO ESTA AL ALCANCE
public Rigidbody projectile;///RIGIDBODY DE LA BALA FISICA
private int Danio = 10;/// EL DAÑO QUE ME HACE ESTA BALA?
void Start(){
float rand = Random.Range (1.0f, 2.0f);///TIENPO DE DISPARO
InvokeRepeating("Shoot", 1, rand);
}
void Shoot(){
if (onRange){
Rigidbody bullet = (Rigidbody)Instantiate(projectile, transform.position + transform.forward, transform.rotation);
bullet.AddForce(transform.forward*bulletImpulse, ForceMode.Impulse);///LA BALA!! QUE DISPARARA QUE COJE DE ARRIBA
//character.ApplyDamage(Danio);
//character.playerInCombat(1);
AudioSource.PlayClipAtPoint(recarga, transform.position, 1);/// EL SONIDO DEL DISPARO
Destroy (bullet.gameObject, 2);///DESTRUYE LA BALA A LOS 2 SEGUNDOS
}
}
void Update() {
onRange = Vector3.Distance(transform.position, player.position)<range;/// BUSCA AL JUGADOR SI ESTA AL ALCANCE
character.ApplyDamage(Danio);/// APLICO EL DAÑO?
//character.playerInCombat(1);
if (onRange)
transform.LookAt(player);///SE GIRA HACIA MI JUGADOR
}
}
#178
General (Antiguo) / Restar vida a jugador
Julio 29, 2015, 06:51:13 PM
[quote author=francoe1" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="15848" data-ipsquote-contentcommentid="100916">
public class Bullet : MonoBehaviour{
float Danio = 50;
void OnCollisionEnter(Collision col)
{
HealthInfo healthInfo = col.transform.GetComponent<HealthInfo>();
if(healthInfo == null)return;
healthInfo.ApplyDamage(Danio);
}
}No puedes acceder a un métodos de HealthInfo si este no es estático, debes crear una referencia al objeto, por eso eh creado esa "var" que se transforma en HealthInfo al ser asignada en la misma linea por ese componente.Ahora directamente puse el tipo HealthInfo y lo asigno, con el GetComponente, tomando la referencia desde el objeto colisionado.Debería funcionar.[/quote]Sigue sin funcionar.Bullet.cs(13,28): error CS1502: The best overloaded method match for `HealthInfo.ApplyDamage(int)' has some invalid argumentsBullet.cs(13,28): error CS1503: Argument `#1' cannot convert `float' expression to type `int'Si cambio la H de la linea : healthInfo.ApplyDamage(Danio);Por una H mayuscula me da solo este:Bullet.cs(13,28): error CS0120: An object reference is required to access non-static member `HealthInfo.ApplyDamage(int)'
#179
General (Antiguo) / Restar vida a jugador
Julio 29, 2015, 05:44:01 PM
[quote author=francoe1" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="15848" data-ipsquote-contentcommentid="100914">Has puesto bien el nombre del componente en GetCompoenent[/quote]Si, ya encontre el fallo, en tu script pones :var healtInfo = col.transform.GetComponent<HealtInfo>();Falta una h detras de la t de Healt....hSigue el eror en las siguientes lineas: healtInfo.ApplyDamage(Danio);Aqui el fallo esta en la H dbe ser mayuscula y falta la h despues de healt...h de nuevo.Espera esto peta todo faltan h/es y mas cosas dame unos minutosYa esta asi esta bien:
#180General (Antiguo) / Restar vida a jugador
Julio 29, 2015, 05:34:15 PM[quote author=francoe1" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="15848" data-ipsquote-contentcommentid="100912 date=1438183806]Lo especifique al principio del Topic, crear un Nuevo Componente. para HealtInfo, osea crea un nuevo script[/quote]Eso he echo.Pero tengo errores , los he comentado hace un segundo mas arribagracias