傍游戏物理学

时间:2018-08-23 05:52:20

标签: c# unity3d game-physics pong

我正在阅读一个教程,并且我大部分都理解了。我想问一件事。 这是我正在关注的教程:

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;
    }

命中因素方法是

   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;

Image of ball and racket's y position

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

1 个答案:

答案 0 :(得分:0)

游戏物理过程在教程中进行了描述

  

Java docs

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

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

(ballPos.y - racketPos.y) / racketHeight

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

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