[英]How to set a variable back to zero after a certain period of time
因此,我正在尝试开发乒乓球游戏作为Unity的学习活动。 我正在为乒乓球制作一个重置系统,以防止它永久地上下弹跳。
我设置了底壁对撞机触发器和顶壁对撞机触发器,以将接触变量增加1。例如,如果球击中游戏的顶壁,则HitsTop
变量将增加1。
底壁也是如此。 我的问题是,当球击中底壁和顶壁十次时,它将重置球的位置。
我想添加代码,该代码将在一定时间(例如5秒)后重置HitsTop
和HitsBottom
变量。
这在C#中可能吗?
我的代码是这样的:
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;
}
}
}
使用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;
}
}
同样,当您增加HitsTop
或HitsBottom
,将计时器重置为5。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.