【问题标题】:Changing the direction of the gravity改变重力方向
【发布时间】:2020-05-14 13:59:12
【问题描述】:

在我的游戏中,通常玩家在按下空格键时会上升,如果没有按下空格键则会下降。我的目标是:当玩家与特定物体碰撞时,重力应该以相反的方式起作用,当我们按下空格键时,玩家应该下降(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);
}

【问题讨论】:

  • 10 秒后控件应该正常工作
  • 应该是-gravity的简单案例吧?
  • 好的,那我怎样才能使运动相反
  • 还有我怎样才能让它持续10秒
  • 如果您还有其他问题,请更改您的问题或提出新问题,这并不是 cmets 的真正用途

标签: c# unity3d game-development


【解决方案1】:

在不太了解您的代码结构的情况下,也许我可以提出如下建议:

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

【讨论】:

  • 什么是对象发送者和e?
  • 它们是标准事件参数:sender、引发事件的objecteEventArgs,是有关事件的附加信息。根据您的代码,它们不必在那里。您没有提供太多信息。
  • @Iyona 这对你有用吗?如果是,请将问题标记为已回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-11
  • 2013-10-14
相关资源
最近更新 更多