нужна помощь с помощью 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 созданы как используемые и не модифицированные.
Благодарим за помощь!
Спасибо @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
@fmielke Мой плохой об объекте ** Vector2 **, включая размеры экрана: в моем случае я всегда использую середину «экрана» для raycast против пользовательского интерфейса (таким образом, пользователь просто смотрит на пользовательский интерфейс, чтобы активировать его). Выдавая значение ** Vector2 ** a ** Vector3 **, вы просто не учитываете значение _z_ (поэтому вы получаете (-0.5, 0.0)). В вашем случае я бы raycast обычно использовал «Physics.Raycast» против «стены-призрак», размещенной там, где находится ваш пользовательский интерфейс, а затем используйте «Camera.WorldToScreenPoint», чтобы получить экран _x_ и _y_ координаты, чтобы установить «pointerData.position». – Kardux
Но не должно быть достаточно x и y? Мне действительно не нужно z, я думаю ... – fmielke