dano inimigo em player
4 participantes
Página 1 de 1
dano inimigo em player
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Inimigo : MonoBehaviour {
public float vida = 100;
bool chamouMorte = false;
//
public GameObject Jogador;
[Range(1,50)]
public int LimiteDano;
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Player")
{
gameObject.GetComponent<Controle>().VidaAtual = - LimiteDano;
}
}
void Update () {
if (vida <= 0) {
vida = 0;
if (chamouMorte == false) {
chamouMorte = true;
StartCoroutine ("Morrer");
}
}
}
IEnumerator Morrer(){
GetComponent<MeshRenderer> ().material.color = Color.red;
yield return new WaitForSeconds (2);
Destroy (gameObject);
}
}
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityStandardAssets.Characters.FirstPerson;
public class Controle : MonoBehaviour {
private CharacterController controlador;
private GameObject Jogador;
private float UltimaPosicaoEmY,DistanciaDeQueda;
[Range(1,15)]
public float AlturaQueda = 4,DanoPorMetro = 5 ;
public Image BarraVida, BarraEstamina, BarraFome, BarraSede;
[Range(20,500)]
public float VidaCheia = 100, EstaminaCheia = 100, FomeCheia = 100, SedeCheia = 100,velocidadeEstamina = 250;
[HideInInspector]
public float VidaAtual, EstaminaAtual, FomeAtual, SedeAtual;
private bool semEstamina = false;
private float cronometroFome,cronometroSede,velocidadeCaminhando,velocidadeCorrendo;
public GameObject DIEMenu;
void Start (){
controlador = GetComponent <CharacterController> ();
VidaAtual = VidaCheia;
EstaminaAtual = EstaminaCheia;
FomeAtual = FomeCheia;
SedeAtual = SedeCheia;
Jogador = GameObject.FindWithTag ("Player");
velocidadeCaminhando = Jogador.GetComponent<FirstPersonController> ().m_WalkSpeed;
velocidadeCorrendo = Jogador.GetComponent<FirstPersonController> ().m_RunSpeed;
}
void Update (){
SistemaDeQueda ();
SistemaDeVida ();
SistemaDeEstamina ();
SistemaDeFome ();
SistemaDeSede ();
AplicarBarras ();
}
void SistemaDeQueda(){
if (UltimaPosicaoEmY > Jogador.transform.position.y && controlador.velocity.y < 0) {
DistanciaDeQueda += UltimaPosicaoEmY-Jogador.transform.position.y;
}
UltimaPosicaoEmY = Jogador.transform.position.y;
if (DistanciaDeQueda >= AlturaQueda && controlador.isGrounded) {
VidaAtual = VidaAtual - DanoPorMetro*DistanciaDeQueda;
DistanciaDeQueda = 0;
UltimaPosicaoEmY = 0;
}
if (DistanciaDeQueda < AlturaQueda && controlador.isGrounded) {
DistanciaDeQueda = 0;
UltimaPosicaoEmY = 0;
}
}
void SistemaDeFome(){
FomeAtual -= Time.deltaTime;
if (FomeAtual >= FomeCheia) {
FomeAtual = FomeCheia;
}
if (FomeAtual <= 0) {
FomeAtual = 0;
cronometroFome += Time.deltaTime;
if (cronometroFome >= 3) {
VidaAtual -= (VidaCheia * 0.005f);
EstaminaAtual -= (EstaminaCheia * 0.1f);
cronometroFome = 0;
}
} else {
cronometroFome = 0;
}
}
void SistemaDeSede(){
SedeAtual -= Time.deltaTime;
if (SedeAtual >= SedeCheia) {
SedeAtual = SedeCheia;
}
if (SedeAtual <= 0) {
SedeAtual = 0;
cronometroSede += Time.deltaTime;
if (cronometroSede >= 3) {
EstaminaAtual -= (EstaminaCheia * 0.1f);
cronometroSede = 0;
}
} else {
cronometroSede = 0;
}
}
void SistemaDeEstamina(){
float multEuler = ((1/EstaminaCheia) * EstaminaAtual)*((1/FomeCheia) * FomeAtual);
if (EstaminaAtual >= EstaminaCheia) {
EstaminaAtual = EstaminaCheia;
} else {
EstaminaAtual += Time.deltaTime*(velocidadeEstamina/40)*Mathf.Pow(2.718f,multEuler);
}
if (EstaminaAtual <= 0) {
EstaminaAtual = 0;
Jogador.GetComponent<FirstPersonController> ().m_RunSpeed = velocidadeCaminhando;
semEstamina = true;
}
if (semEstamina == true && EstaminaAtual >= (EstaminaCheia * 0.15f)) {
Jogador.GetComponent<FirstPersonController> ().m_RunSpeed = velocidadeCorrendo;
semEstamina = false;
}
if (Input.GetKey (KeyCode.LeftShift) && semEstamina == false) {
EstaminaAtual -= Time.deltaTime*(velocidadeEstamina/15)*Mathf.Pow(2.718f,multEuler);
}
}
void SistemaDeVida(){
if (VidaAtual >= VidaCheia) {
VidaAtual = VidaCheia;
} else if (VidaAtual <= 0) {
VidaAtual = 0;
Morreu ();
}
}
void AplicarBarras(){
BarraVida.fillAmount = ((1/VidaCheia) * VidaAtual);
BarraEstamina.fillAmount = ((1/EstaminaCheia) * EstaminaAtual);
BarraFome.fillAmount = ((1/FomeCheia) * FomeAtual);
BarraSede.fillAmount = ((1/SedeCheia) * SedeAtual);
}
void Morreu (){
DIEMenu.active = true;
}
public void Sair(){
Application.Quit ();
}
}
estou tentando fazer o inimigo dar dano no player
o script n aponta erros porem nao diminui minha vida, alguem pode me ajudar!
Pkneves- MembroAvançado
- PONTOS : 1384
REPUTAÇÃO : 11
Respeito as regras :
Re: dano inimigo em player
coloque o other.gameObject, se não ele não vai acessar o script que está no player
Re: dano inimigo em player
stratengine escreveu:coloque o other.gameObject, se não ele não vai acessar o script que está no player
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Inimigo : MonoBehaviour {
public float vida = 100;
bool chamouMorte = false;
//
public GameObject Jogador;
[Range(1,50)]
public int LimiteDano;
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Player")
{
other.gameObject.GetComponent<Controle>().VidaCheia = - LimiteDano;
}
}
void Update () {
if (vida <= 0) {
vida = 0;
if (chamouMorte == false) {
chamouMorte = true;
StartCoroutine ("Morrer");
}
}
}
IEnumerator Morrer(){
GetComponent<MeshRenderer> ().material.color = Color.red;
yield return new WaitForSeconds (2);
Destroy (gameObject);
}
}
eu coloquei porem ainda n ta reduzindo a vida do player
Pkneves- MembroAvançado
- PONTOS : 1384
REPUTAÇÃO : 11
Respeito as regras :
Re: dano inimigo em player
Troque
Por:
- Código:
other.gameObject.GetComponent<Controle>().VidaCheia = - LimiteDano;
Por:
- Código:
other.gameObject.GetComponent<Controle>().VidaCheia -= LimiteDano;
Re: dano inimigo em player
olá acabei de tentar porem ainda nao esta recebendo o danoMayLeone escreveu:Troque
- Código:
other.gameObject.GetComponent<Controle>().VidaCheia = - LimiteDano;
Por:
- Código:
other.gameObject.GetComponent<Controle>().VidaCheia -= LimiteDano;
Pkneves- MembroAvançado
- PONTOS : 1384
REPUTAÇÃO : 11
Respeito as regras :
Re: dano inimigo em player
primeiramente sugiro que faça dois debugs embaixo dessa linha
coloque :
Debug.Log("VidaPlayer :" + other.gameObject.GetComponent<Controle>().VidaCheia);
Debug.Log("MeuLimiteDano :" +LimiteDano);
assim verifique em tempo de execução problemas que possam ocorrer:
primeiro> nada acontece, logo entrega que tem algum erro que faz nem acionar o trigger
segundo> debugou os 2 valores mas o que altera não é o que você quer, mostrando erro de cálculo
terceiro> debugou os dois valores corretamente, mostrando que ele não está conseguindo alterar no script original do player
após isso me diga o que ocorreu, grato desde já
coloque :
Debug.Log("VidaPlayer :" + other.gameObject.GetComponent<Controle>().VidaCheia);
Debug.Log("MeuLimiteDano :" +LimiteDano);
assim verifique em tempo de execução problemas que possam ocorrer:
primeiro> nada acontece, logo entrega que tem algum erro que faz nem acionar o trigger
segundo> debugou os 2 valores mas o que altera não é o que você quer, mostrando erro de cálculo
terceiro> debugou os dois valores corretamente, mostrando que ele não está conseguindo alterar no script original do player
após isso me diga o que ocorreu, grato desde já
Re: dano inimigo em player
voce esta usando OnTriggerEnter? como detecçao de colisao, se for o caso uma das 3 opçoes pode tá em falta
1- verificar a tag do player esta como "Player"
2 - ativar/marcar o isTrigger no collisor do player no caso do (OnTriggerEnter)
3- um dos objetos deve ter rigidbody pra collisao ou trigger funcionar,
segundo um teste que fiz contando as correçoes dos amigos funfa d boa,
1- verificar a tag do player esta como "Player"
2 - ativar/marcar o isTrigger no collisor do player no caso do (OnTriggerEnter)
3- um dos objetos deve ter rigidbody pra collisao ou trigger funcionar,
segundo um teste que fiz contando as correçoes dos amigos funfa d boa,
Re: dano inimigo em player
exatamente amigo, isso tudo ai entra como erro no funcionamento do trigger dele, por isso os 3 debugs, para identificar onde foi que está o erro.
Re: dano inimigo em player
bom mudei o colissor istigger d player desmarcado, e do inimigo marcado, só q não está retirando valor certo de dano. no meu limitedano eu deixo 30, no primeiro atack ele calcula certo e retira 30 da vida, já no segundo atack retira 40 ou 20 de dano, além disso não esta dando tempo de um atack de um para o outro atack.stratengine escreveu:exatamente amigo, isso tudo ai entra como erro no funcionamento do trigger dele, por isso os 3 debugs, para identificar onde foi que está o erro.
bom script esta assim até agr
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Inimigo : MonoBehaviour {
public float vida = 100;
bool chamouMorte = false;
//
public GameObject Jogador;
[Range(1,50)]
public int LimiteDano;
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Player")
{
other.gameObject.GetComponent<Controle>().VidaAtual -= LimiteDano;
Debug.Log("VidaPlayer :" + other.gameObject.GetComponent<Controle>().VidaAtual);
Debug.Log("MeuLimiteDano :" +LimiteDano);
}
}
void Update () {
if (vida <= 0) {
vida = 0;
if (chamouMorte == false) {
chamouMorte = true;
StartCoroutine ("Morrer");
}
}
}
IEnumerator Morrer(){
GetComponent<MeshRenderer> ().material.color = Color.red;
yield return new WaitForSeconds (2);
Destroy (gameObject);
}
}
Pkneves- MembroAvançado
- PONTOS : 1384
REPUTAÇÃO : 11
Respeito as regras :
Re: dano inimigo em player
o script ficou assim
esta com esse erro;
NullReferenceException: Object reference not set to an instance of an object
Inimigo.OnTriggerEnter (UnityEngine.Collider other) (at Assets/Scripts/eay arm/Inimigo.cs:28)
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Inimigo : MonoBehaviour {
public float vida = 100;
bool chamouMorte = false;
private bool podeAtacar;
//
public GameObject Jogador;
[Range(1,50)]
public int LimiteDano = 40;
void Start () {
podeAtacar = true;
Jogador = GameObject.FindWithTag ("Player");
}
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Player")
{
if (podeAtacar == true)
{
StartCoroutine ("TempoDeAtaque");
other.gameObject.GetComponent<Controle> ().VidaAtual -= LimiteDano;
Debug.Log ("VidaPlayer :" + other.gameObject.GetComponent<Controle> ().VidaAtual);
Debug.Log ("MeuLimiteDano :" + LimiteDano);
Debug.Log ("tempo :" + StartCoroutine ("TempoDeAtaque"));
}
}
}
void Update () {
if (vida <= 0) {
vida = 0;
if (chamouMorte == false) {
chamouMorte = true;
StartCoroutine ("Morrer");
}
}
}
IEnumerator TempoDeAtaque(){
podeAtacar = false;
yield return new WaitForSeconds (1);
podeAtacar = true;
}
IEnumerator Morrer(){
GetComponent<MeshRenderer> ().material.color = Color.red;
yield return new WaitForSeconds (2);
Destroy (gameObject);
}
}
esta com esse erro;
NullReferenceException: Object reference not set to an instance of an object
Inimigo.OnTriggerEnter (UnityEngine.Collider other) (at Assets/Scripts/eay arm/Inimigo.cs:28)
Pkneves- MembroAvançado
- PONTOS : 1384
REPUTAÇÃO : 11
Respeito as regras :
Re: dano inimigo em player
muito obrigado a tds q ajudaram, os erros sumiram, porem se alguém tiver uma dica para melhorar o sistema pode mandar o código assim
bom ela está retirando a vida do player com os valores certos e dando um tempo entre os atacks do inimigo
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Inimigo : MonoBehaviour {
public float vida = 100;
bool chamouMorte = false;
private bool podeAtacar;
//
public GameObject Jogador;
[Range(1,50)]
public int LimiteDano = 40;
void Start () {
podeAtacar = true;
}
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Player")
{
if (podeAtacar == true)
{
StartCoroutine ("TempoDeAtaque");
other.gameObject.GetComponent<Controle> ().VidaAtual -= LimiteDano;
Debug.Log ("VidaPlayer :" + other.gameObject.GetComponent<Controle> ().VidaAtual);
Debug.Log ("MeuLimiteDano :" + LimiteDano);
}
}
}
void Update () {
if (vida <= 0) {
vida = 0;
if (chamouMorte == false) {
chamouMorte = true;
StartCoroutine ("Morrer");
}
}
}
IEnumerator TempoDeAtaque(){
podeAtacar = false;
yield return new WaitForSeconds (1);
podeAtacar = true;
}
IEnumerator Morrer(){
GetComponent<MeshRenderer> ().material.color = Color.red;
yield return new WaitForSeconds (2);
Destroy (gameObject);
}
}
bom ela está retirando a vida do player com os valores certos e dando um tempo entre os atacks do inimigo
Pkneves- MembroAvançado
- PONTOS : 1384
REPUTAÇÃO : 11
Respeito as regras :
Tópicos semelhantes
» Como colocar dano no inimigo? e vida no player?
» Inimigo ao encostar morre e player leva dano UNITY 5 2D
» Dano no inimigo
» Problema com Dano ao Inimigo
» Ajuda com scripts de inimigo e player'' interação de zumbi e player''
» Inimigo ao encostar morre e player leva dano UNITY 5 2D
» Dano no inimigo
» Problema com Dano ao Inimigo
» Ajuda com scripts de inimigo e player'' interação de zumbi e player''
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos