ソースコード
public static Vector2 GetRayExitThroughCircle( CircleCollider2D circleCollider, Vector2 entryPoint, Vector2 direction )
{
Vector2 colliderCenter = circleCollider.transform.position;
Vector2 directionToCenter = colliderCenter - entryPoint;
float angleTowardsCenter = Vector2.Angle( direction, directionToCenter );
float angleTowardsExitPoint = 180 - ( angleTowardsCenter + angleTowardsCenter );
if ( Vector3.Cross( direction, directionToCenter ).z < 0 )
{
angleTowardsExitPoint *= -1;
}
Vector2 directionToExitPoint = Quaternion.Euler( 0, 0, angleTowardsExitPoint ) * directionToCenter;
Vector2 exitPoint = colliderCenter + ( -directionToExitPoint.normalized * circleCollider.radius );
return exitPoint;
}
使用例
using UnityEngine;
public class Example : MonoBehaviour
{
public CircleCollider2D m_collider2D;
private void OnDrawGizmos()
{
var position = transform.position;
var direction = transform.up;
var distance = 1000;
var hit = Physics2D.Raycast( position, direction, distance );
var point = GetRayExitThroughCircle( m_collider2D, hit.point, direction * distance );
Gizmos.color = Color.blue;
Gizmos.DrawRay( position, direction * distance );
Gizmos.color = Color.red;
Gizmos.DrawSphere( point, 0.2f );
}
...
参考サイト様