Skip to content

Расширяет поведение компонента TopCamera методами, которые рейкастят нажатие под курсором мыши и определяют для чего пригодно та или инач точка в сцене.

namespace Tac.Camera
{
    public partial class TopCamera
    {
        public LayerMask TerrainLayer; // Слой поверхности 
        public LayerMask BuildingsLayer; // Слой строений
        public EventSystem EventSystem; // Нужно задать в редакторе Unity, используется для определения находится ли курсор над UI
        public float MaxHeight = 1000; // Максимальная высота с которой начинается рейкаст
        public Dictionary<string, bool> MoveError; // Словарь флагов, какие ошибки произошли 

        public bool IsUsingUI() // используется для определения находится ли курсор над UI
        public GameObject GetBuilding(Vector2 touch) // Возвращает объект на слое строений в точке нажатия мышью
        public (Vector3, GameObject) GetTerrain(Vector2 touch) //Возвращает координаты и объект с компонентом Item2 на слое поверхности в точке нажатия мышью

    // Определяет разрешено ли строить в точке нажатия мышью (логику поведения см. ниже)
        public (Vector3, GameObject) GetAllowBuildPoint(Vector2 touch, List<Bounds> argBounds)
        void OnDrawGizmos() // в режиме редактора Unity показывает зелеными линиями направление лучей рейкаста (debugRays) и точку цель (debugPoint)
    }
}

GetAllowBuildPoint

Осуществляет рейкаст на поверхность (TerrainLayer), если находит объект на котором можно строить, а сам объект, который строится имеет колайдеры (argBounds - размеры колайдеров) происходит проверка пересечений. Каждый колайдер не должен пересекаться с другими объектами на слое строений (BuildingsLayer). Допустимо в качестве TerrainLayer использовать не только непосредственно слой поверхностей, но и слой строений. Тогда более сложными проверками занимается компонент ItemBuild с помощью ItemCollision.