protected void HandlePreviewViewRange2D() { Vector2 oldPos = Vector2.zero; Vector2 firstPos = Vector2.zero; for (int i = 0; i < master.E_PreviewViewRangeSteps; i++) { float curAngle = (float)i / master.E_PreviewViewRangeSteps * Mathf.PI * 2f; Vector2 localVector = new Vector2(Mathf.Cos(curAngle), Mathf.Sin(curAngle)); curAngle *= Mathf.Rad2Deg; float deltaAngle = Mathf.Abs(Mathf.DeltaAngle(curAngle, 0f)); if (_data.complexDetection == false || deltaAngle <= _data.targetForwardDetectionAngle * 0.5f) { localVector *= _data.targetForwardDetectionDistance; } else if (deltaAngle <= (_data.targetForwardDetectionAngle + _data.targetDetectionTransitionAngle) * 0.5f) { float progress = (deltaAngle - (_data.targetForwardDetectionAngle * 0.5f)) / (_data.targetDetectionTransitionAngle * 0.5f); localVector *= Mathf.Lerp(_data.targetForwardDetectionDistance, _data.targetBackwardDetectionDistance, Mathf.Pow(progress, _data.targetDetectionTransitionPow)); } else { localVector *= _data.targetBackwardDetectionDistance; } Vector3 finalPos; if (_data.complexDetection == false) { finalPos = Position2D + localVector; } else { finalPos = Position2D.ToV3() + PinouUtils.Transform.TransformVector(localVector.ToV3(localVector.x).SetX(0f), Quaternion.LookRotation(Forward, Vector3.up)); } if (i > 0) { Gizmos.DrawLine(finalPos, oldPos); } else { firstPos = finalPos; } oldPos = finalPos; } Gizmos.DrawLine(firstPos, oldPos); if (master.E_rangeTester != null) { Gizmos.color = IsEntityInViewRange(master.E_rangeTester) ? Color.green : Color.red; Gizmos.DrawSphere(master.E_rangeTester.Position, 0.2f); } }