Nano Hash - криптовалюты, майнинг, программирование

Unity 3d OnClick, чтобы игнорировать определенный слой (или активировать только определенный слой).

Есть ли способ заставить стандартное единство OnClick даже срабатывать, игнорируя определенные слои? Например, у меня есть армия солдат на слое «Юниты» и земля на слое «Земля». Когда я нажимаю на солдата, он выделяется. Затем я нажимаю на землю, солдат движется туда. Но если я нажму на землю, скрытую другим солдатом, она стреляет даже по этому солдату, а не по земле, потому что он ближе к камере. Могу ли я игнорировать слой «Единицы», не переписывая весь щелчок мыши, даже обработку и использование моего пользовательского raycast?

РЕДАКТИРОВАТЬ: код здесь, не думайте, что он покажет что-нибудь, кроме

static public void Interact2(Cell target) //this fires from OnClick
    {
        if (GameLogic.Mode == mode.move)
        {
            grid.MoveTo(target);
            if (selected.actionsAvilable[action.move])
                selected.actionsAvilable[action.move] = false;
            else
                selected.actionsAvilable[action.standard] = false;
            GameLogic.Mode = GameLogic.mode.normal;
        }
    }

БОЛЬШЕ РЕДАКТИРОВАТЬ:

void OnMouseDown() {
        if (!UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject())
            GameLogic.Interact2(this);
    }

  • Как выглядит ваш текущий код? 25.03.2017
  • не могу привыкнуть к RETURN, просто отправляя комментарий вместо получения новой строки 25.03.2017
  • Вы можете отредактировать свой вопрос и добавить туда этот код, а также языковой тег. 25.03.2017
  • На самом деле я спрашивал текущий код, который вы используете для обнаружения щелчка по 3D-объекту. 25.03.2017
  • @Программист, он не использует никакого специального кода, все это обрабатывается Unity. 25.03.2017
  • @ Arshia001 Я знаю. В Unity есть более 3 способов обнаружения кликов по объекту. Я хочу увидеть, какой метод использует OP, чтобы мы не предоставили решение, которое OP уже использует и с которым возникают проблемы. 25.03.2017
  • Мои деньги в системе событий. 25.03.2017
  • Да, его EventSystem 25.03.2017
  • В настоящее время у него есть !UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject(), чтобы игнорировать щелчки по солдатам, чтобы они не были выбраны до того, как выбранный переместится. 25.03.2017

Ответы:


1

Компоненты PhysicsRaycaster/PhysicsRaycaster2D/GraphicsRaycaster имеют свойство «Маска событий», позволяющее ограничить слои, на которые они транслируют лучи. Вы должны обновить это свойство из кода, когда хотите заблокировать/разрешить определенные слои.

25.03.2017
  • Могу ли я изменить это свойство для стандартного raycast OnClick? Если да, то где? 25.03.2017
  • Предполагая, что ваш физический рейкастер находится на основной камере (как и должно быть): Camera.main.GetComponent<UnityEngine.EventSystems.PhysicsRaycaster>().eventMask = desired_layer_mask 25.03.2017
  • я использую MonoBehaviour.OnMouseDown, так что, я не думаю, что PhysicsRaycaster. У меня есть Graphics для пользовательского интерфейса. 25.03.2017
  • Ой. Это нехорошо. Используйте систему событий согласно docs.unity3d.com/Manual/SupportedEvents.html . Вы не можете делать то, что хотите, с помощью onmousedown. 26.03.2017
  • Спасибо за чаевые. У меня была идея временно отключить коллайдеры на всех юнитах (в качестве костыля), но это не похоже на производительность. 28.03.2017
  • Не похоже на это, потому что это совсем не удобно для производительности. Как правило, вы должны стараться использовать систему событий как можно чаще, она невероятно многофункциональна и удобна в использовании по стандартам Unity. В любом случае, если это решило вашу проблему, щелкните зеленую галочку, чтобы отметить это как ответ, чтобы другим с такой же проблемой было легче найти его. 29.03.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..