Я разместил тот же вопрос в форме Unity и получил следующий ответ, я думаю, что решения - это именно то, что я искал, поэтому я отвечу на свой вопрос здесь, вы можете нажать здесь , чтобы получить к исходному сообщению на форуме Unity.
Решение: Raycasting сверху моего объекта, вероятно, самый простой, так как он позволяет избежать осложнений, если я перехожу с PolygonCollider и все математические вычисления сделаны для меня.
По сути, идея заключается в том, чтобы получить коллайдер, найти его наибольшее значение y из границ, go чуть больше, raycast прямо вниз.
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TopPoint2D : MonoBehaviour
{
private new Collider2D collider;
void Start()
{
collider = GetComponent<Collider2D>();
Debug.Log(GetTopPoint(0));
Debug.Log(GetTopPoint(1));
Debug.Log(GetTopPoint(5));
Debug.Log(GetTopPoint(10));
Debug.Log(GetTopPoint(11));
}
private Nullable<Vector2> GetTopPoint(float xOffset){
// a point on the y axis that is always above our collider
float yStrictlyAbove = collider.bounds.max.y + 0.1f;
float xMin = collider.bounds.min.x;
float yStrictlyBelow = collider.bounds.min.y - 0.1f;
float distance = yStrictlyAbove - yStrictlyBelow;
RaycastHit2D[] hits = Physics2D.RaycastAll(
new Vector2(xMin + xOffset, yStrictlyAbove),
Vector2.down,
distance: distance
);
foreach(RaycastHit2D h in hits){
if(h.collider == collider){
return new Nullable<Vector2>(h.point);
}
}
return null;
}
}