private void UpdateCollider2(Check2DCollider collider, TSVector curPosition, TSVector curForward, BaseGameColliderData colliderData) { FP nAngle = TSVector.Angle(TSVector.forward, curForward); if (curForward.x < 0) { nAngle = 360 - nAngle; } TSQuaternion sQuat = TSQuaternion.AngleAxis(nAngle, TSVector.up); TSVector center = curPosition + sQuat * colliderData.center; TSVector forward = sQuat * colliderData.forward; collider.center = new TSVector2(center.x, center.z); collider.forward = new TSVector2(forward.x, forward.z); }
private Check2DCollider Create2DCollider(BaseGameColliderData data) { Check2DCollider collider = null; if (data.gameColliderType == GameColliderType.RectCollider) { C2D_Rect rect = ObjectPool <C2D_Rect> .Instance.GetObject(); RectColliderData rectData = (RectColliderData)data; rect.halfWidth = rectData.halfWidth; rect.halfHeight = rectData.halfHeight; collider = rect; } else if (data.gameColliderType == GameColliderType.CircleCollider) { C2D_Circle circle = ObjectPool <C2D_Circle> .Instance.GetObject(); CircleColliderData circleData = (CircleColliderData)data; circle.radius = circleData.radius; collider = circle; } return(collider); }
void Start() { Collider2D collider = GetComponent <Collider2D>(); var pos = transform.position; var up = transform.up; var scale = transform.lossyScale; if (collider != null) { if (collider is BoxCollider2D) { var c = (BoxCollider2D)collider; float halfWidth = scale.x * c.size.x / 2; float halfHeight = scale.y * c.size.y / 2; c2d_collider = new C2D_Rect(new TSVector2(FP.FromFloat(pos.x), FP.FromFloat(pos.y)), new TSVector2(FP.FromFloat(up.x), FP.FromFloat(up.y)), FP.FromFloat(halfWidth), FP.FromFloat(halfHeight)); } else if (collider is CircleCollider2D) { var c = (CircleCollider2D)collider; float radius = Mathf.Max(scale.x, scale.y) * c.radius; c2d_collider = new C2D_Circle(new TSVector2(FP.FromFloat(pos.x), FP.FromFloat(pos.y)), new TSVector2(FP.FromFloat(up.x), FP.FromFloat(up.y)), FP.FromFloat(radius)); } } }