【问题标题】:Pong game physics乒乓球物理
【发布时间】:2018-08-23 05:52:19
【问题描述】:

我正在阅读教程,并且我了解了大部分内容。我想问一件事。 这是我正在学习的教程:

https://noobtuts.com/unity/2d-pong-game

这是被称为函数HitFactor的方法。

if (col.gameObject.name == "RacketLeft") {
        // Calculate hit Factor
        float y = hitFactor(transform.position, col.transform.position, col.collider.bounds.size.y);

        // Calculate direction, make length=1 via .normalized
        Vector2 dir = new Vector2(1, y).normalized;

        // Set Velocity with dir * speed
        GetComponent<Rigidbody2D>().velocity = dir * speed;
    }

Hit Factor 方法是

   float hitFactor(Vector2 ballPos, Vector2 racketPos,
                    float racketHeight) {
        // ascii art:
        // ||  1 <- at the top of the racket
        // ||
        // ||  0 <- at the middle of the racket
        // ||
        // || -1 <- at the bottom of the racket
        return (ballPos.y - racketPos.y) / racketHeight;
    }

谁能举个例子给我解释一下?

(ballPos.y - racketPos.y) / racketHeight;

我真的无法理解,也不知道我应该读什么才能让自己理解这一点。

【问题讨论】:

  • 好吧,举个例子。假设球拍长 100 像素,球在 y 位置 220,球拍中间在 y 位置 200。球作为球拍长度的一部分在哪里?在评论中?
  • 非常感谢埃里克。 col.transform.position 将给出球拍的中间(y)位置?

标签: c# unity3d game-physics pong


【解决方案1】:

教程中描述了游戏物理

  • 如果球拍在上角击球,那么它应该会弹回我们的上边界。
  • 如果球拍击中球的中心,那么它应该向右反弹,而不是向上或向下。
  • 如果球拍在底角击中球,那么它应该向我们的底边反弹。

这意味着方向由球拍上的击球点决定。这就是公式

(ballPos.y - racketPos.y) / racketHeight

表示。如果ballPos.yracketPos.y 相等,则球拍击中中心,球应垂直飞行(Y 方向等于 0)。如果球拍打在上角,球应该向上飞 45°(Y 为 1,参见 ASCII 艺术),如果球拍打在底部,球应该向下飞 45°( Y 为 -1,参见 ASCII 艺术)。 45° 角(向上或向下)是通过具有相同 绝对 值的速度的 X 和 Y 分量实现的。介于两者之间的任何东西都会产生介于两者之间的值。

由于这种行为与球拍的尺寸无关,因此球距球拍中心的距离除以球拍的长度(实际上我认为应该是尺寸的一半,否则顶部是 .5,底部是 -.5)。

【讨论】:

  • 如果球 y 为 2,球拍 y 为 2,那么只有它们可以碰撞。喜欢imgur.com/a/8aOEZXR
  • @user5234003 你想用这张图片告诉我什么?
  • same -same /h 总是??是吗?我真的不知道。提前谢谢你保罗。
  • @user5234003 我真的不明白你在说什么。你能试着写完整的句子而不是胡言乱语吗?
猜你喜欢
  • 2011-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
相关资源
最近更新 更多