【发布时间】:2018-03-18 22:54:30
【问题描述】:
https://i.imgur.com/El9iCsP.gifv
以上是正在发生的事情的 GIF。当我只是按下重置按钮时,游戏重置正常,但是当玩家实际死亡(与墙壁碰撞)时,游戏不会重新启动。基本上我正在为一个大学项目制作一种速度赛跑游戏(真的很快速),但这也是我第一次使用 Unity。从我收集到的问题是由于我创建了一个 GameControl 类来从玩家类访问 gameOver 变量,但是我不完全确定如何解决这个问题。
游戏控制:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class GameControl : MonoBehaviour
{
public static GameControl instance;
public bool gameOver = false;
public float scrollSpeed;
public float scrollIncrease;
public float startTime;
public Text timerText;
public void resetGame()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
}
void Awake()
{
if(instance == null)
{
instance = this;
}
else if(instance != null)
{
Destroy(gameObject);
}
startTime = Time.time;
}
void Update()
{
if (gameOver == false)
{
float t = Time.time - startTime;
string minutes = ((int)t / 60).ToString();
string seconds = (t % 60).ToString("f2");
timerText.text = minutes + ":" + seconds;
scrollSpeed -= scrollIncrease;
}
else
{
Time.timeScale = 0;
}
}
}
玩家:
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;
public class player : MonoBehaviour {
Rigidbody2D rb;
public float moveSpeed;
public float jump;
public float jumps = 0;
void Start () {
rb = GetComponent<Rigidbody2D>();
}
void Update()
{
if (GameControl.instance.gameOver == false)
{
float moveHorizontal = Input.GetAxis("Horizontal");
rb.velocity = new Vector2(moveHorizontal * moveSpeed, rb.velocity.y);
if (Input.GetKeyDown(KeyCode.Space) && jumps < 2)
{
jumps++;
rb.velocity = Vector2.zero;
rb.AddForce(new Vector2(0, jump));
}
}
}
private void OnCollisionEnter2D(Collision2D collision)
{
if(collision.gameObject.tag == "obstacle" || collision.gameObject.name == "Left Boundry")
{
GameControl.instance.gameOver = true;
}
else if(collision.gameObject.tag == "floor")
{
jumps = 0;
}
}
}
【问题讨论】: