XRDirectInteractor - как определить какой объект доступен дл

Раздел, посвящённый Дополненной Реальности и Виртуальной Реальности

XRDirectInteractor - как определить какой объект доступен дл

Сообщение vovanich222 15 янв 2024, 21:10

Добрый день!
Уважаемые форумчане, подскажите чайнику, как определить ближайший объект к "рукам" с XRDirectInteractor, который будет взят при нажатии кнопки Grab на контроллере?

Я сделал что бы подсвечивался ближайший объект к "руке" с XRDirectInteractor на ней, но хоть и подсвечивается ближайший объект - в руки берется все равно не он... Как именно XRDirectInteractor определяет объект который должен быть взят? Какие то приоритеты у него что ли? Не могу понять и решить задачу...

Я составляю массив из объектов с тегом "Target", далее определяю ближайший из них объект к XRDirectInteractor в OnTriggerStay и меняю параметр у шейдера для подсветки. Но либо не ближайший объект определяется либо я вообще понять не могу как XRDirectInteractor все же решает какой объект будет взят? Мне надо что бы всего то подсвечивался корректный объект который и будет взят после нажатия кнопки захвата на контролере, но подсвечивается вес же некорректный, либо ели все таки подсвечивается ближайший, то почему берется контроллером другой объект, подскажите пожалуйста... Пример кода ниже.

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class OutlineNiarestTargetSelect : MonoBehaviour
{
    GameObject[] ArrayOfInteractiveObjects;
    GameObject NiarestInteractiveObject;

    void Start()
    {
        ArrayOfInteractiveObjects = GameObject.FindGameObjectsWithTag("Target");
    }

    void OnTriggerExit(Collider other)
    {
        other.gameObject.GetComponent<MeshRenderer>().materials[1].SetFloat("_Scale", 1.0f);
    }

    void OnTriggerStay(Collider other)
    {
        FindNiarestTarget().GetComponent<MeshRenderer>().materials[1].SetFloat("_Scale", 1.015f);
    }

    GameObject FindNiarestTarget()
    {
        float distance = Mathf.Infinity;
        Vector3 HandPosition = transform.position;
        foreach (GameObject go in ArrayOfInteractiveObjects)
        {
            Vector3 diff = go.transform.position - HandPosition;
            go.GetComponent<MeshRenderer>().materials[1].SetFloat("_Scale", 1.0f);
            float curDistance = diff.sqrMagnitude;
            if(curDistance < distance)
            {
                NiarestInteractiveObject = go;
                distance = curDistance;
            }
        }
        return NiarestInteractiveObject;
    }
}
 
vovanich222
UNец
 
Сообщения: 1
Зарегистрирован: 15 янв 2024, 21:08

Вернуться в AR / VR

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1