为什么运动学 2D 刚体碰撞器与另一个使用 rigdbody2D.cast 的运动学 2D 刚体碰撞器重叠?

时间:2021-07-16 18:16:13

标签: c# unity3d unityscript

我正在尝试使用rigidbody2D.cast 进行运动学体的地面碰撞。玩家和地面对撞机相互重叠。

import pandas as pd
import requests
stock="TSLA"
url = f"https://ca.finance.yahoo.com/quote/{stock}"
r = requests.get(url, headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'})
data = pd.read_html(r.text)
print(data)

Before After

1 个答案:

答案 0 :(得分:1)

rb.MovePosition(rb.position); 什么都不做,因为将 rb 移动到当前相同的位置。

您可能想要做的可能是检查 before 移动 rb 如果演员击中地面,但也在固定更新中施放,而不是固定的 downCastDistance 而是以相同的距离施放rb 将向下行进(即startingVelocity * Time.deltaTime)。如果它没有击中,则像您一样正常下降,如果确实如此,请将 rb 移动到正常下降更新和光线投射击中点的位置(位于地面)之间的最高位置:

//FixedUpdate()

float currTravelDistance = startingVelocity.y * Time.deltaTime;
rb.Cast(Vector2.down, hits, Mathf.Abs(currTravelDistance));
if (hits[0].collider.name == "Ground")
    {
        rb.position.y = Mathf.Max((rb.position + currTravelDistance).y, hits[0].point.y);
    }
else {
    rb.MovePosition(rb.position + currTravelDistance);
}

此外,由于这会将 rb 准确地移动到地面上,如果 rb 的中心在精灵的中间,请将其向上移动从精灵的“脚”到其中心的距离。 最后,如果玩家着地,你还需要重置为 0startingVelocity