AmbushedRaccoon

Паркур и Unity - часть 1: class ParkourObstacle

May 31st, 2020
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.06 KB | None | 0 0
  1. public class ParkourObstacle
  2. {
  3.     //Верхняя Грань
  4.     private Wall _floor;
  5.  
  6.     //Стены
  7.     private Wall[] _walls;
  8.     private BoxCollider _collider;
  9.  
  10.     //Пытаемся определить к какой стене относится точка в пространстве
  11.     //Если таких стен нет
  12.     //Возвращаем false
  13.     public bool TryGetWall(Vector3 point, ref Wall wall)
  14.     {
  15.        
  16.         for (int i = 0; i < _walls.Length; i++)
  17.         {
  18.             //Составляем плоскость из трёх точек стены
  19.             //Если ближайшая точка на плоскости совпадает с переданной нами точкой
  20.             //Мы сюда передаём точки только принадлежащие BoxCollider
  21.             //Так что такой проверки достаточно
  22.             Plane wallPlane = new Plane(_walls[i].GetPoint(0), _walls[i].GetPoint(1), _walls[i].GetPoint(2));
  23.             if (wallPlane.ClosestPointOnPlane(point) == point)
  24.             {
  25.                 wall = _walls[i];
  26.                 return true;
  27.             }
  28.         }
  29.         return false;
  30.     }
  31.  
  32.     public struct Wall
  33.     {
  34.         //Не получилось создать массив ибо struct - это тип-значение
  35.         //А массив - это тип-ссылка
  36.         private Vector3 _point0;
  37.         private Vector3 _point1;
  38.         private Vector3 _point2;
  39.         private Vector3 _point3;
  40.         private const int _pointsCount = 4;
  41.  
  42.         //Метод для удобного получения точек стены
  43.         public Vector3 GetPoint(int index)
  44.         {
  45.             switch (index)
  46.             {
  47.                 case 0: return _point0;
  48.                 case 1: return _point1;
  49.                 case 2: return _point2;
  50.                 case 3: return _point3;
  51.                 default: throw new System.Exception("Wall::GetPoint index out of range");
  52.             }
  53.         }
  54.     }
  55. }
Add Comment
Please, Sign In to add comment