Реакционная игра не будет записывать данные должным образом, уровень и система не будут работать - PullRequest
0 голосов
/ 09 февраля 2020

Все остальное, что прокомментировано в этом коде, это предыдущий код, который не работал, но я не удалил его, чтобы показать вам, это мой основной код, в который я поместил большую часть того, что я делаю, здесь, может быть, я должен разобрать код больше, idk. Цель игры состоит в том, что вы должны нажимать пробел 8 раз за уровень, и после завершения вы переходите на следующий уровень, который должен иметь на 20% меньше времени, чем предыдущий уровень (вы начинаете на уровне 1 с 5 секундами). Каждый раз, когда вы нажимаете пробел во времени или теряете жизнь, таймер ожидания должен активироваться, давая игроку 3-х секундный хедз-ап, игра снова запускается через несколько секунд, поэтому им нужно подготовиться. Ваши жизни сбрасываются после каждого успешного прохождения уровня обратно на 3 жизни, так что у игрока есть 3 попытки на уровень, если он потерпит неудачу и потеряет всю свою жизнь, тогда текст с пометкой «wintext» должен отображать «Game Over» и все таймеры и тому подобное должны быть отключены , Каждый раз, когда игрок успешно нажимает пробел, прежде чем таймер истекает, он должен записать оставшееся время в текстовом файле, который можно открыть и просмотреть в файлах игры. Это моя конечная цель, я прошу прощения за любое прочтение этого, поскольку я не пытаюсь заставить вас сделать мою программу здесь, но я заблудился и нуждаюсь в некоторой помощи, и это своего рода последнее средство для меня, любой совет в любой части Программа будет оценена или любые ссылки / ресурсы, и т. д. c. ИГНОРИРУЙТЕ ВСЕ О RIGIDBODY И ДВИЖЕНИИ ИГРОКА. это было из старого кода и программы, и я только что собрал код из учебника единства о движении игрока и мяча, это не нужно или не актуально

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.IO;
using TMPro;

public class Player_Controller: MonoBehaviour
{
    public Timer timer;
    public Wait_Timer wait_time;

    public float speed;
    //public Text countText;
    public Text winText;


    public int lives = 3;
    public int measurementnumber = 0;
    public int currentlevel = 1;
    public int measurementsPerLvl = 8;
    public Text levelText;

    public Rigidbody rb;
    //private int count;
    private IEnumerator coroutine;


    void Start ()
    {
        //rb = GetComponent<Rigidbody>();
        //count = 0;
        //SetCountText();
        levelText = GetComponent<Text>();
        wait_time.enabled = false;
        levelText.enabled = false;


        measurementnumber = 0;
        Lives();
    }

    void Update()
    {

        if (Input.GetKeyUp(KeyCode.Space))
        {
            TakeMeasurement();

        }
        if (wait_time.currentTime == 0)
        {
            wait_time.enabled = false;
            wait_time.currentTime = 3f;
            levelText.enabled = false;
            timer.enabled = true;
        }
    }

    /*void FixedUpdate ()
    {
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");

        Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);

        rb.AddForce(movement * speed);
    }*/

    void OnTriggerEnter(Collider other) {
        if(other.gameObject.CompareTag("Pick Up"))
        {
            other.gameObject.SetActive(false);
            TakeMeasurement();
        }
    }
    public void TakeMeasurement()
    {
        //count = count + 100;
        measurementnumber = measurementnumber + 1;

        //SetCountText();
        if (measurementnumber == measurementsPerLvl)
        {
            lives = 3;
            currentlevel++;
            levelText.text = "Level " + currentlevel;
            levelText.enabled = true;
            measurementnumber = 0;
            wait_time.enabled = true;

        }
        timer.enabled = false;
        timer.secondsleft = 5;
        wait_time.enabled = true;

    }
    public void Lives()
    {
        if(timer.secondsleft == 0)
        {
            lives--;
            timer.enabled = false;
            wait_time.enabled = true;
            timer.secondsleft = timer.newvalue;
        }
        if (lives == 0)
        {
            timer.enabled = false;
            wait_time.enabled = false;
            winText.text = "Game Over!";
            if (Input.GetKeyUp(KeyCode.Space))
            {

            }

        }
    }
    /*void TextFile()
    {
        string path = Application.dataPath + "/Timetext.txt";
        if (!File.Exists(path))
        {
            File.WriteAllText(path, "Time Text File: \n\n");
        }
        if (count == count + 100)
        {
            string content = "Time: " + timer.secondsleft + "\n";
            File.AppendAllText(path, content);
        }
    }*/
    //private IEnumerator LevelWait()
    //{

            //count = count + 100;
            //level_count = level_count + 100;
           // SetCountText();
            //if (level_count == 800)
            //{
                //currentlevel++;
                //level_count = 0;
                //timer.enabled = false;
                //yield return new WaitForSeconds(2);
                //timer.secondsleft = 10;

            //}



    //}

    /*void SetCountText()
    {
        countText.text = "Count: " + count.ToString();
    }*/



}

Это мой Код таймера на отдельном document:

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

public class Timer: MonoBehaviour
{
    public float secondsleft = 5;
    //public float Milliseconds = 0;
    //public float Seconds = 59;
    //public float Minutes = 0;
    public Player_Controller playercontroller;
    public float newvalue;
    private Text text;


   void Start()
    {
        text = GetComponent <Text>();
        newvalue = 5;
    }
    void Update()
    {
        secondsleft -= Time.deltaTime;
        if (secondsleft < 0)
        {
            secondsleft = 0;
        }
        text.text = secondsleft.ToString();
        /*if (playercontroller.currentlevel == playercontroller.currentlevel++)
        {

            newvalue = newvalue - (newvalue * 20/100);
            secondsleft = newvalue;
        }*/
    }
}

И это мой код таймера ожидания, также в отдельном документе, я сделал это, потому что у меня были проблемы с использованием перечислителей с моим кодом для приостановки таймера, поэтому я сделал это вместо этого для реализации

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


public class Wait_Timer: MonoBehaviour
{
    public float currentTime = 0f;
    public float startingTime = 3f;

    Text WaitText;

    void Start()
    {
        currentTime = startingTime;
        WaitText = GetComponent<Text>();
    }

    void Update()
    {
        currentTime -= 1 * Time.deltaTime;
        WaitText.text = currentTime.ToString("0");

        if(currentTime <= 0)
        {
            currentTime = 0;
        }

    }
}
...