在我的游戏中,通常玩家在按下空格键时上升,如果不按空格键,则下降。我的目标是:当玩家与特定物体碰撞时,重力应该以相反的方式工作,当我们按下空格键时,玩家应该下降(10秒(。这是我向上移动播放器的代码:
public void Update(){
Vector2 vel=rb.velocity;
float ang = Mathf.Atan2(vel.y,10)*Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(new Vector3(0,0,ang));
if(Input.GetKey(KeyCode.Space)){
rb.AddForce(Vector2.up*gravity*Time.deltaTime*2000f);
}
在不了解太多代码结构的情况下,也许我可以提出这样的建议:
public class GameEngine
{
private double gravity = 9.81;
private void GravityFlip_Event(object sender, EventArgs e)
{
InvertGravity();
Task.Run(() => InvertGravity(10));
}
private void InvertGravity(int delaySeconds = 0)
{
Thread.Sleep(delaySeconds * 1000);
gravity = 0 - gravity;
}
}
当"玩家与特定对象碰撞"时,调用GravityFlip_Event
。这将首先"翻转重力"与即时事件,然后调用具有所需长度延迟的任务;之后把它翻回去。
更好的方法可能是创建一个"效果"类,该类可以以您可能喜欢的任何其他方式修改环境,也许基于System.Timers.Timer
。