Unity 2D物理问题

时间:2018-07-27 13:01:59

标签: c# unity3d game-physics

我对某些物体的物理学有疑问。下面的代码中的一个类可以用力移动对象,然后使其碰撞。

 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个对象

1 个答案:

答案 0 :(得分:0)

为防止移动的刚体随着时间的过去变慢,您需要消除所有作用在其上的阻力和摩擦力。

拖动

要删除拖动,请导航到对象上的var countcomm = "SELECT * FROM Date";组件,并将Rigidbody 2DLinear Drag都设置为零:

Rigidbody 2D

或者,您可以使用以下代码以编程方式执行此操作:

Angular Drag

摩擦

要消除摩擦,请创建一个新的Rigidbody2D rb = myObject.getComponent<Rigidbody2D>(); rb.drag = 0.0f; rb.angularDrag = 0.0f; 并将Physics Material 2D设置为零。

PhysMat2D

然后单击并将其拖动到附加到移动对象和地面对象的Friction组件的Material属性上: Collider2D