[RESOLVIDO] Colisão
2 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] Colisão
Boa tarde!
Sou novo na área de criação de jogos e estou passando um pouco de dor de cabeça com um detalhe que para muitos pode ser muito simples.
Preciso fazer com que o meu personagem colete um item (pedra) apenas caminhando sobre ele mas tudo que tentei até agora falhou.
Personagem possui Rigidbody2D e BoxCollider2D
Pedra possui Rigidbody 2D e BoxCollider2D
Segue script do personagem:
.
Segue script da pedra (O tutor do curso já deixou esse script pronto porem mesmo aplicando ele na pedra ou no personagem nada acontece)
Se alguém puder me dar uma luz eu seria imensamente grato.
(Peço desculpas se a postagem contem algum erro pois sou novo aqui e essa é a minha primeira postagem)
Sou novo na área de criação de jogos e estou passando um pouco de dor de cabeça com um detalhe que para muitos pode ser muito simples.
Preciso fazer com que o meu personagem colete um item (pedra) apenas caminhando sobre ele mas tudo que tentei até agora falhou.
Personagem possui Rigidbody2D e BoxCollider2D
Pedra possui Rigidbody 2D e BoxCollider2D
Segue script do personagem:
.
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour {
public float Speed = 5;
private Animator anim;
private Rigidbody2D rigidBody;
private bool olhandoParaDireita;
public Collider2D coll;
void Start () {
anim = GetComponent<Animator> ();
rigidBody = GetComponent<Rigidbody2D> ();
olhandoParaDireita = true;
}
void Update () {
bool isRunning = false;
rigidBody.velocity = new Vector2 (0, rigidBody.velocity.y);
if (Input.GetKey (KeyCode.D) || Input.GetKey (KeyCode.RightArrow)) {//comando para ir para a direita
Vector2 deltaPos = new Vector2 (Speed, rigidBody.velocity.y);
rigidBody.velocity = deltaPos; //configurando o movimento
if (!olhandoParaDireita) {
Flip();
Debug.Log ("estava olhando para esquerda");
}
isRunning = true;
}
if (Input.GetKey (KeyCode.A) || Input.GetKey (KeyCode.LeftArrow)) { //comando para ir para a esquerda
Vector2 deltaPos = new Vector2 (-Speed, rigidBody.velocity.y);
rigidBody.velocity = deltaPos; //configurando o movimento
if (olhandoParaDireita) {
Flip();
Debug.Log ("estava olhando para direita");
}
isRunning = true;
}
anim.SetBool ("running", isRunning);
}
public void Flip()
{
Vector3 aux = transform.localScale;
aux.x = aux.x * -1;
transform.localScale = aux;
if (olhandoParaDireita) {
olhandoParaDireita = false;
} else {
olhandoParaDireita = true;
}
}
}
Segue script da pedra (O tutor do curso já deixou esse script pronto porem mesmo aplicando ele na pedra ou no personagem nada acontece)
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class JewelController : MonoBehaviour {
/*Verifica as colisões da pedra*/
private void OnTriggerEnter2D(Collider2D collision)
{
if(collision.tag == "Player") //se quem colidiu com a pedra é o jogador, então troca a pedra de posição.
{
if (transform.position.x == -5)
{
transform.position = new Vector3(5, -3f);
}
else
{
transform.position = new Vector3(-5, -3f);
}
}
}
}
Se alguém puder me dar uma luz eu seria imensamente grato.
(Peço desculpas se a postagem contem algum erro pois sou novo aqui e essa é a minha primeira postagem)
maxwarnava- Membro
- PONTOS : 1819
REPUTAÇÃO : 3
Respeito as regras :
Re: [RESOLVIDO] Colisão
Você quer apenas que o objeto seja coletado ou troque de posição com o player? Porque a sua dúvida diz que quer coletar, mas o script diz que troca de posição, enfim...
Vou partir do pressuposto que você quer coletar o objeto quando colidir com ele, e assim ele "desaparece", não é?
Primeiramente coloque a Tag do seu personagem como "Player";
No objeto que quer colidir, no componente de colisão, marque a opção "IsTrigger";
Cerifique-se se o collider do objeto é 2D (o nome do componente tem o sufixo "2D", por exemplo: "Box Collider 2D");
Agora no objeto que você quer colidir, coloque o script abaixo:
Vou partir do pressuposto que você quer coletar o objeto quando colidir com ele, e assim ele "desaparece", não é?
Primeiramente coloque a Tag do seu personagem como "Player";
No objeto que quer colidir, no componente de colisão, marque a opção "IsTrigger";
Cerifique-se se o collider do objeto é 2D (o nome do componente tem o sufixo "2D", por exemplo: "Box Collider 2D");
Agora no objeto que você quer colidir, coloque o script abaixo:
- Código:
using UnityEngine;
public class JewelController : MonoBehaviour{
private void OnTriggerEnter2D(Collider2D _col){
if(_col.CompareTag("Player"))
Destroy(this.gameObject); // Coletou o objeto
}
}
Re: [RESOLVIDO] Colisão
Olá, muito obrigado pela ajuda mesmo que logo após a postagem eu o tenha resolvido apenas marcando a caixa "Simulated" no RigidBody2D, no entanto acabaste de me ensinar algo novo e fico imensamente grato por isso.
maxwarnava- Membro
- PONTOS : 1819
REPUTAÇÃO : 3
Respeito as regras :
Tópicos semelhantes
» [RESOLVIDO] Problema com Colisão 2D
» [RESOLVIDO] Detectar colisão usando if em C#?
» [RESOLVIDO] OverlapBox detectar colisão
» [RESOLVIDO] Problema de colisão Unity + Objeto
» [RESOLVIDO]Checar Objeto mais proximo da colisão
» [RESOLVIDO] Detectar colisão usando if em C#?
» [RESOLVIDO] OverlapBox detectar colisão
» [RESOLVIDO] Problema de colisão Unity + Objeto
» [RESOLVIDO]Checar Objeto mais proximo da colisão
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos