Sangue no inimigo!!
3 participantes
Página 1 de 1
Sangue no inimigo!!
Eae galera, gostaria de saber como faz para que quando eu atirar no inimigo ele perca sangue, não sei se tem como pois eu utilizo o script do marcos de atirar, e ele não lança projétil!!
- Código:
using System;
using System.Collections;
using UnityEngine;
using UnityEngine.UI;
[Serializable]
public class LaserOuMira {
public bool ativarLaser = false;
public Color corLaser = Color.red;
public bool AtivarMiraComum = true;
}
[Serializable]
public class Arma {
[HideInInspector]
public int balasExtra, balasNoPente;
//
public int danoPorTiro = 40;
[Range (65, 500)]
public int numeroDeBalas = 240;
[Range (1, 50)]
public int balasPorPente = 30;
[Range (0.01f, 5.0f)]
public float tempoPorTiro = 0.3f;
[Range (0.01f, 5.0f)]
public float tempoDaRecarga = 0.5f;
[Space (10)]
public LaserOuMira Miras;
[Space (10)]
public GameObject objetoArma;
public GameObject lugarParticula;
public GameObject particulaFogo;
public AudioClip somTiro, somRecarga;
}
[RequireComponent (typeof (AudioSource))]
public class Atirar : MonoBehaviour {
public KeyCode botaoRecarregar = KeyCode.R;
public int armaInicial = 0;
public string TagInimigo = "inimigo";
public Text BalasPente, BalasExtra;
public Material MaterialLasers;
public Arma[] armas;
//
int armaAtual;
AudioSource emissorSom;
public bool recarregando, atirando;
LineRenderer linhaDoLaser;
GameObject luzColisao;
void Start () {
// Laser das armas
luzColisao = new GameObject ();
Light luz = luzColisao.AddComponent<Light> ();
luz.intensity = 8;
luz.bounceIntensity = 8;
luz.range = 0.2f;
luz.color = Color.red;
LineRenderer lineRenderer = gameObject.AddComponent<LineRenderer> ();
lineRenderer.material = MaterialLasers;
lineRenderer.SetColors (Color.white, Color.white);
lineRenderer.SetWidth (0.015f, 0.05f);
lineRenderer.SetVertexCount (2);
linhaDoLaser = GetComponent<LineRenderer> ();
for (int x = 0; x < armas.Length; x++) {
Arma armaX = armas[x];
armaX.objetoArma.SetActive (false);
armaX.lugarParticula.SetActive (false);
armaX.balasExtra = armaX.numeroDeBalas - armaX.balasPorPente;
armaX.balasNoPente = armaX.balasPorPente;
armaX.Miras.corLaser.a = 1;
}
if (armaInicial > armas.Length - 1) {
armaInicial = armas.Length - 1;
}
armas[armaInicial].objetoArma.SetActive (true);
armas[armaInicial].lugarParticula.SetActive (true);
armaAtual = armaInicial;
emissorSom = GetComponent<AudioSource> ();
recarregando = atirando = false;
}
void Update () {
// UI
BalasExtra.text = "BalasExtra: " + armas[armaAtual].balasExtra;
BalasPente.text = "BalasNoPente: " + armas[armaAtual].balasNoPente;
// Troca de armas
if (Mathf.Abs (Input.GetAxis ("Mouse ScrollWheel")) > 0 && !recarregando && !atirando) {
if (Input.GetAxis ("Mouse ScrollWheel") > 0) {
armaAtual++;
} else if (Input.GetAxis ("Mouse ScrollWheel") < 0) {
armaAtual--;
}
if (armaAtual < 0) {
armaAtual = armas.Length - 1;
}
if (armaAtual > armas.Length - 1) {
armaAtual = 0;
}
AtivarArmaAtual ();
}
//atirar
if (Input.GetMouseButtonDown (0) && armas[armaAtual].balasNoPente > 0 && !recarregando && !atirando) {
atirando = true;
StartCoroutine (TempoTiro (armas[armaAtual].tempoPorTiro));
emissorSom.clip = armas[armaAtual].somTiro;
emissorSom.PlayOneShot (emissorSom.clip);
armas[armaAtual].balasNoPente--;
GameObject balaTemp = Instantiate (armas[armaAtual].particulaFogo, armas[armaAtual].lugarParticula.transform.position, transform.rotation) as GameObject;
Destroy (balaTemp, 0.5f);
RaycastHit pontoDeColisao;
if (Physics.Raycast (transform.position, transform.forward, out pontoDeColisao)) {
if (pontoDeColisao.transform.gameObject.tag == TagInimigo) {
float amountLife = pontoDeColisao.transform.gameObject.GetComponent<Inimigo> ().vida -= armas[armaAtual].danoPorTiro;
// Verifica se o player matou o inimigo (vida inferior ou igual à 0)
if (amountLife <= 0) {
// Adiciona pontuação
GetComponent<PassarDeFase> ().AddPontuation ();
}
}
}
}
// Recarregar
if (Input.GetKeyDown (botaoRecarregar) && !recarregando && !atirando && (armas[armaAtual].balasNoPente < armas[armaAtual].balasPorPente) && (armas[armaAtual].balasExtra > 0)) {
emissorSom.clip = armas[armaAtual].somRecarga;
emissorSom.PlayOneShot (emissorSom.clip);
int todasAsBalas = armas[armaAtual].balasNoPente + armas[armaAtual].balasExtra;
if (todasAsBalas >= armas[armaAtual].balasPorPente) {
armas[armaAtual].balasNoPente = armas[armaAtual].balasPorPente;
armas[armaAtual].balasExtra = todasAsBalas - armas[armaAtual].balasPorPente;
} else {
armas[armaAtual].balasNoPente = todasAsBalas;
armas[armaAtual].balasExtra = 0;
}
recarregando = true;
StartCoroutine (TempoRecarga (armas[armaAtual].tempoDaRecarga));
}
// Laser da arma
if (!recarregando) {
if (armas[armaAtual].Miras.ativarLaser) {
linhaDoLaser.enabled = true;
linhaDoLaser.material.SetColor ("_TintColor", armas[armaAtual].Miras.corLaser);
luzColisao.SetActive (true);
RaycastHit hitDoLaser;
if (Physics.Raycast (transform.position, transform.forward, out hitDoLaser, 500)) {
linhaDoLaser.SetPosition (0, armas[armaAtual].lugarParticula.transform.position);
linhaDoLaser.SetPosition (1, hitDoLaser.point);
float distancia = Vector3.Distance (transform.position, hitDoLaser.point) - 0.03f;
luzColisao.transform.position = transform.position + transform.forward * distancia;
} else {
Vector3 PontoFinalDoLaser = transform.position + (transform.forward * 500);
linhaDoLaser.SetPosition (0, armas[armaAtual].lugarParticula.transform.position);
linhaDoLaser.SetPosition (1, PontoFinalDoLaser);
luzColisao.transform.position = PontoFinalDoLaser;
}
}
} else {
linhaDoLaser.enabled = false;
luzColisao.SetActive (false);
}
// Checar limites da municao
if (armas[armaAtual].balasNoPente > armas[armaAtual].balasPorPente) {
armas[armaAtual].balasNoPente = armas[armaAtual].balasPorPente;
} else if (armas[armaAtual].balasNoPente < 0) {
armas[armaAtual].balasNoPente = 0;
}
int numBalasExtra = armas[armaAtual].numeroDeBalas - armas[armaAtual].balasPorPente;
if (armas[armaAtual].balasExtra > numBalasExtra) {
armas[armaAtual].balasExtra = numBalasExtra;
} else if (armas[armaAtual].balasExtra < 0) {
armas[armaAtual].balasExtra = 0;
}
}
IEnumerator TempoTiro (float tempoDoTiro) {
yield return new WaitForSeconds (tempoDoTiro);
atirando = false;
}
IEnumerator TempoRecarga (float tempoAEsperar) {
yield return new WaitForSeconds (tempoAEsperar);
recarregando = false;
}
void AtivarArmaAtual () {
for (int x = 0; x < armas.Length; x++) {
armas[x].objetoArma.SetActive (false);
armas[x].lugarParticula.SetActive (false);
}
armas[armaAtual].objetoArma.SetActive (true);
armas[armaAtual].lugarParticula.SetActive (true);
if (armas[armaAtual].Miras.ativarLaser == true) {
linhaDoLaser.material.color = armas[armaAtual].Miras.corLaser;
linhaDoLaser.enabled = true;
luzColisao.SetActive (true);
luzColisao.GetComponent<Light> ().color = armas[armaAtual].Miras.corLaser;
} else {
linhaDoLaser.enabled = false;
luzColisao.SetActive (false);
}
}
void OnGUI () {
if (armas[armaAtual].Miras.AtivarMiraComum == true) {
GUIStyle stylez = new GUIStyle ();
stylez.alignment = TextAnchor.MiddleCenter;
GUI.skin.label.fontSize = 20;
GUI.Label (new Rect (Screen.width / 2 - 6, Screen.height / 2 - 12, 12, 22), "+");
}
}
}
Edivandro2706- Avançado
- PONTOS : 2088
REPUTAÇÃO : 4
Respeito as regras :
Re: Sangue no inimigo!!
Acho que é porque esse sistema de tiro é com raycast, no caso vc tem que dar o dano no inimigo ali na linha 122 '-'
aqui no fórum tem um sistema de tiro que atira projeteis também mas acredito que esse do marcos seja melhor mas vai de cada projeto ^^
aqui no fórum tem um sistema de tiro que atira projeteis também mas acredito que esse do marcos seja melhor mas vai de cada projeto ^^
speedluk- Avançado
- PONTOS : 2676
REPUTAÇÃO : 29
Idade : 32
Respeito as regras :
Re: Sangue no inimigo!!
Então, ele já dá dano no inimigo, mas eu gostaria que quando desse esse dano, o inimigo perdesse sangue, porem não sei se tem como ou se tem algum vídeo explicando?speedluk escreveu:Acho que é porque esse sistema de tiro é com raycast, no caso vc tem que dar o dano no inimigo ali na linha 122 '-'
aqui no fórum tem um sistema de tiro que atira projeteis também mas acredito que esse do marcos seja melhor mas vai de cada projeto ^^
Edivandro2706- Avançado
- PONTOS : 2088
REPUTAÇÃO : 4
Respeito as regras :
Re: Sangue no inimigo!!
vc ta falando de sangue particulas de sangue ou tirar sangue "numeros" do inimigoEdivandro2706 escreveu:Então, ele já dá dano no inimigo, mas eu gostaria que quando desse esse dano, o inimigo perdesse sangue, porem não sei se tem como ou se tem algum vídeo explicando?speedluk escreveu:Acho que é porque esse sistema de tiro é com raycast, no caso vc tem que dar o dano no inimigo ali na linha 122 '-'
aqui no fórum tem um sistema de tiro que atira projeteis também mas acredito que esse do marcos seja melhor mas vai de cada projeto ^^
diegopds- Mestre
- PONTOS : 3419
REPUTAÇÃO : 52
Idade : 26
Respeito as regras :
Re: Sangue no inimigo!!
Estou falando de sangue com partículas, para dar uma sensação mais realista de tiro!!diegopds escreveu:vc ta falando de sangue particulas de sangue ou tirar sangue "numeros" do inimigoEdivandro2706 escreveu:Então, ele já dá dano no inimigo, mas eu gostaria que quando desse esse dano, o inimigo perdesse sangue, porem não sei se tem como ou se tem algum vídeo explicando?speedluk escreveu:Acho que é porque esse sistema de tiro é com raycast, no caso vc tem que dar o dano no inimigo ali na linha 122 '-'
aqui no fórum tem um sistema de tiro que atira projeteis também mas acredito que esse do marcos seja melhor mas vai de cada projeto ^^
Edivandro2706- Avançado
- PONTOS : 2088
REPUTAÇÃO : 4
Respeito as regras :
Re: Sangue no inimigo!!
Acredito que vc vai ter que criar as particulas de sangue depois instanciar ela no ponto de colisão '-'
tenho um projeto em algum lugar obscuro das pastas aqui que tem exatamente isso ^^
tenho um projeto em algum lugar obscuro das pastas aqui que tem exatamente isso ^^
speedluk- Avançado
- PONTOS : 2676
REPUTAÇÃO : 29
Idade : 32
Respeito as regras :
Re: Sangue no inimigo!!
Se puder me dar um norte, por que não faço a minima ideia de como faz isso!!speedluk escreveu:Acredito que vc vai ter que criar as particulas de sangue depois instanciar ela no ponto de colisão '-'
tenho um projeto em algum lugar obscuro das pastas aqui que tem exatamente isso ^^
Edivandro2706- Avançado
- PONTOS : 2088
REPUTAÇÃO : 4
Respeito as regras :
Tópicos semelhantes
» Alguem tem os escripts pra sair sangue do inimigo e do player
» Script de health de inimigo sendo acessado mesmo sem acerta o inimigo
» Sangue no chão
» como fazer o Sangue?
» Inimigo 2d
» Script de health de inimigo sendo acessado mesmo sem acerta o inimigo
» Sangue no chão
» como fazer o Sangue?
» Inimigo 2d
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos