[RESOLVIDO] Como verificar se o objeto é diferente de null
2 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] Como verificar se o objeto é diferente de null
- Código:
Collider2D[] enemiesAttack = Physics2D.OverlapBoxAll (attackCheck.position,new Vector2 (attackRangeX,attackRangeY),0,layerEnemy);
for (int i = 0; i < enemiesAttack.Length; i++)
{
enemiesAttack [i].GetComponent<Enemy1> ().TakeDamage (damage);
enemiesAttack [i].GetComponent<Enemy2> ().Knockback ();
enemiesAttack [i].GetComponent<Enemy2> ().TakeDamage (damage);
}
Alguém sabe como posso fazer pra que minha variável "enemiesAttack" verifique se o objeto é diferente de nulo antes de pegar ele ?, por que caso eu não faça essa verificação e bata no inimigo 1 (enemy1) estoura um erro dizendo que ele não conseguiu achar as variáveis do inimigo 2 (enemy2) e vice versa, tentei fazer dessa forma, mas na Unity da erro dizendo que não posso fazer isso (provavelmente algum erro na escrita):
- Código:
Collider2D[] enemiesAttack = Physics2D.OverlapBoxAll (attackCheck.position,new Vector2 (attackRangeX,attackRangeY),0,layerEnemy);
for (int i = 0; i < enemiesAttack.Length; i++)
{
enemiesAttack [i].GetComponent<Enemy1> ().TakeDamage (damage) != null;
enemiesAttack [i].GetComponent<Enemy2> ().Knockback ()!= null;
enemiesAttack [i].GetComponent<Enemy2> ().TakeDamage (damage)!= null;
}
QueriaStarMorto- Avançado
- PONTOS : 2423
REPUTAÇÃO : 19
Respeito as regras :
Re: [RESOLVIDO] Como verificar se o objeto é diferente de null
Poderia postar o código completo?
Eu geralmente uso Raycast para alocar o componente em uma variável e depois pergunto se a variável existe.
Eu geralmente uso Raycast para alocar o componente em uma variável e depois pergunto se a variável existe.
Re: [RESOLVIDO] Como verificar se o objeto é diferente de null
- Código:
private float timeBtwAttack;
public float startTimeBtwAttack;
public float attackRangeX;
public float attackRangeY;
public int damage;
if (timeBtwAttack <= 0)
{
if (Input.GetKeyDown (KeyCode.K))
{
PlayerAttack ();
anim.SetTrigger ("Attack_1");
timeBtwAttack = startTimeBtwAttack;
}
else
{
timeBtwAttack -= Time.deltaTime;
}
void PlayerAttack()
{
Collider2D[] enemiesAttack = Physics2D.OverlapBoxAll (attackCheck.position,new Vector2 (attackRangeX,attackRangeY),0,layerEnemy);
for (int i = 0; i < enemiesAttack.Length; i++)
{
enemiesAttack [i].GetComponent<Enemy02> ().TakeDamage (damage);
enemiesAttack [i].GetComponent<Enemy01> ().Knockback ();
enemiesAttack [i].GetComponent<Enemy01> ().TakeDamage (damage);
Debug.Log (enemiesAttack [i].name);
}
}
QueriaStarMorto- Avançado
- PONTOS : 2423
REPUTAÇÃO : 19
Respeito as regras :
Re: [RESOLVIDO] Como verificar se o objeto é diferente de null
O script completo por favor, esse ai nem tem void Update
Re: [RESOLVIDO] Como verificar se o objeto é diferente de null
Ok, não tinha mandado tudo por conta de ter muita coisa obsoleta que não tem muito haver com essa parte do script que estou tendo problema, além de estar bem desorganizado kk. Aqui está:
Player Script:
Void Chamada no Script do Inimigo 2:
Void Chamada no Script do Inimigo 1:
Player Script:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using EZCameraShake;
using UnityEngine.SceneManagement;
public class Player : MonoBehaviour {
public float speed;
public float forceJump;
private float inputHorizontal;
public int Health;
//Componentes Do Player
private Rigidbody2D rb2d;
private Animator anim;
private Transform playerTransform;
private SpriteRenderer sprite;
public float raio;
public LayerMask layerGround;
public bool Grounded;
public Transform checkGround;
private bool isJumping;
public bool invunerable = false;
public bool isAlive = true;
private bool face;
//Variaveis do Ataque
public Transform attackCheck;
//public float radiusAttack;
public LayerMask layerEnemy;
private float timeNextAttack;
private float timeBtwAttack;
public float startTimeBtwAttack;
public float attackRangeX;
public float attackRangeY;
public int damage;
public Animator animScreen;
public bool liberaFlip = true;
private AudioSource audioTeste;
void Start ()
{
rb2d = GetComponent<Rigidbody2D> ();
anim = GetComponent<Animator> ();
playerTransform = GetComponent<Transform> ();
sprite = GetComponent<SpriteRenderer> ();
audioTeste = GetComponent<AudioSource> ();
}
// Update is called once per frame
void Update ()
{
if(Input.GetKeyDown(KeyCode.R))
{
SceneManager.LoadScene (SceneManager.GetActiveScene ().name);
}
if (Input.GetButtonDown ("Jump") && Grounded == true)
{
if (isAlive)
{
isJumping = true;
}
}
if(isAlive)
{
if (timeBtwAttack <= 0)
{
if (Input.GetKeyDown (KeyCode.K))
{
PlayerAttack ();
anim.SetTrigger ("Attack_1");
timeBtwAttack = startTimeBtwAttack;
}
else
{
timeBtwAttack -= Time.deltaTime;
}
}
}
void FixedUpdate()
{
Grounded = Physics2D.OverlapCircle (checkGround.position, raio, layerGround);
if (isAlive)
{
if (isAlive)
{
inputHorizontal = (Input.GetAxis ("Horizontal"));
anim.SetFloat ("Speed", Mathf.Abs (inputHorizontal));
rb2d.velocity = new Vector2 (speed * inputHorizontal, rb2d.velocity.y);
}
//Animações pulo
anim.SetFloat ("Y", rb2d.velocity.y);
anim.SetBool ("Chao", Grounded);
if ((inputHorizontal < 0 & !face) || (inputHorizontal > 0 & face))
{
Flip ();
}
if (isJumping)
{
rb2d.AddForce (new Vector2 (0f, forceJump));
isJumping = false;
anim.SetTrigger ("Jump");
}
}
else
{
rb2d.velocity = new Vector2 (0, rb2d.velocity.y);
}
}
void Flip()
{
if(liberaFlip)
{
face = !face;
Vector3 scala = playerTransform.localScale;
scala.x *= -1;
playerTransform.localScale = scala;
}
if (liberaFlip == false)
{
}
}
// void PlayerAttack()
// {
// Collider2D[] enemiesAttack = Physics2D.OverlapBoxAll (attackCheck.position,new Vector2 (attackRangeX,attackRangeY),0,layerEnemy);
// for (int i = 0; i < enemiesAttack.Length; i++)
// {
// enemiesAttack [i].GetComponent<Enemy02> ().TakeDamage (damage);
// //enemiesAttack [i].GetComponent<Enemy01> ().Knockback ();
// //enemiesAttack [i].GetComponent<Enemy01> ().TakeDamage (damage);
//
// Debug.Log (enemiesAttack [i].name);
// }
// }
void OnDrawGizmos()
{
Gizmos.color = Color.red;
Gizmos.DrawWireCube (attackCheck.position, new Vector3(attackRangeX,attackRangeY,1));
}
void Damage()
{
anim.SetTrigger ("Hit");
invunerable = false;
}
public void DamagePlayer()
{
if (isAlive)
{
invunerable = true;
Health--;
Damage();
if (Health < 1)
{
isAlive = false;
anim.SetTrigger ("Death");
Invoke ("ReloadLevel", 3f);
}
}
}
void ReloadLevel()
{
SceneManager.LoadScene (SceneManager.GetActiveScene ().name);
}
}
Void Chamada no Script do Inimigo 2:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Enemy02 : MonoBehaviour {
public int health;
public int damageDoPlayer;
private Animator wreckingAnim;
private SpriteRenderer sprite;
public Slider healthBar;
private Player scriptPlayer;
//ParticlesEffects
public GameObject PartCollsionGround;
public GameObject particleHit;
public GameObject particleDeath;
//Sound effects
public AudioClip PlayerHit;
public AudioClip impactGround;
public AudioClip explosionFX;
void Start ()
{
sprite = GetComponent<SpriteRenderer> ();
wreckingAnim = GetComponent<Animator> ();
scriptPlayer = GameObject.FindGameObjectWithTag ("Player").GetComponent<Player> ();
}
// Update is called once per frame
void Update ()
{
Debug.Log (health);
healthBar.value = health;
}
public void TakeDamage(int damage)
{
health -= damage;
Instantiate (particleHit, transform.position, Quaternion.identity);
StartCoroutine (DamageEffect ());
SoundManager.instance.PlayFxEnemy(PlayerHit);
if(health <= 0)
{
wreckingAnim.SetTrigger ("Death");
Invoke ("ParticlesDeath", 3f);
Destroy(gameObject,4f);
}
}
IEnumerator DamageEffect()
{
sprite.color = Color.red;
yield return new WaitForSeconds (0.1f);
sprite.color = Color.white;
}
void ParticlesDeath()
{
SoundManager.instance.PlayFxEnemy (explosionFX);
sprite.enabled = false;
Instantiate(particleDeath,transform.position,Quaternion.identity);
}
void OnTriggerEnter2D(Collider2D col)
{
//Função responsável por causar dano ao player
if (col.CompareTag ("Player"))
{
if (!scriptPlayer.invunerable && scriptPlayer.Health > 0)
{
scriptPlayer.DamagePlayer ();
scriptPlayer.animScreen.SetTrigger ("ScreenHit");
}
}
}
}
Void Chamada no Script do Inimigo 1:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Enemy01 : MonoBehaviour {
public int health;
public float speed;
public int damageDoPlayer; //Dano que o player causa no inimigo
private Rigidbody2D rb;
private bool facingRight;
private Transform enemyTransform;
//Variaveis do Chão
public LayerMask groundLayer;
public float raio;
public Transform checkgroundd;
private bool isGrounded;
//public float walkDistance;
//private bool walk;
//private bool attack = false;
//private Transform target;
//private float targetDistance;
//public float attackDistance;
//public float patrolDistance;
//private Animator anim;
//private bool podeAndar;
//private float timeBtwEnemyAttack;
//public float startTimeBtwEAttack;
private Player playerScript;
private SpriteRenderer spriteEnemy;
public Vector2 directionEnemy;
//private int damageShot = 1;
void Start () {
rb = GetComponent<Rigidbody2D> ();
enemyTransform = GetComponent<Transform> ();
target = FindObjectOfType<Player>().transform;
anim = GetComponent<Animator> ();
playerScript = GameObject.FindGameObjectWithTag("Player").GetComponent<Player>();
spriteEnemy = GetComponent<SpriteRenderer> ();
directionEnemy = Vector2.right;
//timeBtwEnemyAttack = startTimeBtwEAttack;
}
// Update is called once per frame
void Update ()
{
Debug.Log (health);
isGrounded = Physics2D.OverlapCircle (checkgroundd.position, raio, groundLayer);
if (transform.localScale.x > 0)
{
directionEnemy = Vector2.zero;
directionEnemy += Vector2.right;
}
else
{
directionEnemy = Vector2.zero;
directionEnemy += Vector2.left;
}
if(playerScript.transform.position.x >= transform.position.x)
{
if (!facingRight)
{
Flip ();
}
}
if(playerScript.transform.position.x <= transform.position.x)
{
if (facingRight)
{
Flip ();
}
}
}
public void TakeDamage(int damage)
{
health -= damage;
StartCoroutine (DamageEffect ());
if(health <= 0)
{
Destroy(gameObject);
}
}
// public void StartDamageEffect()
// {
// StartCoroutine (DamageEffect ());
// }
//Corrotina do efeito de dano
IEnumerator DamageEffect()
{
spriteEnemy.color = Color.red;
yield return new WaitForSeconds (0.1f);
spriteEnemy.color = Color.white;
}
void OnTriggerEnter2D(Collider2D col)
{
// if (col.CompareTag ("PlayerAttack"))
// {
// Knockback ();
// TakeDamage (damageDoPlayer);
// }
//Função responsável por causar dano ao player
if (col.CompareTag ("Player"))
{
if (!playerScript.invunerable && playerScript.Health > 0)
{
playerScript.DamagePlayer ();
playerScript.animScreen.SetTrigger ("ScreenHit");
}
}
switch (col.tag)
{
case "BigStump":
rb.AddForce (Vector2.up * 600f);
break;
case"SmallStump":
rb.AddForce (Vector2.up * 450f);
break;
}
}
protected void Flip()
{
facingRight = !facingRight;
Vector3 scale = transform.localScale;
scale.x *= -1;
transform.localScale = scale;
}
public void Knockback()
{
if (transform.localScale.x > 0)
{
iTween.MoveBy (gameObject, new Vector3 (1.5f * directionEnemy.x, 0.1f, 0), 0.3f);
}
else
{
iTween.MoveBy (gameObject, new Vector3 (1.5f * directionEnemy.x, 0.1f, 0), 0.3f);
}
}
void OnCollisionEnter2D(Collision2D other)
{
if (other.gameObject.CompareTag ("Player"))
{
rb.velocity = Vector2.zero;
rb.isKinematic = true;
}
}
void OnCollisionExit2D(Collision2D other)
{
if (other.gameObject.CompareTag ("Player"))
{
rb.isKinematic = false;
}
}
}
QueriaStarMorto- Avançado
- PONTOS : 2423
REPUTAÇÃO : 19
Respeito as regras :
Re: [RESOLVIDO] Como verificar se o objeto é diferente de null
- Código:
void PlayerAttack(){
Collider2D[] enemiesAttack = Physics2D.OverlapBoxAll (attackCheck.position,new Vector2 (attackRangeX,attackRangeY),0,layerEnemy);
for (int i = 0; i < enemiesAttack.Length; i++) {
Enemy01 tempEnemy1 = enemiesAttack [i].GetComponent<Enemy01> ();
if (tempEnemy1) {
tempEnemy1.Knockback ();
tempEnemy1.TakeDamage (damage);
}
Enemy02 tempEnemy2 = enemiesAttack [i].GetComponent<Enemy02> ();
if (tempEnemy2) {
tempEnemy2.TakeDamage (damage);
}
Debug.Log (enemiesAttack [i].name);
}
}
Em tese isso resolve qualquer problema, mas os códigos em si apresentam vários outros tipos de erro, de sintaxe, falta de bibliotecas, etc.
QueriaStarMorto- Avançado
- PONTOS : 2423
REPUTAÇÃO : 19
Respeito as regras :
Tópicos semelhantes
» [RESOLVIDO] Como verificar qual objeto de uma array está mais perto.
» [RESOLVIDO] Verificar se objeto ja existe em um Lista
» [RESOLVIDO] Como fazer um objeto 2D rotacionar em direção a outro objeto
» [RESOLVIDO] como fazer um objeto trocar de cor ao colidir com outro objeto
» [RESOLVIDO] Como verificar a tag de um filho de um GameObject
» [RESOLVIDO] Verificar se objeto ja existe em um Lista
» [RESOLVIDO] Como fazer um objeto 2D rotacionar em direção a outro objeto
» [RESOLVIDO] como fazer um objeto trocar de cor ao colidir com outro objeto
» [RESOLVIDO] Como verificar a tag de um filho de um GameObject
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos