Erro em script
4 participantes
Página 1 de 1
Erro em script
Alguém sabe o porque e como posso resolver esse erro ?. Fiquei horas e horas alterando coisas e revisando e nada, todos os objetos foram instanciados dentro do inspector, tentei colocar uma verificação pra saber se o objeto que eu estava tentando pegar não era nulo, mas aparentemente não funcionou (ou implementei errado). Se alguém puder me ajudar ficarei eternamente grato.
Está dando erro na linha 70 do script de attack do player, o erro é o seguinte:
Este é o script do meu playerAttack:
Script Das propriedades dos inimigos:
Script De um inimigo em específico:
Está dando erro na linha 70 do script de attack do player, o erro é o seguinte:
- Código:
NullReferenceException: Object reference not set to an instance of an object
PlayerAttack.Update () (at Assets/Scripts/PlayerAttack.cs:70)
Este é o script do meu playerAttack:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using EZCameraShake;
public class PlayerAttack : MonoBehaviour {
private float timeBtwAttack;
public float startTimeBtwAttack;
public Animator camAnim;
public Transform attackcheck;
public LayerMask whatIsEnemies;
public float attackRangeX;
public float attackRangeY;
public int damage;
//variaveis pros combos através do mouse
public int qtosClicks = 0;
public bool atk1 = false, atk2 = false;
public float atqTimer;
private float originalAtqTimer;
private bool rodarTimer;
private Animator anim;
private Player playerScript;
void Start ()
{
anim = GetComponent<Animator> ();
originalAtqTimer = atqTimer;
rodarTimer = false;
playerScript = GameObject.Find ("Player").GetComponent<Player> ();
}
// Update is called once per frame
void Update ()
{
if (playerScript.isAlive)
{
//Atks();
if (qtosClicks == 3 || atqTimer <= 0)
{
qtosClicks = 0;
atqTimer = originalAtqTimer;
rodarTimer = false;
}
if (rodarTimer == true) {
atqTimer -= Time.deltaTime;
}
//O que faz a checagem e o ataque funcionar
if (timeBtwAttack <= 0)
{
if (Input.GetMouseButtonDown (0) && qtosClicks == 0 && playerScript.Grounded == true)
{
//CameraShaker.Instance.ShakeOnce (4f, 4f, .1f, 1f);
anim.SetTrigger ("Attack_1");
qtosClicks += 1;
atk1 = true;
rodarTimer = true;
Collider2D[] enemiesToDamage = Physics2D.OverlapBoxAll (attackcheck.position, new Vector2 (attackRangeX, attackRangeY), 0, whatIsEnemies);
for (int i = 0; i < enemiesToDamage.Length; i++)
{
enemiesToDamage [i].GetComponent<EnemyProperties> ().TookDamage (damage);
}
timeBtwAttack = startTimeBtwAttack;
}
else if (Input.GetMouseButtonDown (0) && atk1 == true && qtosClicks == 1 && playerScript.Grounded == true)
{
anim.SetTrigger ("Attack_2");
qtosClicks += 1;
atk2 = true;
atqTimer = originalAtqTimer;
}
else if (Input.GetMouseButtonDown (0) && atk1 == true && atk2 == true && qtosClicks == 2 && playerScript.Grounded == true)
{
anim.SetTrigger ("Attack_3");
qtosClicks += 1;
atk1 = false;
atk2 = false;
}
}
else
{
timeBtwAttack -= Time.deltaTime;
}
}
}
void OnDrawGizmosSelected()
{
Gizmos.color = Color.red;
Gizmos.DrawWireCube (attackcheck.position, new Vector3 (attackRangeX, attackRangeY, 1));
}
void AtaqueRange()
{
}
}
Script Das propriedades dos inimigos:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyProperties : MonoBehaviour {
public int health;
public float speed;
public float attackDistance;
public GameObject bloodEffect;
protected Animator anim;
protected bool facingRight = true;
protected Transform target;
protected float targetDistance;
protected Rigidbody2D rb2d;
protected SpriteRenderer sprite;
// Use this for initialization
void Awake () {
anim = GetComponent<Animator>();
target = FindObjectOfType<Player>().transform;
rb2d = GetComponent<Rigidbody2D>();
sprite = GetComponent<SpriteRenderer>();
}
// Update is called once per frame
protected virtual void Update () {
targetDistance = transform.position.x - target.position.x;
}
protected void Flip()
{
facingRight = !facingRight;
Vector3 scale = transform.localScale;
scale.x *= -1;
transform.localScale = scale;
}
public void TookDamage(int damage)
{
health -= damage;
if(health <= 0)
{
Destroy (gameObject);
}
else
{
StartCoroutine(TookDamageCoRoutine());
Instantiate (bloodEffect, transform.position, Quaternion.identity);
}
}
IEnumerator TookDamageCoRoutine()
{
sprite.color = Color.red;
yield return new WaitForSeconds(0.1f);
sprite.color = Color.white;
}
}
Script De um inimigo em específico:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class VoidEnemy : EnemyProperties {
public float walkDistance;
//public int health;
private bool walk;
private bool attack = false;
// Use this for initialization
void Start () {
}
// Update is called once per frame
protected override void Update () {
base.Update();
anim.SetBool("Walk", walk);
anim.SetBool("Attack", attack);
if(Mathf.Abs(targetDistance) < walkDistance)
{
walk = true;
}
if(Mathf.Abs(targetDistance) < attackDistance)
{
attack = true;
walk = false;
}
}
private void FixedUpdate()
{
if(walk && !attack)
{
if(targetDistance < 0)
{
rb2d.velocity = new Vector2(speed, rb2d.velocity.y);
if (facingRight)
{
Flip();
}
}
else
{
rb2d.velocity = new Vector2(-speed, rb2d.velocity.y);
if (!facingRight)
{
Flip();
}
}
}
}
public void ResetAttack()
{
attack = false;
}
}
Última edição por dstaroski em Sex Jul 27, 2018 4:57 pm, editado 1 vez(es) (Motivo da edição : Editado título)
QueriaStarMorto- Avançado
- PONTOS : 2424
REPUTAÇÃO : 19
Respeito as regras :
Re: Erro em script
for (int i = 0; i < enemiesToDamage.Length; i++)
{
enemiesToDamage [i].GetComponent<EnemyProperties> ().TookDamage (damage);
}
Vc tá pegando uma função dentro do enemiesToDamage, mas não está dando o que vc quer. Vc tá pegando mas não tá colocando em lugar nenhum. Em variável nenhuma. Acho q é isso
Tiago95- Avançado
- PONTOS : 2629
REPUTAÇÃO : 32
Respeito as regras :
Re: Erro em script
O seu "enemiesToDamage" é nulo coloque uma verificação ( if(enemiesToDamage != null) ) que resolve o problema.
Re: Erro em script
Boa tarde cara! seu título foi alterado por motivo de "erro" não ser correto para um título de um tópico em um fórum. Procure por em seus títulos uma parte do problema, de forma especifica e objetiva.
Siga os conselhos acima para a possível resolução do seu problema.
Abraço!
Siga os conselhos acima para a possível resolução do seu problema.
Abraço!
Tópicos semelhantes
» erro erro e mais erro script de craft
» Erro no script
» Erro no Script
» Não Acho o Erro no Script - é um script para o player se mover
» Erro no Script- "The script needs to derived from MonoBehavior"
» Erro no script
» Erro no Script
» Não Acho o Erro no Script - é um script para o player se mover
» Erro no Script- "The script needs to derived from MonoBehavior"
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos