protected override void DoAddCollider(Body body, float mass) { float rad = radius * Math.Max(transform.lossyScale.x, Math.Max(transform.lossyScale.y, transform.lossyScale.z)); connectedBody = body; Physics.AddCircle(body, isTrigger, rad, VectorConverter.Convert(center * transform.lossyScale, to2dMode), mass); }
protected override void DoAddCollider(Body body, float mass) { connectedBody = body; Vector2 cen = VectorConverter.Convert(center * transform.lossyScale, to2dMode); if (direction == 0 || height <= radius * 2) { float rad = radius * transform.lossyScale.z; Physics.AddCircle(body, isTrigger, rad, cen, mass); } else { if (direction == 1) { Vector2 sz = new Vector2(height - radius * 2, radius * 2); sz *= (Vector2)gameObject.transform.lossyScale; Physics.AddBox(body, isTrigger, sz.x, sz.y, cen, mass); sz /= 2; float rad = sz.y; sz.y = 0; Physics.AddCircle(body, isTrigger, rad, cen + sz, mass); Physics.AddCircle(body, isTrigger, rad, cen - sz, mass); } else { Vector2 sz = new Vector2(radius * 2, height - radius * 2); sz *= (Vector2)gameObject.transform.lossyScale; Physics.AddBox(body, isTrigger, sz.x, sz.y, cen, mass); sz /= 2; float rad = sz.x; sz.x = 0; Physics.AddCircle(body, isTrigger, rad, cen + sz, mass); Physics.AddCircle(body, isTrigger, rad, cen - sz, mass); } } }