none
Programação para Unity 3d em C#. RRS feed

  • Pergunta

  • Boa noite galera, estou fazendo um jogo em 2D no unity 3D com um amigo e estamos apanhando pra caramba pra fazer o personagem atirar para o lado contrário dele, no caso o esquerdo, para o lado direito ele atira normal, o problema é quando vira o personagem, pois as balas continuam saindo para ambos os lados, vou colocar o código logo abaixo.

    :::::::::::::::::::: Código do player ::::::::::::::::::::

    public class Player : MonoBehaviour
    {
    //Movimentação e pulo
    public float velocidade;
    public float forcaPulo;
    private bool estaNoChao;
    public Transform chaoVerificador;
    public Transform spritePlayer;
    private Animator animator;

    //Vida 
    public Texture Sangue, Contorno;
    public int maxVida = 100;
    public int vidaAtual; 



    //Tudo o que ocorre quando o personagem é criado
    void Start()

    animator = spritePlayer.GetComponent<Animator>();

    //Vida
    vidaAtual = maxVida;
    }

    //Tudo o que ocorre enquanto o personagem existe
    void Update()
    {
    Movimentacao(); 

    //Faz a checagem da vida
    if (vidaAtual >= maxVida)
    {
    vidaAtual = maxVida;
    }
    else if (vidaAtual <= 0)
    {
    vidaAtual = 0;


    }

    //Responsável pela movimentação do personagem
    void Movimentacao()
    {

    //Ativa a condição para mudar de animação
    animator.SetFloat("movimento", Mathf.Abs(Input.GetAxisRaw("Horizontal")));

    //verifica se o personagem está no chão
    estaNoChao = Physics2D.Linecast(transform.position, chaoVerificador.position, 1 << LayerMask.NameToLayer("Piso"));
    animator.SetBool("chao", estaNoChao);

    //Anda para direita
    if (Input.GetAxisRaw("Horizontal") > 0)
    {

    transform.Translate(Vector2.right * velocidade * Time.deltaTime);
    transform.eulerAngles = new Vector2(0, 0); 
    }

    //Anda para esquerda
    if (Input.GetAxisRaw("Horizontal") < 0)
    {

    transform.Translate(Vector2.right * velocidade * Time.deltaTime);
    transform.eulerAngles = new Vector2(0, 180); 
    }

    //Faz o personagem pular
    if (Input.GetButtonDown("Jump") && estaNoChao)
    {

    if (Input.GetButtonDown("Jump") && estaNoChao)
    {
    GetComponent<Rigidbody2D>().AddForce(transform.up * forcaPulo);
    }
    }

    }

    //Parte que posiciona e altera a textura de vida
    void OnGUI()
    {

    GUI.DrawTexture(new Rect(Screen.width / 27, Screen.height / 25, Screen.width / 5.5f / maxVida * vidaAtual, Screen.height / 10.5f), Sangue);
    GUI.DrawTexture(new Rect(Screen.width / 40, Screen.height / 40, Screen.width / 5, Screen.height / 8), Contorno);


    }

    //Sistema para perder vida
    public void PerdeVida(int dano)
    {
    vidaAtual -= dano;

    if (vidaAtual <= 0)
    {
    Application.LoadLevel("Gameover");
    }
    Sangue.width = dano - vidaAtual;

    }

    //Sistema para recuperar vida
    public void RecuperaVida(int recupera)
    {
    vidaAtual += recupera;

    if (vidaAtual > maxVida)
    {
    vidaAtual = maxVida;
    }
    Sangue.width = recupera + vidaAtual;
    gameObject.GetComponent<AudioSource>().Play();



    }

    :::::::::::::::::::: Código da arma ::::::::::::::::::::

    public class ArmaPlayer : MonoBehaviour {

    public Transform BalaPlayerPrefab;

    public float TempoTiro = 0.25f;

    private float VerificaTempotiro;

    private bool DirecaoPlayerRight = true;

    // Use this for initialization
    void Start () {

    VerificaTempotiro = 0;

    }

    // Update is called once per frame
    void Update () { 

    if (VerificaTempotiro > 0)
    {

    VerificaTempotiro -= Time.deltaTime;

    }

    //Ativa o tiro
    if (Input.GetButtonDown("Fire1"))
    {

    ArmaPlayer AP = GetComponent<ArmaPlayer>();
    if (AP != null)
    {

    AP.Ataque();
    GameObject projectil = Instantiate(BalaPlayerPrefab.gameObject, transform.position, transform.rotation) as GameObject;
    projectil.GetComponent<BalaPlayer>().right = DirecaoPlayerRight; 

    }

    }

    }

    public void Ataque()
    {

    if (VerificaTempotiro <= 0)
    {

    VerificaTempotiro = TempoTiro;
    var BalaTransform = Instantiate(BalaPlayerPrefab) as Transform;
    BalaTransform.position = transform.position;
    }

    }

    }

    :::::::::::::::::::: Código da bala ::::::::::::::::::::

    public class BalaPlayer : MonoBehaviour {

    public float velocidadeDaBala;
    public int dano = 1;
    public bool right = true; 

    // Use this for initialization
    void Start () {

    gameObject.GetComponent<AudioSource>().Play();
    Destroy(gameObject, 1.4f); 

    }

    // Update is called once per frame
    void Update () {
    if (right) 
    transform.Translate(Vector2.right * velocidadeDaBala * Time.deltaTime);
    else
    transform.Translate(Vector2.left * velocidadeDaBala * Time.deltaTime);
    }


    // Colisão da bala
    void OnTriggerEnter2D(Collider2D colisor)
    {
    if (colisor.gameObject.tag == "Inimigo")
    {
    VidaInimigo VI = colisor.gameObject.GetComponent<VidaInimigo>();
    VI.Dano(dano);

    }
    }
    }
    terça-feira, 15 de setembro de 2015 00:54

Respostas

  • Olá walfred99,

    Na verdade eu acredito que não vá encontrar um tutorial que diga exatamente o que você deve fazer em seu código. Existirão livros ou tutoriais que te ensinarão a programar em c# de maneira geral, a partir deste conhecimento você vai criar o seu código para que o sistema se comporte da maneira como você deseja. A questão é que no seu caso você não esta enfrentando um problema de sistema ou algo do gênero, você só não sabe como programar a funcionalidade que deseja executar no projeto, aí é caso de aprender um pouco mais sobre a linguagem que está usando para poder aplicar no que precisa fazer.

    Atenciosamente


    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    • Marcado como Resposta walfred99 sexta-feira, 18 de setembro de 2015 22:16
    quinta-feira, 17 de setembro de 2015 12:50

Todas as Respostas

  • Olá walfred99,

    Ok, mas qual seria o problema que está enfrentando?

    Poderia explicar mais sobre isso?

    O que lhe impede de prosseguir com seu projeto?

    Atenciosamente


    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    terça-feira, 15 de setembro de 2015 19:30
  • O problema é fazer o código verificar para qual lado o personagem está virado, nesse código que mandei ele atira para o lado direito, mas quando a pessoa vira para o lado esquerdo ele atira para os dois lados, como se o código do tiro estivesse certo mas ele não consegue verificar quando o personagem tá virado para o lado esquerdo, se alguém conhecer algum livro ou tutorial que ensine isso, mesmo que seja na forma básica apenas para que eu possa entender melhor, eu agradeço.
    quinta-feira, 17 de setembro de 2015 00:37
  • Olá walfred99,

    Na verdade eu acredito que não vá encontrar um tutorial que diga exatamente o que você deve fazer em seu código. Existirão livros ou tutoriais que te ensinarão a programar em c# de maneira geral, a partir deste conhecimento você vai criar o seu código para que o sistema se comporte da maneira como você deseja. A questão é que no seu caso você não esta enfrentando um problema de sistema ou algo do gênero, você só não sabe como programar a funcionalidade que deseja executar no projeto, aí é caso de aprender um pouco mais sobre a linguagem que está usando para poder aplicar no que precisa fazer.

    Atenciosamente


    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    • Marcado como Resposta walfred99 sexta-feira, 18 de setembro de 2015 22:16
    quinta-feira, 17 de setembro de 2015 12:50
  • Obrigado pela resposta e desculpa por ter meio que saído do foco do fórum, nesse caso tenho que me virar mesmo. hehe.
    sexta-feira, 18 de setembro de 2015 22:08
  • Caso o seu código venha a apresentar algum erro enquanto estiver programando a funcionalidade, ou o comportamento seja inadequado em relação ao o que está criando, abra uma nova thread com as especificações do problema para que possamos auxiliar. Deixarei esta thread aberta para o caso de um usuário que já tenha desenvolvido algo parecido possa te dar alguma dica sobre como criar a funcionalidade que você precisa.

    Atenciosamente


    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 21 de setembro de 2015 12:48