Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class ParkourObstacle
- {
- //Верхняя Грань
- private Wall _floor;
- //Стены
- private Wall[] _walls;
- private BoxCollider _collider;
- //Пытаемся определить к какой стене относится точка в пространстве
- //Если таких стен нет
- //Возвращаем false
- public bool TryGetWall(Vector3 point, ref Wall wall)
- {
- for (int i = 0; i < _walls.Length; i++)
- {
- //Составляем плоскость из трёх точек стены
- //Если ближайшая точка на плоскости совпадает с переданной нами точкой
- //Мы сюда передаём точки только принадлежащие BoxCollider
- //Так что такой проверки достаточно
- Plane wallPlane = new Plane(_walls[i].GetPoint(0), _walls[i].GetPoint(1), _walls[i].GetPoint(2));
- if (wallPlane.ClosestPointOnPlane(point) == point)
- {
- wall = _walls[i];
- return true;
- }
- }
- return false;
- }
- public struct Wall
- {
- //Не получилось создать массив ибо struct - это тип-значение
- //А массив - это тип-ссылка
- private Vector3 _point0;
- private Vector3 _point1;
- private Vector3 _point2;
- private Vector3 _point3;
- private const int _pointsCount = 4;
- //Метод для удобного получения точек стены
- public Vector3 GetPoint(int index)
- {
- switch (index)
- {
- case 0: return _point0;
- case 1: return _point1;
- case 2: return _point2;
- case 3: return _point3;
- default: throw new System.Exception("Wall::GetPoint index out of range");
- }
- }
- }
- }
Add Comment
Please, Sign In to add comment