private void GenerateColliders() { PPart.ClearColliderHolder(); // The first corner is at angle=0. // We want to start the colliders in between the corners. float offset = (360f / numSides) / 2 - 90f; for (int i = 0; i < numSides; i++) { var go = new GameObject($"Mesh_Collider_{i}"); var coll = go.AddComponent <MeshCollider>(); go.transform.SetParent(PPart.ColliderHolder.transform, false); coll.convex = true; coll.sharedMesh = GenerateColliderMesh(); var orientation = Quaternion.AngleAxis(90 + offset + (360f * i / numSides), Vector3.up); go.transform.localRotation *= orientation; go.transform.localPosition = Vector3.zero; } }
private void GenerateColliders() { PPart.ClearColliderHolder(); // The first corner is at angle=0. // We want to start the capsules in between the corners. float offset = (360f / numSides) / 2; Vector3 refPoint = new Vector3(MajorRadius, 0, 0); for (int i = 0; i < numSides; i++) { var go = new GameObject($"Mesh_Collider_{i}"); var coll = go.AddComponent <MeshCollider>(); go.transform.SetParent(PPart.ColliderHolder.transform, false); coll.convex = true; coll.sharedMesh = GenerateColliderMesh(); var prevCornerOrient = Quaternion.AngleAxis(360f * i / numSides, Vector3.up); var prevCornerPos = prevCornerOrient * refPoint; var nextCornerOrient = Quaternion.AngleAxis(360f * (i + 1) / numSides, Vector3.up); var nextCornerPos = nextCornerOrient * refPoint; var orientation = Quaternion.AngleAxis(90 + offset + (360f * i / numSides), Vector3.up); go.transform.localRotation *= orientation; go.transform.localPosition = (prevCornerPos + nextCornerPos) / 2; } }