31 lines
1.1 KiB
C#
31 lines
1.1 KiB
C#
using UnityEngine;
|
|
|
|
public class ViewAlignmentDetector
|
|
{
|
|
private readonly Transform _observer;
|
|
private readonly Transform _target;
|
|
private readonly Transform _viewPoint;
|
|
|
|
public float positionErrorMargin = 1.0f;
|
|
public float viewErrorMargin = 0.1f;
|
|
|
|
public ViewAlignmentDetector(Transform observer, Transform target, Transform viewPoint)
|
|
{
|
|
_observer = observer;
|
|
_target = target;
|
|
_viewPoint = viewPoint;
|
|
}
|
|
|
|
public bool IsAligned()
|
|
{
|
|
Vector3 directionToTarget = (_target.position - _observer.position).normalized;
|
|
Vector3 directionToViewPoint = (_viewPoint.position - _observer.position).normalized;
|
|
float distanceToTarget = Vector3.Distance(_observer.position, _target.position);
|
|
float distanceToViewPoint = Vector3.Distance(_observer.position, _viewPoint.position);
|
|
|
|
bool isDirectionAligned = Vector3.Dot(directionToTarget, directionToViewPoint) >= (1 - viewErrorMargin);
|
|
bool isDistanceAligned = Mathf.Abs(distanceToTarget - distanceToViewPoint) <= positionErrorMargin;
|
|
|
|
return isDirectionAligned && isDistanceAligned;
|
|
}
|
|
} |