Добавить картинку и еще кое что в Vuforia

275
05 апреля 2017, 14:03

Всем привет. Я хочу сделать такую прогу: Чтобы при наведении на объект или qr метку, показывала интерфейс с данными об объекте. Делаю на unity c помощью vuforia.

И тут я застрял, как сделать так чтобы худ изначально была скрытой, а показывала только при распозновании объекта. И кнопка закрыть чтобы убрать худ.

Answer 1

Придется писать скрипт который будет следить за объектами под курсором. Причем если вы хотите чтобы объект сцены и UI придется писать разную реализацию. В первом случае вы проверяете через физику и коллайдеры на наличие скрипта со ссылкой на информацию которую требуется отображать, во втором проверяете наличие UI элемента с включенным RayCast Target.

Примерно вот так:

TipState GetTargetUI()
{
    if (!LastObjectUI.gameObject.activeInHierarchy)
    {
        LastObjectUI = null;
        return TipState.None;
    }
    return GetTarget(LastObjectUI);
}
TipState GetTargetCamera(Camera cam)
{
    // create the ray on the mouse position from camera
    Ray ray = cam.ScreenPointToRay(Input.mousePosition);
    RaycastHit hit;
    if (!Physics.Raycast(ray, out hit))
        return TipState.None;
    GameObject currentObject = hit.collider.gameObject;
    return GetTarget(currentObject);
}    
TipState GetTarget(GameObject fromObject)
{
    if (fromObject == null) return TipState.None;
    if (fromObject == LastObject) return TipState.Old;
    GameObject currentObject = fromObject;
    do
    {
        toolTip = currentObject.GetComponent<ToolTip>();
        if (toolTip != null)
        {
            LastObject = fromObject;
            TipObject = fromObject;
            Show();
            return TipState.New;
        }
        if (currentObject.transform.parent != null) 
            currentObject = currentObject.transform.parent.gameObject;
        else 
            currentObject = null;
    } while (currentObject != null);
    return TipState.None;
}
public void OnEnter(BaseEventData data)
{
    PointerEventData pData = data as PointerEventData;
    if (pData != null && pData.pointerCurrentRaycast.gameObject)
    {
        LastObjectUI = pData.pointerCurrentRaycast.gameObject;
    }
}
public void OnExit(BaseEventData data)
{
    PointerEventData pData = data as PointerEventData;
    if (pData != null && pData.pointerEnter)
    {
        LastObjectUI = null;
        Hide();
    }
}

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

READ ALSO
Как обновить содержимое фрагмента в viewpager?

Как обновить содержимое фрагмента в viewpager?

У меня 2 фрагмента в viewpagerВо фрагментах recycleview

290
Как выгрузить файл с помощью AndroidDevice Monitor?

Как выгрузить файл с помощью AndroidDevice Monitor?

Выгружаю файл из виртус-ва в GenyMotion

370
Может с shell script возратить (return) какое-то значение?

Может с shell script возратить (return) какое-то значение?

Я новичок вsh, но я понял, что нет возможности возвращать значение таким образом, как в Java

224
Как расшифровать строку правильно

Как расшифровать строку правильно

Я вот не сильно разбираюсь в шифрованииЕсли у кого то есть предположения, как мне помочь, говорите))

338