簡體   English   中英

Unity 2D物理問題

[英]Unity 2D Physics issue

我對某些物體的物理性有疑問。 在下面的代碼中,是一個類,它用力移動對象,然后與它們碰撞。

 private Rigidbody2D rb2d;
public float speed;

void Start()
{
    rb2d = GetComponent<Rigidbody2D>();
    Invoke("DoStart", 0.5f);
}

public void DoStart()
{
    GoBall();
}


void GoBall()
{
    float rand = Random.Range(0, 2);
    if (rand < 1)
        rb2d.AddForce(new Vector2(20, -15) * Time.time * speed);
    else
        rb2d.AddForce(new Vector2(-20, -15) * Time.time * speed);
}

void OnCollisionEnter2D(Collision2D coll)
{
    Vector2 vel;
    vel.x = rb2d.velocity.x;
    vel.y = (rb2d.velocity.y / 2) + (coll.collider.attachedRigidbody.velocity.y / 3);
    rb2d.velocity = vel;
    Debug.Log(rb2d.velocity);
}

問題在於,一段時間后對象開始變慢,但是我希望對象不要變慢。 更准確地說,在碰撞后,它們會改變強度或運動速度。 最好移動得更慢,但不要停止,因為它們的速度取決於打擊的力量。 此代碼附加到4個對象

為了防止運動的剛體隨着時間的過去而變慢,您需要消除所有作用在其上的阻力和摩擦力。

拖動

要刪除拖動,請導航到對象上的Rigidbody 2D組件,並將“ Linear Drag和“ Angular Drag設置為零:

剛體2D

或者,您可以使用以下代碼以編程方式執行此操作:

Rigidbody2D rb = myObject.getComponent<Rigidbody2D>();
rb.drag = 0.0f;
rb.angularDrag = 0.0f;

摩擦

要消除摩擦,請創建新的“ Physics Material 2D並將“ Friction設置為零。

PhysMat2D

然后單擊並將其拖動到附加到移動對象和地面對象的Collider2D組件的Material屬性上: 對撞機2D

暫無
暫無

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

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