Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Dúvida de código

Boa tarde! Espero que esteja bem!

Como mandei em outra dúvida, meu GetComponent não está indo, então tentei fazer alguns outros caminhos para fazer o código rodar, mas tive alguns problemas para dar certo.... Gostaria de saber o porquê.

Os métodos que pensei foram: No script do zumbi:

1º: Dentro do Update, colocar um if com a condicional do bool, então eu fiz:

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

public class Zobies : MonoBehaviour
{
    public GameObject Player;
    public float speedZ;
    public GameObject GameOver_Text;
    public bool lived = true;

    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        if (lived == false)
        {
            if (Input.GetButtonDown("Fire1"))
            {
                SceneManager.LoadScene("Scene_1");
            }
        } 
    } 

    private void FixedUpdate()
    {
        speedZ = 6;
        float distance = Vector3.Distance(transform.position, Player.transform.position);

        Vector3 direction = Player.transform.position - transform.position;
        //Quaternion = rotação, LookRotation fala para onde o corpo rigido tem que rotacionar em relação a outro objeto
        Quaternion newRotation = Quaternion.LookRotation(direction);
        GetComponent<Rigidbody>().MoveRotation(newRotation);

        if (distance > 2.5)
        {
            GetComponent<Rigidbody>().MovePosition
                (GetComponent<Rigidbody>().position +
                direction.normalized * speedZ * Time.deltaTime);

            GetComponent<Animator>().SetBool("Atacando", false);
        }
        else
        {
            GetComponent<Animator>().SetBool("Atacando", true);
        }

        void OnTriggerEnter(Collider Collision_Object)
        {
            Destroy(Collision_Object.gameObject);
        }
    }
    void Attacks_Player()
    {
        Time.timeScale = 0;
        GameOver_Text.SetActive(true);
        lived = false;
    }
}

Mas aí toda vez que eu clicava sem mesmo ter perdido o jogo, ele recomeçava.

2º: Eu tentei colocar um incremento diferente no if ao invés da variável bool foi if(GameOver_Text == false), então ficou:

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

public class Zobies : MonoBehaviour
{
    public GameObject Player;
    public float speedZ;
    public GameObject GameOver_Text;


    // Update is called once per frame
    void Update()
    {
        if (GameOver_Text == true)
        {
            if (Input.GetButtonDown("Fire1"))
            {
                SceneManager.LoadScene("Scene_1");
            }
        }
    }

    private void Start()
    {
        Time.timeScale = 1;
    }

    private void FixedUpdate()
    {
        speedZ = 6;
        float distance = Vector3.Distance(transform.position, Player.transform.position);

        Vector3 direction = Player.transform.position - transform.position;
        //Quaternion = rotação, LookRotation fala para onde o corpo rigido tem que rotacionar em relação a outro objeto
        Quaternion newRotation = Quaternion.LookRotation(direction);
        GetComponent<Rigidbody>().MoveRotation(newRotation);

        if (distance > 2.5)
        {
            GetComponent<Rigidbody>().MovePosition
                (GetComponent<Rigidbody>().position +
                direction.normalized * speedZ * Time.deltaTime);

            GetComponent<Animator>().SetBool("Atacando", false);
        }
        else
        {
            GetComponent<Animator>().SetBool("Atacando", true);
        }

        void OnTriggerEnter(Collider Collision_Object)
        {
            Destroy(Collision_Object.gameObject);
        }
    }
    void Attacks_Player()
    {
        Time.timeScale = 0;
        GameOver_Text.SetActive(true);
    }
}

Desse jeito aconteceu a mesma coisa que no primeiro, só de tentar atirar o jogo já reinicia automaticamente.

4 respostas

3º: Eu tentei colocar um incremento diferente no if ao invés da variável bool, eu tentei fazer por if (Time.timeScale ==0):

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

public class Zobies : MonoBehaviour
{
    public GameObject Player;
    public float speedZ;
    public GameObject GameOver_Text;

    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        if (Time.timeScale=="0")
        {
            if (Input.GetButtonDown("Fire1"))
            {
                SceneManager.LoadScene("Scene_1");
            }
        } 
    } 

    private void Start(){
        Time.timeScale = 1;
    }

    private void FixedUpdate()
    {
        speedZ = 6;
        float distance = Vector3.Distance(transform.position, Player.transform.position);

        Vector3 direction = Player.transform.position - transform.position;
        //Quaternion = rotação, LookRotation fala para onde o corpo rigido tem que rotacionar em relação a outro objeto
        Quaternion newRotation = Quaternion.LookRotation(direction);
        GetComponent<Rigidbody>().MoveRotation(newRotation);

        if (distance > 2.5)
        {
            GetComponent<Rigidbody>().MovePosition
                (GetComponent<Rigidbody>().position +
                direction.normalized * speedZ * Time.deltaTime);

            GetComponent<Animator>().SetBool("Atacando", false);
        }
        else
        {
            GetComponent<Animator>().SetBool("Atacando", true);
        }

        void OnTriggerEnter(Collider Collision_Object)
        {
            Destroy(Collision_Object.gameObject);
        }
    }
    void Attacks_Player()
    {
        Time.timeScale = 0;
        GameOver_Text.SetActive(true);
    }
}

Esse jeito foi o único que deu certo, acabei jogando o mesmo raciocínio para o script de jogador e também deu certo. Por enquanto estou mantendo assim.

Por que os outros não deram certo? Tem problema ficar assim?

Agradeço desde já!

Oi, Julio, tudo bem?

Tenta mudar:

public bool lived = true;

para

private bool lived = true;

Talvez a variável tenha um valor sobrescrito no inspector

Olá Henrique!

Entendi o meu erro... Em um determinado momento eu acabei mudando os nomes dos Scripts para deixar mais organizados, mas a Unity não está reconhecendo isso e está usando os nomes antigos, por isso que ele não estava achando. Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Será que meu Unity que está meio travado ou existe um jeito certo de mudar os nomes dos Scripts?

solução!

Pesquisa ali na busca do Project por Control_Player porque talvez exista uma duplicata, mas se for só o nome a Unity não faz isso pra você, você tem que nomear a classe e o arquivo. Apesar de como não está dando erro acredito que uma duplicate pode existir em outra pasta.