Как я могу заставить объекты привязываться к сетке? - PullRequest
0 голосов
/ 28 ноября 2018

Я создаю приложение для настольных игр, используя ARCore и Sceneform.Мои 3D-модели должны привязываться к сетке, а не располагаться где-либо.Представьте себе шахматную доску.
Как мне это сделать?

Я скопировал классы TransformableNode и TranslationController, чтобы изменить их.В TranslationController координаты задаются в переменной desiredLocalPosition с использованием Vector3.
Насколько я понимаю, я мог бы сделать целочисленное деление координат, чтобы мои объекты могли прыгать только на определенное расстояние.

this.desiredLocalPosition = new Vector3(pose.tx(), pose.ty(), pose.tz());

float X = (int) (pose.tx()/0.05f) * 0.05f;
float Y = pose.ty(); //i don't care about vertical
float Z = (int) (pose.tz()/0.05f) * 0.05f;

this.desiredLocalPosition.set(X,Y,Z);

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

Поскольку я студент, яхотя в значительной степени нубский программистУ кого-нибудь есть идея?

1 Ответ

0 голосов
/ 05 декабря 2018

Похоже, ваша проблема в том, что вы изменили метод TranslationController#onContinueTransformation(), но не метод TranslationController#onEndTransformation().

Метод onEndTransformation() отвечает за установку нового якоря на основе последнего HitResult обнаружено в конце жеста перетаскивания.Заблокированная позиция, которую вы устанавливаете при входе в onContinueTransformation(), переопределяется этим новым якорем.

Простое удаление логики в методе onEndTransformation() активирует искомое поведение.

Ответ, относящийся к sceneform-ux:1.5.1.

PS: Более подходящее решение для игры в настольную игру, которую вы пытаетесь создать, может состоять в том, чтобы создать доску в виде сетки Node s и прикрепитьигровой предмет до ближайшего подходящего Node до lastArHitResult в onEndTransformation().Это дало бы вам гибкость в определении любого желаемого пространства на плате и повторного использования одного и того же пользовательского TransformationController, а также создавало бы лучший пользовательский опыт «привязки к пространству», который происходит только в конце движения при перетаскивании.

...