Porque o meu BoxCollider2D não desativa?
2 participantes
Página 1 de 1
Porque o meu BoxCollider2D não desativa?
Eu estava tentando fazer com que quando eu apertar com a seta para baixo ou quando eu apertar a tecla 'S' e ao mesmo tempo eu apertar o botão esquerdo do mouse, o BoxCollider2D do meu objeto se desative, mas por algum motivo isso não funciona e ainda mostra o seguinte erro assim q o player entra em contato com o objeto:
NullReferenceException: Object reference not set to an instance of an object
Platform.OnCollisionEnter2D (UnityEngine.Collision2D other)
Oq pode estar acontecendo? Código:
NullReferenceException: Object reference not set to an instance of an object
Platform.OnCollisionEnter2D (UnityEngine.Collision2D other)
Oq pode estar acontecendo? Código:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(BoxCollider2D))]
public class Platform : MonoBehaviour
{
BoxCollider2D bx;
void OnCollisionEnter2D(Collision2D other)
{
if(other.gameObject.tag == "Player" && Input.GetKey(KeyCode.DownArrow) || Input.GetKey(KeyCode.S) && Input.GetKey(KeyCode.Mouse0))
{
bx.enabled = false;
}
else
{
bx.enabled = true;
}
}
}
Hamassfall- Avançado
- PONTOS : 2068
REPUTAÇÃO : 7
Respeito as regras :
Re: Porque o meu BoxCollider2D não desativa?
Você não está referenciando o boxcollider do objeto:
Tenta colocar tudo o conteúdo do if, dentro dessa verificação:
Não tenho certeza, mas também trocaria o CollisionEnter por CollisionStay, porque você será obrigado a pressionar essas teclas logo que o objeto colidir com o player, não enquanto ele estiver colidindo. Posso estar errada, mas não custa nada testar ambos os casos.
- Código:
void Start(){
bx = GetComponent<BoxCollider2D>();
}
Tenta colocar tudo o conteúdo do if, dentro dessa verificação:
- Código:
if(other != null){
// o seu outro if aqui dentro
}
Não tenho certeza, mas também trocaria o CollisionEnter por CollisionStay, porque você será obrigado a pressionar essas teclas logo que o objeto colidir com o player, não enquanto ele estiver colidindo. Posso estar errada, mas não custa nada testar ambos os casos.
Re: Porque o meu BoxCollider2D não desativa?
Agora ele está desativando o Collider, mas não está ativando de novo quando eu saio. Só uma curiosidade, pq checar se o retorno do OnCollision existe ou não faz ele funcionar nesse caso? Ele já não faz isso automaticamente?MayLeone escreveu:Você não está referenciando o boxcollider do objeto:
- Código:
void Start(){
bx = GetComponent<BoxCollider2D>();
}
Tenta colocar tudo o conteúdo do if, dentro dessa verificação:
- Código:
if(other != null){
// o seu outro if aqui dentro
}
Não tenho certeza, mas também trocaria o CollisionEnter por CollisionStay, porque você será obrigado a pressionar essas teclas logo que o objeto colidir com o player, não enquanto ele estiver colidindo. Posso estar errada, mas não custa nada testar ambos os casos.
Código:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(BoxCollider2D))]
public class Platform : MonoBehaviour
{
BoxCollider2D bx;
void Start()
{
bx = GetComponent<BoxCollider2D>();
}
void OnCollisionStay2D(Collision2D other)
{
if (other != null)
{
if (other.gameObject.tag == "Player" && Input.GetKey(KeyCode.DownArrow) || Input.GetKey(KeyCode.S) && Input.GetKey(KeyCode.Mouse0))
{
bx.enabled = false;
}
}
else
{
bx.enabled = true;
}
}
}
Hamassfall- Avançado
- PONTOS : 2068
REPUTAÇÃO : 7
Respeito as regras :
Re: Porque o meu BoxCollider2D não desativa?
Não, na verdade ele está funcionando porque você referenciou o BoxCollider no Start, a verificação de null é para evitar possíveis erros caso ele tente colidir com algo, no mesmo frame que o collider for desativado, mas isso é só uma precaução mesmo, você pode tentar tirar.
Para o BoxCollider voltar, você não deve fazer a verificação dentro do OnCollisionEnter porque como ele vai estar desativado, esse método não será chamado, porque não haverá colisão.
O que você pode fazer é criar um objeto filho desse seu objeto com um collider com trigger, e fazer com que quando o BoxCollider do objeto pai estiver desativado e o player parar de colidir com o objeto filho, o Collider do objeto pai volte a ativar:
Para o BoxCollider voltar, você não deve fazer a verificação dentro do OnCollisionEnter porque como ele vai estar desativado, esse método não será chamado, porque não haverá colisão.
O que você pode fazer é criar um objeto filho desse seu objeto com um collider com trigger, e fazer com que quando o BoxCollider do objeto pai estiver desativado e o player parar de colidir com o objeto filho, o Collider do objeto pai volte a ativar:
- Código:
using UnityEngine;
public class CheckEndCollision : MonoBehaviour {
private Platform platform;
void Start(){
platform = GetComponentInParent<Platform>();
}
void OnTriggerExit2D(Collider other){
if(other.CompareTag("Player") && !platform.bx.enabled)
platform.bx.enabled = true;
}
}
Tópicos semelhantes
» Erro com BoxCollider2D: CS1061
» Como desativo um boxCollider2d usando o GetComponent<variavelGameObject>?
» desativa objecto
» Como desativa um script dentro de outro?
» [TUTORIAL] Otimização de colisores ( desativa conforme a distância )
» Como desativo um boxCollider2d usando o GetComponent<variavelGameObject>?
» desativa objecto
» Como desativa um script dentro de outro?
» [TUTORIAL] Otimização de colisores ( desativa conforme a distância )
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos