簡體   English   中英

Unity3D:碰撞后獲取速度

[英]Unity3D: Get Velocity after collision

我正在打台球游戲,我有兩個問題:

當兩個球相互碰撞時,如何找到它們的速度?如何將其應用於兩個球?

我已經知道它們將要移動的角度,我只需要找到它們在這些方向上移動的速度即可。

我從來都不擅長物理/物理編程,因此,我將不勝感激! 順便說一句,我的游戲是3D模式。

感謝您的時間!

編輯:我想做的是使移動方向與使用此腳本計算的方向匹配:

if (Physics.Raycast(ray, out hit, Mathf.Infinity, lmm))
{
    location = new Vector3(hit.point.x, 1.64516f, hit.point.z);
}

if (Physics.SphereCast(transform.position, 0.77f, location - transform.position, out hitz, Mathf.Infinity, lmm2))
{
    if (hitz.collider.tag == "Ball")
    {
        Vector3 start = hitz.point;
        end = start + (-hitz.normal * 4);
        lineRenderer2.SetPosition(1, end);
    }

}

您可以通過對每個球施加脈沖來計算新的速度。 我們可以應用牛頓第三定律。 偽代碼:

    RelativeVelocity = ball1.velocity - ball2.velocity;
    Normal = ball1.position - ball2.position;
    float dot = relativeVelocity*Normal;
    dot*= ball1.mass + ball2.mass;
    Normal*=dot;
    ball1.velocity += Normal/ball1.mass;
    ball2.velocity -= Normal/ball2.mass;

但是,這沒有考慮兩個球之間的摩擦力或它們的角動量。

如果我理解正確,那么您想做的就是將“ A球”的速度作為對“ B球”的作用力,反之亦然。 如果是這種情況,我建議這樣的事情:

將此腳本附加到所有球上:

public class BallCollisionScript : MonoBehaviour 
{   
    public Rigidbody Rigid_Body;

    void Start()
    {
        Rigid_Body = this.GetComponent<Rigidbody>();
    }

    void OnCollisionEnter(Collision collision) 
    {
        if (collision.gameObject.tag.Equals("Ball"))
        {
            BallScript otherBall = collision.gameObject.GetComponent<BallScript>();
            Rigid_Body.AddForce(otherBall.Rigid_Body.velocity);
        }
    }
}

確保所有球都標記有“球”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM