protected override void Respond(DRigidbody drb) { double sqrMagnitude = Vector3d.SqrMagnitude(position - drb.position); Vector3d dir = (position - drb.position).normalized; Vector3d force = dir * multiplier / sqrMagnitude; drb.AddForce(force); }
protected override void Respond(DRigidbody drb) { if (drb.position.y > 0) { return; } drb.position = new Vector3d(drb.position.x, 0, drb.position.z); drb.velocity.y = 0; }
protected override void Respond(DRigidbody drb) { if (Vector3d.SqrMagnitude(position - drb.position) < radius * radius) { Vector3d contactPosition = Vector3d.ClampMagnitude(drb.position - position, radius) + position; drb.position = contactPosition; drb.AddForce(new Vector3d(0, 9.81, 0)); Vector3d diff = drb.position - position; Vector3d normal = diff.normalized; Debug.DrawRay((Vector3)contactPosition, (Vector3)normal); if (Vector3d.Dot(normal, drb.velocity) < 0) { drb.velocity = Vector3d.ProjectOnPlane(drb.velocity, normal); } } }
protected override void Respond(DRigidbody drb) { drb.AddForce(acceleration); }
protected abstract void Respond(DRigidbody drb);