我对某些物体的物理学有疑问。下面的代码中的一个类可以用力移动对象,然后使其碰撞。
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个对象
答案 0 :(得分:0)
为防止移动的刚体随着时间的过去变慢,您需要消除所有作用在其上的阻力和摩擦力。
要删除拖动,请导航到对象上的var countcomm = "SELECT * FROM Date";
组件,并将Rigidbody 2D
和Linear Drag
都设置为零:
或者,您可以使用以下代码以编程方式执行此操作:
Angular Drag
要消除摩擦,请创建一个新的Rigidbody2D rb = myObject.getComponent<Rigidbody2D>();
rb.drag = 0.0f;
rb.angularDrag = 0.0f;
并将Physics Material 2D
设置为零。