Não causar dano no 2º Inimigo
3 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Não causar dano no 2º Inimigo
Bom dia, eu criei 1 script Inimigo e Jogador, quando testo com 1 inimigo sozinho o script funciona perfeitamente (recebe dano e quando atinge 0 de vida o inimigo destrui-se), mas quando tem 2 inimigos ou mais o Jogador só causa dano a um inimigo e o outro não recebe dano.
Script Jogador:
Script Inimigo:
Aguardo as respostas :D
Script Jogador:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class Jogador : MonoBehaviour {
public int vida = 1000;
private GameObject inimigo;
private bool podeAtacar;
void Awake(){
transform.tag = "Player";
}
void Start(){
podeAtacar = true;
inimigo = GameObject.FindWithTag ("Inimigo");
}
void Update () {
if (vida <= 0) {
vida = 0;
SceneManager.LoadScene ("Morte");
}
if (Vector3.Distance (transform.position, inimigo.transform.position) < 1.5f) {
Atacar ();
}
}
void Atacar(){
if (podeAtacar == true) {
StartCoroutine ("TempoDeAtaque");
inimigo.GetComponent<Inimigo> ().vida -= 50;//dano do personagem
}
}
IEnumerator TempoDeAtaque(){
podeAtacar = false;
yield return new WaitForSeconds (1);
podeAtacar = true;
}
}
Script Inimigo:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(UnityEngine.AI.NavMeshAgent))]
public class Inimigo : MonoBehaviour {
private GameObject player;
private UnityEngine.AI.NavMeshAgent navMesh;
private bool podeAtacar;
public int vida = 100;
void Awake(){
transform.tag = "Inimigo";
}
void Start () {
podeAtacar = true;
player = GameObject.FindWithTag ("Player");
navMesh = GetComponent<UnityEngine.AI.NavMeshAgent> ();
}
void Update () {
navMesh.destination = player.transform.position;
if (Vector3.Distance (transform.position, player.transform.position) < 1.5f){
Atacar ();
}
if (vida <= 0) {
vida = 0;
Destroy (gameObject);
}
}
void Atacar(){
if (podeAtacar == true) {
StartCoroutine ("TempoDeAtaque");
player.GetComponent<Jogador> ().vida -= 20;//dano do personagem
}
}
IEnumerator TempoDeAtaque(){
podeAtacar = false;
yield return new WaitForSeconds (1);
podeAtacar = true;
}
}
Aguardo as respostas :D
GloryGames- Membro
- PONTOS : 2878
REPUTAÇÃO : 11
Respeito as regras :
Bruno- ProgramadorMaster
- PONTOS : 3414
REPUTAÇÃO : 142
Idade : 22
Áreas de atuação : C# Avançado, SQL Intermediário, Unity3D Intermediário, HTML Iniciante, CSS Iniciante e ASP.NET
Respeito as regras :
Re: Não causar dano no 2º Inimigo
Aqui seu erro:
Se voce usar o GetComponent ele não vai pegar o inimigo que sofreu o dano ele vai pegar o primeiro inimigo.
Tenta assim:
Na script do inimigo coloca algo para detectar colisão.
Depois e só voce adicionar o dano.
Script Inimigo
- Código:
void Atacar(){
if (podeAtacar == true) {
StartCoroutine ("TempoDeAtaque");
inimigo.GetComponent<Inimigo> ().vida -= 50;//dano do personagem
}
}
Se voce usar o GetComponent ele não vai pegar o inimigo que sofreu o dano ele vai pegar o primeiro inimigo.
Tenta assim:
Na script do inimigo coloca algo para detectar colisão.
Depois e só voce adicionar o dano.
Script Inimigo
- Código:
void OnTriggerEnter (col : Collider)
{
if(col.transform.tag=="bala")//se o objeto que colidir tiver a tag bala
{
//DANO vida -= 50;
}
}
Re: Não causar dano no 2º Inimigo
Sim.Bruninho escreveu:Vc Crior O Prefab Do Inimigo?
GloryGames- Membro
- PONTOS : 2878
REPUTAÇÃO : 11
Respeito as regras :
Re: Não causar dano no 2º Inimigo
Fiz o que vc dize, mas nao estou a conseguir que nenhum dos inimigos tome dano agora ....Matrirxp escreveu:Aqui seu erro:
- Código:
void Atacar(){
if (podeAtacar == true) {
StartCoroutine ("TempoDeAtaque");
inimigo.GetComponent<Inimigo> ().vida -= 50;//dano do personagem
}
}
Se voce usar o GetComponent ele não vai pegar o inimigo que sofreu o dano ele vai pegar o primeiro inimigo.
Tenta assim:
Na script do inimigo coloca algo para detectar colisão.
Depois e só voce adicionar o dano.
Script Inimigo
- Código:
void OnTriggerEnter (col : Collider)
{
if(col.transform.tag=="bala")//se o objeto que colidir tiver a tag bala
{
//DANO vida -= 50;
}
}
GloryGames- Membro
- PONTOS : 2878
REPUTAÇÃO : 11
Respeito as regras :
Re: Não causar dano no 2º Inimigo
GloryGames escreveu:Fiz o que vc dize, mas nao estou a conseguir que nenhum dos inimigos tome dano agora ....Matrirxp escreveu:Aqui seu erro:
- Código:
void Atacar(){
if (podeAtacar == true) {
StartCoroutine ("TempoDeAtaque");
inimigo.GetComponent<Inimigo> ().vida -= 50;//dano do personagem
}
}
Se voce usar o GetComponent ele não vai pegar o inimigo que sofreu o dano ele vai pegar o primeiro inimigo.
Tenta assim:
Na script do inimigo coloca algo para detectar colisão.
Depois e só voce adicionar o dano.
Script Inimigo
- Código:
void OnTriggerEnter (col : Collider)
{
if(col.transform.tag=="bala")//se o objeto que colidir tiver a tag bala
{
//DANO vida -= 50;
}
}
Manda sua script.
Re: Não causar dano no 2º Inimigo
Script Jogador:Matrirxp escreveu:GloryGames escreveu:Fiz o que vc dize, mas nao estou a conseguir que nenhum dos inimigos tome dano agora ....Matrirxp escreveu:Aqui seu erro:
- Código:
void Atacar(){
if (podeAtacar == true) {
StartCoroutine ("TempoDeAtaque");
inimigo.GetComponent<Inimigo> ().vida -= 50;//dano do personagem
}
}
Se voce usar o GetComponent ele não vai pegar o inimigo que sofreu o dano ele vai pegar o primeiro inimigo.
Tenta assim:
Na script do inimigo coloca algo para detectar colisão.
Depois e só voce adicionar o dano.
Script Inimigo
- Código:
void OnTriggerEnter (col : Collider)
{
if(col.transform.tag=="bala")//se o objeto que colidir tiver a tag bala
{
//DANO vida -= 50;
}
}
Manda sua script.
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class Jogador : MonoBehaviour {
public int vida = 1000;
private GameObject inimigo;
void Awake(){
transform.tag = "Player";
}
void Start(){
inimigo = GameObject.FindWithTag ("Inimigo");
}
void Update () {
if (vida <= 0) {
vida = 0;
SceneManager.LoadScene ("Morte");
}
}
}
Script Inimigo:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(UnityEngine.AI.NavMeshAgent))]
public class Inimigo : MonoBehaviour {
private GameObject player;
private UnityEngine.AI.NavMeshAgent navMesh;
private bool podeAtacar;
public int vida = 100;
void Awake(){
transform.tag = "Inimigo";
}
void Start () {
podeAtacar = true;
player = GameObject.FindWithTag ("Player");
navMesh = GetComponent<UnityEngine.AI.NavMeshAgent> ();
}
void Update () {
navMesh.destination = player.transform.position;
if (Vector3.Distance (transform.position, player.transform.position) < 1.5f){
Atacar ();
}
if (vida <= 0) {
vida = 0;
Destroy (gameObject);
}
}
void Atacar(){
if (podeAtacar == true) {
StartCoroutine ("TempoDeAtaque");
player.GetComponent<Jogador> ().vida -= 20;//dano do personagem
}
}
IEnumerator TempoDeAtaque(){
podeAtacar = false;
yield return new WaitForSeconds (1);
podeAtacar = true;
}
void OnTriggerEnter (Collider col)
{
if(col.transform.tag=="Player")
{
vida -= 50;
}
}
}
Qualquer coisa que fiz errado lamento, comecei a aprender programação a poucos dias e ainda estou muito verde xd
GloryGames- Membro
- PONTOS : 2878
REPUTAÇÃO : 11
Respeito as regras :
Re: Não causar dano no 2º Inimigo
Script jogador:
Tenta isso
- Código:
void Start(){
inimigo = GameObject.FindWithTag ("Inimigo");
}
- Código:
void OnCollisionEnter (Collision col)
{
if(col.gameObject.tag == "Player")
{
//DANO
}
}
Tenta isso
Re: Não causar dano no 2º Inimigo
cara, vou ser sincero contigo, já estou a 5 horas a volta deste script (desde que surgiu o problema), não estou a conseguir arranjar.
queria pedir um favor (só faz se tiver tempo e quiser), poderia criar um script, do género que eu fiz, mas com o problema solucionado? Se podesse eu agradecia bastante.
queria pedir um favor (só faz se tiver tempo e quiser), poderia criar um script, do género que eu fiz, mas com o problema solucionado? Se podesse eu agradecia bastante.
GloryGames- Membro
- PONTOS : 2878
REPUTAÇÃO : 11
Respeito as regras :
Re: Não causar dano no 2º Inimigo
Ja deixa o like ai :D .
Inimigo:
player:
Ja fiz um tutorial sobre AI aqui:
https://www.schultzgames.com/t3931-tutorial-ia-simples
https://www.schultzgames.com/t3934-tutorial-ia-simples-parte-2-atirar
Inimigo:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Inimigo : MonoBehaviour {
public float dano;//Dano do inimigo
public float velo;//Velocidade do inimigo
public Transform alvo;
Rigidbody rb;
Quaternion alvoroteition;
float campo;
private GameObject player;
private bool podeAtacar;
public int vida = 100;
Jogador jogador;
void Awake(){
transform.tag = "Inimigo";
}
void Start () {
podeAtacar = true;
player = GameObject.FindWithTag ("Player");
rb = GetComponent<Rigidbody> ();
}
void Update () {
campo = Vector3.Distance (transform.position, alvo.transform.position);
//O inimigo vai atras do player se a distancia entre eles for menor que 10 e maior que 2
if (campo > 2 & campo < 10) {
alvoroteition = Quaternion.LookRotation (alvo.position - transform.position, Vector3.up);
transform.rotation = Quaternion.Slerp (transform.rotation, alvoroteition, Time.deltaTime * 4);
//isso vai fazer ele seguir o player
rb.AddRelativeForce (Vector3.forward * velo);
if (vida <= 0) {
vida = 0;
Destroy (gameObject);
}
}
}
void OnCollisionEnter (Collision col)
{
if(col.gameObject.tag == "Player")
{
vida -= 50;
}
}
}
player:
- Código:
using UnityEngine;
using System.Collections;
public class Jogador : MonoBehaviour {
public static float vida = 1000;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
}
Ja fiz um tutorial sobre AI aqui:
https://www.schultzgames.com/t3931-tutorial-ia-simples
https://www.schultzgames.com/t3934-tutorial-ia-simples-parte-2-atirar
Re: Não causar dano no 2º Inimigo
muito bom os seus tutorias, deu tudo certinho, aprendi bastante coisas :D
muito obrigado mesmo xd
muito obrigado mesmo xd
GloryGames- Membro
- PONTOS : 2878
REPUTAÇÃO : 11
Respeito as regras :
Tópicos semelhantes
» [RESOLVIDO] Tomar dano do inimigo e causar dano no mesmo
» Problema em causar dano no player
» [RESOLVIDO] Dano no inimigo
» Dano do inimigo
» dano inimigo 2D
» Problema em causar dano no player
» [RESOLVIDO] Dano no inimigo
» Dano do inimigo
» dano inimigo 2D
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos