简体   繁体   English

一段时间后如何将变量设置回零

[英]How to set a variable back to zero after a certain period of time

So I'm trying to work on a Ping Pong game as a learning activity for Unity. 因此,我正在尝试开发乒乓球游戏作为Unity的学习活动。 I'm working on making a reset system for the ping pong ball if it gets stuck bouncing up and down for eternity. 我正在为乒乓球制作一个重置系统,以防止它永久地上下弹跳。

I set up a bottom wall collider trigger and a top wall collider trigger to increment a contact variable by 1. For example, if the ball hits the top wall of the game the HitsTop variable will increment by 1. 我设置了底壁对撞机触发器和顶壁对撞机触发器,以将接触变量增加1。例如,如果球击中游戏的顶壁,则HitsTop变量将增加1。

Likewise for the bottom wall. 底壁也是如此。 My issue is, when the ball hits the bottom wall and top wall ten times it resets the ball position. 我的问题是,当球击中底壁和顶壁十次时,它将重置球的位置。

I want to add code that will reset the HitsTop and the HitsBottom variables after a certain period of time, say, 5 seconds. 我想添加代码,该代码将在一定时间(例如5秒)后重置HitsTopHitsBottom变量。

Is this possible in C#? 这在C#中可能吗?

My code is as such: 我的代码是这样的:

using UnityEngine;
using System.Collections;

public class GameManager : MonoBehaviour {

    public static int PlayerScore1 = 0;
    public static int PlayerScore2 = 0;
    public static int HitsTop = 0;
    public static int HitsBottom = 0;

    public GUISkin layout;

    Transform theBall;

    // Use this for initialization
    void Start () {
        theBall = GameObject.FindGameObjectWithTag("Ball").transform;
    }

    public static void Score (string wallID) {
        if (wallID == "rightWall")
        {
            PlayerScore1++;
        } else if (wallID == "leftWall") {
            PlayerScore2++;
        }

        if (wallID == "topWallTrigger")
        {
            HitsTop++;
        } else if (wallID == "bottomWallTrigger") {
            HitsBottom++;
        }
    }

    void OnGUI () {
        GUI.skin = layout;
        GUI.Label(new Rect(Screen.width / 2 - 150 - 12, 20, 100, 100), "" + PlayerScore1 + HitsTop);
        GUI.Label(new Rect(Screen.width / 2 + 150 + 12, 20, 100, 100), "" + PlayerScore2 + HitsBottom);

        if (GUI.Button(new Rect(Screen.width / 2 - 60, 35, 120, 53), "RESTART"))
        {
            PlayerScore1 = 0;
            PlayerScore2 = 0;
            HitsTop = 0;
            HitsBottom = 0;
            theBall.gameObject.SendMessage("RestartGame", 0.5f, SendMessageOptions.RequireReceiver);
        }

        if (PlayerScore1 == 10)
        {
            GUI.Label(new Rect(Screen.width / 2 - 150, 200, 2000, 1000), "PLAYER ONE WINS");
            theBall.gameObject.SendMessage("ResetBall", null, SendMessageOptions.RequireReceiver);
        } else if (PlayerScore2 == 10)
        {
            GUI.Label(new Rect(Screen.width / 2 - 150, 200, 2000, 1000), "PLAYER TWO WINS");
            theBall.gameObject.SendMessage("ResetBall", null, SendMessageOptions.RequireReceiver);
        }
        if (HitsTop == 10) {
            theBall.gameObject.SendMessage("RestartGame", 1.0f, SendMessageOptions.RequireReceiver);
            HitsTop = 0;
        } else if (HitsBottom == 10) {
            theBall.gameObject.SendMessage("RestartGame", 1.0f, SendMessageOptions.RequireReceiver);
            HitsBottom = 0;
        }
    }
}

Use Time.deltaTime to decrement a variable. 使用Time.deltaTime减少变量。

float timer = 5;    

void Update()
{
  //This will decrement the timer's value by the time. Once this hits zero, the timer is reset to its original value.
  timer -= Time.deltaTime;
  if(timer <= 0)
  {
   //Call reset game function
    timer = 5;
  }
}

Also when you increment HitsTop or HitsBottom , reset the timer to 5. 同样,当您增加HitsTopHitsBottom ,将计时器重置为5。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM