C# 改变重力的方向

C# 改变重力的方向,c#,unity3d,game-development,C#,Unity3d,Game Development,在我的游戏中,通常情况下,当按下空格键时,玩家会上升,如果不按下空格键,玩家会下降。我的目标是:当玩家与特定物体碰撞时,重力应该以相反的方式作用,当我们按下空格键时,玩家应该下降(10秒)。这是我向上移动播放器的代码: public void Update(){ Vector2 vel=rb.velocity; float ang = Mathf.Atan2(vel.y,10)*Mathf.Rad2Deg; transform.rotation = Quaternio

在我的游戏中,通常情况下,当按下空格键时,玩家会上升,如果不按下空格键,玩家会下降。我的目标是:当玩家与特定物体碰撞时,重力应该以相反的方式作用,当我们按下空格键时,玩家应该下降(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\u事件
。这将首先使用即时事件“翻转重力”,然后使用所需长度的延迟调用任务;然后把它翻回去


更好的方法可能是创建一个“effects”类,该类可以以您可能喜欢的任何其他方式修改环境,可能基于
系统.Timers.Timer

10秒后,控件应正常工作应为
-gravity
的简单情况,否?好的,那么我怎样才能使运动产生相反的效果?我怎样才能使运动持续10秒如果你还有其他问题,或者改变你的问题,或者问一个新问题,那不是什么评论什么是对象发送者和e?它们是标准的事件参数:
发送者
,引发事件的
对象
,而
e
EventArgs
,是关于事件的附加信息。根据您的代码,它们不必存在。你没有提供太多的信息。@Iyona帮你做了这项工作?如果是,请将问题标记为已回答。