6
respostas

Meu obstáculo não está congelando

Quando acabei de fazer essa aula os meus obstácuclos continuavam andando e quem tava parando era o Gerador de obstáculos. O que eu fasso?

6 respostas

Oi Luis, pode postar o seu código para a gente dar uma olhada?

using System.Collections; using System.Collections.Generic; using UnityEngine;

public class Avião : MonoBehaviour { private Rigidbody2D fisica; [SerializeField] private float forca = 3; private Diretor diretor; private Vector3 posicaoInicial; private void Awake()

{
    this.fisica = this.GetComponent<Rigidbody2D>();
    this.posicaoInicial = this.transform.position;
}
private void Start()
{
    this.diretor = GameObject.FindObjectOfType<Diretor>();
}
private void Update()
{
   if(Input.GetButtonDown("Fire1"))
    {
        this.Impulsionar();

    }
}
public void Reiniciar()
{
    this.transform.position = this.posicaoInicial;
    this.fisica.simulated = true;
}

private void Impulsionar()
{
    this.fisica.velocity = Vector2.zero;
    this.fisica.AddForce(Vector2.up * this.forca, ForceMode2D.Impulse);
}
private void OnCollisionEnter2D(Collision2D colisao)
{
    this.fisica.simulated = false;
    this.diretor.FinalizarJogo();
}

}

using System.Collections; using System.Collections.Generic; using UnityEditor; using UnityEngine;

public class Obstáculo : MonoBehaviour

{

private float velocidade = 0.1f;
[SerializeField]
private float variacaoDaPosicaoY;

private void Awake()
{
    this.transform.Translate(Vector3.up * Random.Range(-variacaoDaPosicaoY, variacaoDaPosicaoY));

}
private void Update()
{
    this.transform.Translate(Vector3.left * this.velocidade);
}
private void OnTriggerEnter2D(Collider2D outro)
{
    this.Destruir();
}
public void Destruir()
{
    GameObject.Destroy(this.gameObject);
}

}

O problema não parece estar no obstáculo e nem no avião, mas sim no gerador que deve ter um Instatiate (objeto,posição,rotação)

Esse código abaixo é o seu...um pouco modificado.

private float velocidade = 0.1f;
private float variacaoDaPosicaoY;


private void Update()
{
    transform.Translate(Vector3.left * this.velocidade); // transform.Translate(x,y,z); Move o obstáculo para a esquerda

}

private void Awake() // Não está sendo usado em nenhuma parte do código. Mas ele faz um sorteio que diminui ou aumenta a velocidade no eixo Y. Você pode jogar esta função no update para rodar a todo momento, ou jogar na Void Start para ele ser rodado apenas quando o obstáculo for instanciado.
{
    transform.Translate(Vector3.up * Random.Range(-variacaoDaPosicaoY, variacaoDaPosicaoY));

}

private void OnTriggerEnter2D(Collider2D outro) // quando ele colidir com um objeto qualquer ele será destruído, neste caso você não colocou nenhuma condição de Trigger.
{
      Destroy(gameObject);
}

}

Eu coloquei esse código no meu Gerador de Obstáculos e não deu certo

Luis, você me mostrou 2 códigos, um é referente a movimento, não gera obstáculos o outro é referente ao avião. Pelo que você está falando tem mais um código, que gera os obstáculos, pode colocar ele aqui. são três códigos, um do avião, um do obstáculo que está se mexendo e um que gera os obstáculos.

Se você puder importar o seu projeto para o git hub para eu baixar e dar uma olhada, seria melhor. Se fazer isso, por favor, me fala a versão da unity que você está usando.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software