【问题标题】:Velocity of Collision2D collider/rigidbody doesn't have velocity?Collision2D对撞机/刚体的速度没有速度?
【发布时间】:2021-08-04 03:17:47
【问题描述】:

首先我是一个初学者,只是想学习 Unity,我只是想创建一个 Pong 游戏。

当球与玩家碰撞时,尝试获取移动的玩家对象的速度。尝试将实际的玩家对象作为 RigidBody2D 和 BoxCollider 传递,但玩家移动如下所示:

void Update()
{
    if(Input.GetKey(MoveUp)) {
        var move = new Vector2(0, 1) * Speed;
        rb.velocity = move;
    }
    else if (Input.GetKey(MoveDown))
    {
        var move = new Vector2(0, -1) * Speed;
        rb.velocity = move;
    }
    else
    {
        var move = new Vector2(0, -1) * 0;
        rb.velocity = move;
    }
}

碰撞处理如下:

void OnCollisionEnter2D(Collision2D collision)
{
    rb = GetComponent<Rigidbody2D>();


    if (collision.collider.tag == "Player")
    {
        var playerVel = collision.rigidbody.velocity;
        var playerColVel = collision.collider.attachedRigidbody.velocity;
    }
}

这两个速度变量都返回 (0,0),它们的大小也是 (0,0)。

我正在尝试学习一个教程,但该教程已有多年历史,我想知道如何设置速度有什么改变还是我遗漏了什么?

【问题讨论】:

  • 如果物体发生碰撞,它们会停止吗?你试过collision.relativeVelocity吗?资源:docs.unity3d.com/ScriptReference/…
  • @dgates82 这只是给了我球进入球员的速度,而不是实际球员的速度。但是,您关于它们是否已停止的声明可能有些问题,因为我删除了 else 并且现在它具有速度,因为当按钮向上时它正在消除速度。但是即使连续按下键直到断点它也不会保持速度。所以我想我现在的问题是如何在没有它的情况下停止玩家,然后导致碰撞失去速度,而不跟踪钥匙何时出现,因为这也不起作用。
  • 你在播放器脚本上使用一个变量来跟踪“最后速度”是什么?如果你在球的碰撞中需要它,你可以从那里获取对玩家脚本的引用
  • 我之前确实尝试过,但没有得到正确的响应,我认为通过将停止与运行完全分开,我得到了更好的结果,而不仅仅是立即停止。所以认为现在很好,可能会更好,但我仍在学习,不过感谢您的帮助! :)

标签: c# unity3d 2d


【解决方案1】:

在最新版本的 unity 中碰撞检测的方式发生了一些变化。这是我使用的代码 -

公共 PlayerMovement 运动; 公共 GAME_MANAGER 游戏管理器;

private void OnCollisionEnter(Collision collisionInfo)
{
    if (collisionInfo.collider.tag == "Obstalce")
    {
        // you need to make the ball bounce like velocity += 2f;
    }

    if (collisionInfo.collider.tag == "Side Obstacles")
    {
        // here also you have to write what will be the action after the ball hit the paddle    
        FindObjectOfType<GAME_MANAGER>().IncreaseRightScore();
    }

}

如果您想了解更深入的信息,可以关注本教程 - https://www.youtube.com/watch?v=gAB64vfbrhI

【讨论】:

    【解决方案2】:

    设法通过移除停止并分离按钮释放时的代码来解决此问题。这会使玩家拥有正确的 y 速度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多