Все остальное, что прокомментировано в этом коде, это предыдущий код, который не работал, но я не удалил его, чтобы показать вам, это мой основной код, в который я поместил большую часть того, что я делаю, здесь, может быть, я должен разобрать код больше, 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;
}
}
}