*
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class CircleSurface : OpticalSurface2D
|
||||
{
|
||||
|
||||
public float Radius;
|
||||
public int ViewSamples = 15;
|
||||
|
||||
void Start()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void OnValidate() {
|
||||
Shape = PointsToLines(GetGeometry(), true);
|
||||
}
|
||||
|
||||
private Vector2[] GetGeometry() {
|
||||
Vector2[] result = new Vector2[ViewSamples];
|
||||
float da = Mathf.PI * 2 / ViewSamples;
|
||||
for (int i = 0; i < ViewSamples; i++) {
|
||||
float angle = da * i;
|
||||
result[i] = new Vector2(Mathf.Cos(angle) * Radius, Mathf.Sin(angle) * Radius);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public override bool Raycast(Ray2D ray, ref RaycastMath.RaycastResult2D result) {
|
||||
var localSpaceRay = new Ray2D( transform.InverseTransformPoint(ray.origin), transform.InverseTransformVector(ray.direction).normalized);
|
||||
if (RaycastMath.RaycastCircle(localSpaceRay, Radius, ref result)) {
|
||||
result.Point = transform.TransformPoint(result.Point);
|
||||
result.Normal = transform.worldToLocalMatrix.MultiplyVector(result.Normal).normalized;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user