Grüße stecke gerade seit einigen Stunden fest ohne vorwärts zu kommen bei dem versuch den Fast Voxel Travers Algorithm zu implementieren.
Jemand eine Idee was hier falsch läuft am liebsten wäre mir ja ein Hinwies und keine Lösung.
Quellen
http://theshoemaker.de/2016/02/ray-casting-in-2d-grids/
http://www.cse.yorku.ca/~amana/research/grid.pdf
Code:
public bool RayHitWall(Vector3 startPosition, Vector3 endPosition,int[,] map)
{
float angle = Quaternion.FromToRotation(Vector3.forward,endPosition - startPosition).eulerAngles.y;
float distance = 0.0f;
Vector2 direction = new Vector2(Mathf.Cos(angle * 0.01745329f),Mathf.Sin(angle * 0.01745329f));
Vector2 currentPosition = new Vector2(startPosition.x,startPosition.z);
Vector2 directionNormalized = new Vector2(direction.x > 0 ? 1 : -1,direction.y > 0 ? 1 : -1);
Vector2 offset = Vector2.zero;
Vector2Int targetTile = new Vector2Int(Mathf.CeilToInt(endPosition.x),Mathf.CeilToInt(endPosition.z));
Vector2Int tilePosition = Vector2Int.zero;
while(tilePosition.x != targetTile.x && tilePosition.y != targetTile.y)
{
tilePosition.x = Mathf.FloorToInt(currentPosition.x);
tilePosition.y = Mathf.FloorToInt(currentPosition.y);
if(!IsInsideBounds(tilePosition,map.GetLength(0),map.GetLength(1)) || map[tilePosition.x,tilePosition.y] == 1)
return true;
offset.x = ((float)tilePosition.x + directionNormalized.x - currentPosition.x) / direction.x;
offset.y = ((float)tilePosition.y + directionNormalized.y - currentPosition.y) / direction.y;
if(offset.x < offset.y)
distance += offset.x + 0.0001f;
else
distance += offset.y + 0.0001f;
currentPosition.x = startPosition.x + direction.x * distance;
currentPosition.y = startPosition.y + direction.y * distance;
}
return false;
}
Jemand eine Idee was hier falsch läuft am liebsten wäre mir ja ein Hinwies und keine Lösung.
Quellen
http://theshoemaker.de/2016/02/ray-casting-in-2d-grids/
http://www.cse.yorku.ca/~amana/research/grid.pdf





