[英]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秒)后重置
HitsTop
和HitsBottom
变量。
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. 同样,当您增加
HitsTop
或HitsBottom
,将计时器重置为5。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.