2016-11-01 10 views
0

нужна помощь с помощью raycasting UI с мечтой. Поскольку есть только демо для gameObjects (кубы), я хочу знать, что могу обрабатывать элементы пользовательского интерфейса. Элементы пользовательского интерфейса должны реагировать как обычно, я имею в виду подсвеченные и так далее. Посты в How to use Graphic Raycaster with WorldSpace UI? были полезными, но полностью.unity3d - raycasting world space UI

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

void Update() 
    { 
     Quaternion ori = GvrController.Orientation; 
     Vector3 vector = ori * Vector3.forward; 
     Debug.DrawRay(transform.position, vector * 100000, Color.green); 
     PointerEventData pointerData = new PointerEventData(null); 
     pointerData.position = vector; 
     Debug.Log(vector); 
     List<RaycastResult> results = new List<RaycastResult>(); 
     EventSystem.current.RaycastAll(pointerData, results); 
     if (results.Count > 0) 
     { 
      Debug.Log(results[0]); 
     } 
    } 

Canvas (World Space) и Button созданы как используемые и не модифицированные.

Благодарим за помощь!

ответ

0

В вашем случае я вижу две проблемы:

  • Я думаю, вы должны использовать PointerEventData pointerData = new PointerEventData(EventSystem.current); InstEd из PointerEventData pointerData = new PointerEventData(null);
  • Также PointerEventData.position является Vector2 и не Vector3: вы должны попробовать pointerData.position = new Vector2(Screen.width * 0.5f, Screen.height * 0.5f);

В качестве примечания стороны вы можете использовать graphicRaycaster.Raycast(pointerData, results);, где graphicRaycaster является общедоступным, и вы назначаете его GraphicRaycaster компонент из вас Холст.

+0

Спасибо @Kardux за советы. Но, к сожалению, это не сработает. 1. Как должно работать вещь с ** Vector2 ** и «Screen»? Мне не нужны размеры экрана, но ориентация от контроллера. 'vector' output (-0.5, 0.0, 0.9) и' pointerData.position' is (-0.5, 0.0) - может ли это работать? 2. Я добавил компонент ** GraphicRaycaster ** в родительский холст и использовал «public GraphicRaycaster graphicRaycaster», но не запись в журнал вообще ... любая другая идея? Нужен ли мне GUICamera? – fmielke

+0

@fmielke Мой плохой об объекте ** Vector2 **, включая размеры экрана: в моем случае я всегда использую середину «экрана» для raycast против пользовательского интерфейса (таким образом, пользователь просто смотрит на пользовательский интерфейс, чтобы активировать его). Выдавая значение ** Vector2 ** a ** Vector3 **, вы просто не учитываете значение _z_ (поэтому вы получаете (-0.5, 0.0)). В вашем случае я бы raycast обычно использовал «Physics.Raycast» против «стены-призрак», размещенной там, где находится ваш пользовательский интерфейс, а затем используйте «Camera.WorldToScreenPoint», чтобы получить экран _x_ и _y_ координаты, чтобы установить «pointerData.position». – Kardux

+0

Но не должно быть достаточно x и y? Мне действительно не нужно z, я думаю ... – fmielke

-1

По вашему вопросу raycasting world space UI, если вы используете google cardbard или daydream, вы должны попытаться подключить скрипт gvrgraphicphysics raycaster к холсту пользовательского интерфейса.