Как применить скрипт Unity к нескольким слоям? - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь найти способ выбора объектов в виртуальной реальности.

При нажатии определенного объекта по определенному коду запускается сообщение о том, что делать - например, выходить из приложения.

Прямо сейчас, код запускается, чтобы увидеть, есть ли у объекта слой 'Interactable' , но как мне настроить мой код для проверки наличия большего количества слоев?

В кодеЯ уже пытался настроить проверку для большего количества масок, чем просто маска 'Interactable' .

private void ProcessTouchpadDown()
    {
        if (!m_CurrentObject)
            return;

        Interactable interactable = m_CurrentObject.GetComponent<Interactable>();
        interactable.Pressed();
    }
}

После кода выше, код ниже будет работать.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Interactable : MonoBehaviour
{
    public void Pressed()
    {
        //This code will run when an object with the 'interactable' layer is clicked. 
    }
}

Я ожидаю, что когда я добавлю еще одну маску слоя, я могу просто добавить ее к ProcessTouchDown и сделатькопия interactable.pressed(); для применения различных функций при нажатии объекта.

1 Ответ

0 голосов
/ 24 октября 2019

Маски слоя в Unity - это битовые флаги . Вы можете использовать это в своих интересах и перебирать слои, которые вы хотите проверить, сдвигая их по битам.

    LayerMask layer = LayerMask.GetMask("Layer A", "Layer B", "Layer C");
    Interactable interactable = currentObject.GetComponent<Interactable>();
    for (int i = 0; i < 3; i++)
    {
        if (layer == (layer | (1 << interactable.gameObject.layer)))
            interactable.Pressed();
    }
...