Barra de Vida para Personagens de Luta
2 participantes
Página 1 de 1
Barra de Vida para Personagens de Luta
Olá Galera do fórum gostaria de uma ajuda no Script que estou adaptando para um jogo de Luta em 3D, na qual o Script da barra de vida possui os colisores de danos para os personagens "Player2" , porem estou apanhando em uns blocos, o mais engraçado que esse mesmo Script esta funcionando na Unity4 , mas, na Unity5 da erro.
A idéia é a seguinte: quando o Player1 acertar um "golpe" no Player2 , além dele perder % de vida da barra aciona a animação de "recebegolpe".
Alguém pode me ajudar?
Segue os Scripts q estou usando e os erros que estão ocorrendo.
Barra de Vida Player2 "Oponente"
//Scripts de Movimentação e ataques "Player1"
Quando do Play no jogo, ele cai mo Pause e aparece esse erro, além de não funcionar a colisão.
//Erros que estão ocorrendo.
" />
NullReferenceException: Object reference not set to an instance of an object
BarraVida.OnCollisionEnter (UnityEngine.Collision collision) (at Assets/ScriptsBarraVida/BarraVida.cs:31)
Please, Heeelp meee!!!
A idéia é a seguinte: quando o Player1 acertar um "golpe" no Player2 , além dele perder % de vida da barra aciona a animação de "recebegolpe".
Alguém pode me ajudar?
Segue os Scripts q estou usando e os erros que estão ocorrendo.
Barra de Vida Player2 "Oponente"
- Código:
using UnityEngine;
using System.Collections;
public class BarraVida : MonoBehaviour {
public float VidaDoPersonagem;
public float gravidade= -50;
public Texture Sangue,Contorno;
public int VidaCheia = 100;
public GameObject CorpoInimigo;
public static WarriorAnimationDemo AuxMovAtaque;
private Animator Animator_Box;
void Start (){
VidaDoPersonagem = VidaCheia;
Animator_Box = GetComponent<Animator>();
}
void Update (){
Physics.gravity = new Vector3(0, gravidade, 0);
if (VidaDoPersonagem >= VidaCheia) {
VidaDoPersonagem = VidaCheia;
}
else if (VidaDoPersonagem <= 0) {
VidaDoPersonagem = 0;
}
}
//acessa o outro script com os ataques
void OnCollisionEnter(Collision collision) {
AuxMovAtaque = collision.transform.GetComponent<WarriorAnimationDemo>();
if (AuxMovAtaque.animator.GetBool("Attack1Trigger")){
Animator_Box.SetTrigger("Triggerrecebegolpe"); //para acessar o Animator do Player2
VidaDoPersonagem = VidaDoPersonagem - 10.5f;
}
AuxMovAtaque = collision.transform.GetComponent<WarriorAnimationDemo>();
if (AuxMovAtaque.animator.GetBool("Attack3Trigger")){
VidaDoPersonagem = VidaDoPersonagem - 0.8f;
}
if(VidaDoPersonagem <=0){
Instantiate(CorpoInimigo,transform.position,transform.rotation);
Destroy(gameObject);
}
}
void OnGUI () {
GUI.DrawTexture (new Rect (Screen.width / 25, Screen.height / 15, Screen.width / 5.5f/VidaCheia*VidaDoPersonagem, Screen.height / 25), Sangue);
GUI.DrawTexture (new Rect (Screen.width / 40, Screen.height / 40, Screen.width / 5, Screen.height / 7), Contorno);
}
}
//Scripts de Movimentação e ataques "Player1"
- Código:
using UnityEngine;
using System.Collections;
public class WarriorAnimationDemo : MonoBehaviour {
public Animator animator;
float rotationSpeed = 40;
Vector3 inputVec;
bool isMoving;
bool isStunned;
//Warrior types
public enum Warrior{Karate, Ninja, Brute, Sorceress};
public Warrior warrior;
public VirtualJoystick joystick;
void Update()
{
//Get input from controls
float z = joystick.Horizontal();
float x = - joystick.Vertical();
inputVec = new Vector3(x, 0, z);
//float z = Input.GetAxisRaw("Horizontal");
//float x = -(Input.GetAxisRaw("Vertical"));
//inputVec = new Vector3(x, 0, z);
//Apply inputs to animator
animator.SetFloat("Input X", z);
animator.SetFloat("Input Z", -(x));
if (x != 0 || z != 0 ) //if there is some input
{
//set that character is moving
animator.SetBool("Moving", true);
isMoving = true;
animator.SetBool("Running", true);
}
else
{
//character is not moving
animator.SetBool("Moving", false);
animator.SetBool("Running", false);
isMoving = false;
}
if (Input.GetButtonDown("Fire1"))
{
animator.SetTrigger("Attack1Trigger");
if (warrior == Warrior.Brute)
StartCoroutine (COStunPause(1.2f));
else if (warrior == Warrior.Sorceress)
StartCoroutine (COStunPause(1.2f));
else
StartCoroutine (COStunPause(.6f));
}
if (Input.GetButtonDown("Fire2"))
{
animator.SetTrigger("Attack2Trigger");
if (warrior == Warrior.Brute)
StartCoroutine (COStunPause(1.2f));
else if (warrior == Warrior.Sorceress)
StartCoroutine (COStunPause(1.2f));
else
StartCoroutine (COStunPause(.6f));
}
if (Input.GetButtonDown("Fire3"))
{
animator.SetTrigger("Attack3Trigger");
if (warrior == Warrior.Brute)
StartCoroutine (COStunPause(1.2f));
else if (warrior == Warrior.Sorceress)
StartCoroutine (COStunPause(1.2f));
else
StartCoroutine (COStunPause(.6f));
}
UpdateMovement(); //update character position and facing
}
public IEnumerator COStunPause(float pauseTime)
{
isStunned = true;
yield return new WaitForSeconds(pauseTime);
isStunned = false;
}
void RotateTowardsMovementDir() //face character along input direction
{
if (inputVec != Vector3.zero)
{
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(inputVec), Time.deltaTime * rotationSpeed);
}
}
float UpdateMovement()
{
Vector3 motion = inputVec; //get movement input from controls
//reduce input for diagonal movement
motion *= (Mathf.Abs(inputVec.x) == 1 && Mathf.Abs(inputVec.z) == 1)?.7f:1;
RotateTowardsMovementDir(); //if not strafing, face character along input direction
return inputVec.magnitude; //return a movement value for the animator, not currently used
}
void OnGUI ()
{
if (GUI.Button (new Rect (1200, 210*2, 100*2, 30*2), "Soco"))
{
animator.SetTrigger("Attack1Trigger");
if (warrior == Warrior.Brute || warrior == Warrior.Sorceress) //if character is Brute or Sorceress
StartCoroutine (COStunPause(1.2f));
else
StartCoroutine (COStunPause(.6f));
}
if (GUI.Button (new Rect (1200, 240*2, 100*2, 30*2), "Defesa"))
{
animator.SetTrigger("Attack2Trigger");
if (warrior == Warrior.Brute || warrior == Warrior.Sorceress) //if character is Brute or Sorceress
StartCoroutine (COStunPause(1.2f));
else
StartCoroutine (COStunPause(.6f));
}
if (GUI.Button (new Rect (1200, 270*2, 100*2, 30*2), "Chute"))
{
animator.SetTrigger("Attack3Trigger");
if (warrior == Warrior.Brute || warrior == Warrior.Sorceress) //if character is Brute or Sorceress
StartCoroutine (COStunPause(1.2f));
else
StartCoroutine (COStunPause(.6f));
}
}
}
Quando do Play no jogo, ele cai mo Pause e aparece esse erro, além de não funcionar a colisão.
//Erros que estão ocorrendo.
" />
NullReferenceException: Object reference not set to an instance of an object
BarraVida.OnCollisionEnter (UnityEngine.Collision collision) (at Assets/ScriptsBarraVida/BarraVida.cs:31)
Please, Heeelp meee!!!
Re: Barra de Vida para Personagens de Luta
Está dando erro nesta linha:
Pode ser por diversos motivos como você não ter linkado o animator na variável, não ter criado a condição booleana "Attack1Trigger", etc, etc
- Código:
if (AuxMovAtaque.animator.GetBool("Attack1Trigger")){
Pode ser por diversos motivos como você não ter linkado o animator na variável, não ter criado a condição booleana "Attack1Trigger", etc, etc
Tópicos semelhantes
» [Duvida]Como fazer uma barra de vida usando o canvas?obs:so a parte de diminuir a barra
» como criar uma barra de vida?
» fazer o player perde vida e sua barra de vida descer conforme o dano
» Erro ao ligar script barra de vida / continua ao personagem
» Como Faz pra barra de vida aparecer de uma cena pra outra?
» como criar uma barra de vida?
» fazer o player perde vida e sua barra de vida descer conforme o dano
» Erro ao ligar script barra de vida / continua ao personagem
» Como Faz pra barra de vida aparecer de uma cena pra outra?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos