Ataque e Dano no Inimigo [HELP]
+2
iahGod
jaqspw
6 participantes
Página 1 de 1
Ataque e Dano no Inimigo [HELP]
Olá boa tarde,
Estou desenvolvendo um jogo para apresentar na segunda-feira, como trabalho da minha faculdade.
Meu personagem já está com a animação funcionando, ela está dando o soco e o chute com os botões do mouse, esquerdo e direito.
O meu inimigo já me segue e me ataca quando chega perto de mim. Só que nenhum dos dois está dando ou sofrendo dano.
Fora que eu não sei como colocar as animações de dano e de morte no meio disso tudo.
Como posso resolver isso?
Script do Personagem:
Script do Inimigo:
Poderiam me ajudar? Já procurei em vários tutoriais e não achei nada que dê certo.
Estou desenvolvendo um jogo para apresentar na segunda-feira, como trabalho da minha faculdade.
Meu personagem já está com a animação funcionando, ela está dando o soco e o chute com os botões do mouse, esquerdo e direito.
O meu inimigo já me segue e me ataca quando chega perto de mim. Só que nenhum dos dois está dando ou sofrendo dano.
Fora que eu não sei como colocar as animações de dano e de morte no meio disso tudo.
Como posso resolver isso?
Script do Personagem:
- Código:
using UnityEngine;
using System.Collections;
public class Player : MonoBehaviour
{
public float velocidade = 0.02f;
public float velocidadeRotacao = 10f;
public float velocidadeCorre = 0.04f;
float velocidadeAplicada;
float move;
float moveX;
Rigidbody rigid;
public float jumpForce = 200f;
//Rotação da Tela
public float speedH = 6.0f;
public float speedV = 4.0f;
private float yaw = 0.0f;
private float pitch = 0.0f;
Animator anim;
// Use this for initialization
void Start()
{
anim = GetComponent<Animator> ();
rigid = GetComponent<Rigidbody> ();
}
// Update is called once per frame
void Update(){
anim.SetFloat ("Speed",0);
if (Input.anyKey == false)
{
anim.SetBool ("IsWalking",false);
}
if (Input.GetKey (KeyCode.LeftShift)) //Shift Esquerdo para correr
{
velocidadeAplicada = velocidadeCorre;
} else {
velocidadeAplicada = velocidade;
}
if (Input.GetKey(KeyCode.W)) //Cima
{
transform.Translate(0, 0, velocidadeAplicada);
anim.SetFloat ("Speed",velocidadeAplicada);
}
if (Input.GetKey(KeyCode.S)) //Baixo
{
transform.Translate(0, 0, -velocidadeAplicada);
anim.SetFloat ("Speed",-velocidadeAplicada);
}
if (Input.GetKey(KeyCode.A)) //Esquerda
{
transform.Translate(-velocidadeAplicada, 0, 0);
anim.SetFloat ("Speed",velocidadeAplicada);
}
if (Input.GetKey(KeyCode.D)) //Direita
{
transform.Translate(velocidadeAplicada, 0, 0);
anim.SetFloat ("Speed",velocidadeAplicada);
}
if (Input.GetKeyDown (KeyCode.Space) && velocidade > 0f & transform.position.y<3.5f) //Pulo
{
anim.SetBool ("Jump", true);
rigid.AddForce (new Vector3 (0f, jumpForce, 0f));
}else{
anim.SetBool ("Jump", false);
}
if (Input.GetMouseButtonDown (0)) { //Botão Esquerdo Mouse
anim.SetBool ("Ataque", true);
} else {
anim.SetBool ("Ataque", false);
}
if (Input.GetMouseButtonDown (1)) { //Botão Direito Mouse
anim.SetBool ("Chute", true);
} else {
anim.SetBool ("Chute", false);
}
/*Rotação da Tela, nos eixos X e Y
yaw += speedH * Input.GetAxis ("Horizontal");
//pitch -= speedV * Input.GetAxis ("Mouse Y");
transform.eulerAngles = new Vector3 (pitch, yaw, 0.0f);*/
}
}
Script do Inimigo:
- Código:
using UnityEngine;
using System.Collections;
public class ScriptInimigo : MonoBehaviour {
NavMeshAgent agent;
public Transform target;
bool attackAnim;
Animator animator;
void Start ()
{
attackAnim = false;
animator = GetComponent<Animator> ();
agent = GetComponent<NavMeshAgent> ();
}
void OnTriggerEnter (Collider col){
if (col.gameObject.tag == "Player") {
attackAnim = true;
AnimatorEsqueleto ("Attack");
}
}
void OnTriggerExit (Collider col){
if (attackAnim) {
attackAnim = false;
AnimatorEsqueleto ("Walk");
}
}
void AnimatorEsqueleto (string direction){
animator.SetTrigger (direction);
}
void Update ()
{
agent.SetDestination(target.position);
}
}
Poderiam me ajudar? Já procurei em vários tutoriais e não achei nada que dê certo.
jaqspw- Iniciante
- PONTOS : 3101
REPUTAÇÃO : 0
Respeito as regras :
Re: Ataque e Dano no Inimigo [HELP]
No script vc tem que fazer a vida do seu personagem e inimigo para que eles possas receber dano, tmb o dano que eles vão dar... A animação de morte é por exemplo: se a vida do player for menor ou igual a 0 ( <= 0), ele morra e de play na animação, então eu coloquei mais coisas em seu script, vê se funcionou:
Player:
Inimigo:
Player:
- Código:
using UnityEngine;
using System.Collections;
public class Player : MonoBehaviour
{
public float velocidade = 0.02f;
public float velocidadeRotacao = 10f;
public float velocidadeCorre = 0.04f;
float velocidadeAplicada;
public int vida;
public int danoAtaque;
public int danoChute;
private float cronometro;
private float tempoDeAtaque;
float move;
float moveX;
Rigidbody rigid;
public float jumpForce = 200f;
//Rotação da Tela
public float speedH = 6.0f;
public float speedV = 4.0f;
private float yaw = 0.0f;
private float pitch = 0.0f;
Animator anim;
// Use this for initialization
void Start()
{
anim = GetComponent<Animator>();
rigid = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update()
{
if( vida <= 0)
{
anim.SetBool("nomeAnimaçãoDeMorte", true);
GetComponent<ScriptInimigo>().attackAnim = false;
}
anim.SetFloat("Speed", 0);
if (Input.anyKey == false)
{
anim.SetBool("IsWalking", false);
}
if (Input.GetKey(KeyCode.LeftShift)) //Shift Esquerdo para correr
{
velocidadeAplicada = velocidadeCorre;
}
else
{
velocidadeAplicada = velocidade;
}
if (Input.GetKey(KeyCode.W)) //Cima
{
transform.Translate(0, 0, velocidadeAplicada);
anim.SetFloat("Speed", velocidadeAplicada);
}
if (Input.GetKey(KeyCode.S)) //Baixo
{
transform.Translate(0, 0, -velocidadeAplicada);
anim.SetFloat("Speed", -velocidadeAplicada);
}
if (Input.GetKey(KeyCode.A)) //Esquerda
{
transform.Translate(-velocidadeAplicada, 0, 0);
anim.SetFloat("Speed", velocidadeAplicada);
}
if (Input.GetKey(KeyCode.D)) //Direita
{
transform.Translate(velocidadeAplicada, 0, 0);
anim.SetFloat("Speed", velocidadeAplicada);
}
if (Input.GetKeyDown(KeyCode.Space) && velocidade > 0f & transform.position.y < 3.5f) //Pulo
{
anim.SetBool("Jump", true);
rigid.AddForce(new Vector3(0f, jumpForce, 0f));
}
else
{
anim.SetBool("Jump", false);
}
if (Input.GetMouseButtonDown(0))
{ //Botão Esquerdo Mouse
cronometro += Time.deltaTime;
if(cronometro > tempoDeAtaque)
{
anim.SetBool("Ataque", true);
GetComponent<ScriptInimigo>().vidaInimigo = -danoAtaque;
}
}
else
{
anim.SetBool("Ataque", false);
}
if (Input.GetMouseButtonDown(1))
{ //Botão Direito Mouse
cronometro += Time.deltaTime;
if (cronometro > tempoDeAtaque)
{
anim.SetBool("Chute", true);
GetComponent<ScriptInimigo>().vidaInimigo = -danoChute;
}
}
else
{
anim.SetBool("Chute", false);
}
/*Rotação da Tela, nos eixos X e Y
yaw += speedH * Input.GetAxis ("Horizontal");
//pitch -= speedV * Input.GetAxis ("Mouse Y");
transform.eulerAngles = new Vector3 (pitch, yaw, 0.0f);*/
}
}
Inimigo:
- Código:
using UnityEngine;
using System.Collections;
public class ScriptInimigo : MonoBehaviour
{
NavMeshAgent agent;
public Transform target;
public bool attackAnim;
Animator animator;
public int vidaInimigo;
public int dano;
private float cronometro;
private float tempoDeAtaque = 2;
void Start()
{
attackAnim = false;
animator = GetComponent<Animator>();
agent = GetComponent<NavMeshAgent>();
}
void OnTriggerEnter(Collider col)
{
if (col.gameObject.tag == "Player")
{
attackAnim = true;
cronometro += Time.deltaTime;
if (cronometro > tempoDeAtaque)
{
AnimatorEsqueleto("Attack");
GetComponent<Player>().vida = - dano;
cronometro = 0;
}
}
}
void OnTriggerExit(Collider col)
{
if (attackAnim)
{
attackAnim = false;
AnimatorEsqueleto("Walk");
}
}
void AnimatorEsqueleto(string direction)
{
animator.SetTrigger(direction);
}
void Update()
{
agent.SetDestination(target.position);
}
}
Re: Ataque e Dano no Inimigo [HELP]
iagokennedyy escreveu:No script vc tem que fazer a vida do seu personagem e inimigo para que eles possas receber dano, tmb o dano que eles vão dar... A animação de morte é por exemplo: se a vida do player for menor ou igual a 0 ( <= 0), ele morra e de play na animação, então eu coloquei mais coisas em seu script, vê se funcionou:
Player:
- Código:
using UnityEngine;
using System.Collections;
public class Player : MonoBehaviour
{
public float velocidade = 0.02f;
public float velocidadeRotacao = 10f;
public float velocidadeCorre = 0.04f;
float velocidadeAplicada;
public int vida;
public int danoAtaque;
public int danoChute;
private float cronometro;
private float tempoDeAtaque;
float move;
float moveX;
Rigidbody rigid;
public float jumpForce = 200f;
//Rotação da Tela
public float speedH = 6.0f;
public float speedV = 4.0f;
private float yaw = 0.0f;
private float pitch = 0.0f;
Animator anim;
// Use this for initialization
void Start()
{
anim = GetComponent<Animator>();
rigid = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update()
{
if( vida <= 0)
{
anim.SetBool("nomeAnimaçãoDeMorte", true);
GetComponent<ScriptInimigo>().attackAnim = false;
}
anim.SetFloat("Speed", 0);
if (Input.anyKey == false)
{
anim.SetBool("IsWalking", false);
}
if (Input.GetKey(KeyCode.LeftShift)) //Shift Esquerdo para correr
{
velocidadeAplicada = velocidadeCorre;
}
else
{
velocidadeAplicada = velocidade;
}
if (Input.GetKey(KeyCode.W)) //Cima
{
transform.Translate(0, 0, velocidadeAplicada);
anim.SetFloat("Speed", velocidadeAplicada);
}
if (Input.GetKey(KeyCode.S)) //Baixo
{
transform.Translate(0, 0, -velocidadeAplicada);
anim.SetFloat("Speed", -velocidadeAplicada);
}
if (Input.GetKey(KeyCode.A)) //Esquerda
{
transform.Translate(-velocidadeAplicada, 0, 0);
anim.SetFloat("Speed", velocidadeAplicada);
}
if (Input.GetKey(KeyCode.D)) //Direita
{
transform.Translate(velocidadeAplicada, 0, 0);
anim.SetFloat("Speed", velocidadeAplicada);
}
if (Input.GetKeyDown(KeyCode.Space) && velocidade > 0f & transform.position.y < 3.5f) //Pulo
{
anim.SetBool("Jump", true);
rigid.AddForce(new Vector3(0f, jumpForce, 0f));
}
else
{
anim.SetBool("Jump", false);
}
if (Input.GetMouseButtonDown(0))
{ //Botão Esquerdo Mouse
cronometro += Time.deltaTime;
if(cronometro > tempoDeAtaque)
{
anim.SetBool("Ataque", true);
GetComponent<ScriptInimigo>().vidaInimigo = -danoAtaque;
}
}
else
{
anim.SetBool("Ataque", false);
}
if (Input.GetMouseButtonDown(1))
{ //Botão Direito Mouse
cronometro += Time.deltaTime;
if (cronometro > tempoDeAtaque)
{
anim.SetBool("Chute", true);
GetComponent<ScriptInimigo>().vidaInimigo = -danoChute;
}
}
else
{
anim.SetBool("Chute", false);
}
/*Rotação da Tela, nos eixos X e Y
yaw += speedH * Input.GetAxis ("Horizontal");
//pitch -= speedV * Input.GetAxis ("Mouse Y");
transform.eulerAngles = new Vector3 (pitch, yaw, 0.0f);*/
}
}
Inimigo:
- Código:
using UnityEngine;
using System.Collections;
public class ScriptInimigo : MonoBehaviour
{
NavMeshAgent agent;
public Transform target;
public bool attackAnim;
Animator animator;
public int vidaInimigo;
public int dano;
private float cronometro;
private float tempoDeAtaque = 2;
void Start()
{
attackAnim = false;
animator = GetComponent<Animator>();
agent = GetComponent<NavMeshAgent>();
}
void OnTriggerEnter(Collider col)
{
if (col.gameObject.tag == "Player")
{
attackAnim = true;
cronometro += Time.deltaTime;
if (cronometro > tempoDeAtaque)
{
AnimatorEsqueleto("Attack");
GetComponent<Player>().vida = - dano;
cronometro = 0;
}
}
}
void OnTriggerExit(Collider col)
{
if (attackAnim)
{
attackAnim = false;
AnimatorEsqueleto("Walk");
}
}
void AnimatorEsqueleto(string direction)
{
animator.SetTrigger(direction);
}
void Update()
{
agent.SetDestination(target.position);
}
}
Amigo, aparecem as variáveis, coloquei o tanto de vida do personagem, o tanto de dano que ele vai dar e receber do inimigo. Mas quando dou play simplesmente não acontece nada, eles se atacam, mas nenhum tira vida do outro.
Continua intacto, teria outro jeito de entrarmos em contato? Estou precisando de uma ajuda no meu projeto, se não for incomodar. É que esse projeto eu vou apresentar pra algumas empresas aqui de Brasília, dai não quero fazer feio. :/ Posso até pagar se for o caso.
jaqspw- Iniciante
- PONTOS : 3101
REPUTAÇÃO : 0
Respeito as regras :
Re: Ataque e Dano no Inimigo [HELP]
Vc adicionou a tag ? No player ?
Weslley- Moderador
- PONTOS : 5726
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Re: Ataque e Dano no Inimigo [HELP]
weslleyFx escreveu:Vc adicionou a tag ? No player ?
Adicionei sim.
jaqspw- Iniciante
- PONTOS : 3101
REPUTAÇÃO : 0
Respeito as regras :
Re: Ataque e Dano no Inimigo [HELP]
iagokennedyy escreveu:Passa seu skype.
jaqspw
jaqspw- Iniciante
- PONTOS : 3101
REPUTAÇÃO : 0
Respeito as regras :
Re: Ataque e Dano no Inimigo [HELP]
Cara, vi os scripts mas não identifiquei nenhuma função de ataque...
tente dar uma olhada neste tutorial:
tente dar uma olhada neste tutorial:
Re: Ataque e Dano no Inimigo [HELP]
como faço para quando meu inimigo ficar 5 cm perto de mim chamar um cena
thiagograssi- MembroAvançado
- PONTOS : 3373
REPUTAÇÃO : 43
Idade : 20
Áreas de atuação : Photoshop;
SketchUp;
C#(Learning);
Respeito as regras :
Re: Ataque e Dano no Inimigo [HELP]
Boa noite! Brother thiagograssi, um script bem simples para isso, segue:
Abraço!
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;
public class inimigo : MonoBehaviour {
public float DistanciaDoPlayer = 3.0f;
public GameObject Player;
void Update () {
if (Vector3.Distance (transform.position, Player.transform.position) <= DistanciaDoPlayer) {
SceneManager.LoadScene ("teste2");
}
}
}
Abraço!
Re: Ataque e Dano no Inimigo [HELP]
vlw mano "ce" é foda :lol!:
thiagograssi- MembroAvançado
- PONTOS : 3373
REPUTAÇÃO : 43
Idade : 20
Áreas de atuação : Photoshop;
SketchUp;
C#(Learning);
Respeito as regras :
Tópicos semelhantes
» [RESOLVIDO] Tomar dano do inimigo e causar dano no mesmo
» Adicionar mais um ataque ao inimigo.
» Dano do inimigo
» dano inimigo 2D
» Dano no inimigo
» Adicionar mais um ataque ao inimigo.
» Dano do inimigo
» dano inimigo 2D
» Dano no inimigo
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos