Есть несколько вещей, которые можно изменить в вашем коде.
1-й - вы выполняете кодовое действие после щелчка вместо того, чтобы просто выполнить код в обратном вызове после выборапроизошло. Вы регистрируете действие выбора (технически пользовательский щелчок) справа на первом кадре, но только если мышь была найдена в нужном месте в нужный момент. Я предполагаю, что это не сработало каждый раз (если ваша сцена не покрыта сетками :-))
2nd - вы меняете положение камеры вместо того, чтобы менять положение, на которое она смотрит. Изменение положения камеры не приведет к тому, что вы хотите (чтобы увидеть выбранную сетку), оно переместит камеру в новое положение, все еще фокусируясь на старом положении.
Есть несколько способов решитьэто. Во-первых, это:
scene.onPointerDown = function(evt, pickInfo) {
if(pickInfo.hit) {
camera.focusOn([pickInfo.pickedMesh], true);
}
}
Камера ArcRotate предоставляет функцию focusOn, которая фокусируется на группе сеток, одновременно фиксируя ориентацию камеры. это очень полезноВы можете увидеть демо здесь:
https://playground.babylonjs.com/#A1210C#51
Другое решение было бы использовать функцию setTarget:
https://playground.babylonjs.com/#A1210C#52
, которая работаетнемного по-другому (обратите внимание на изменение ориентации камеры).
Другое дело - используйте события указателя, встроенные в Babylon, так как они избавляют вас от дополнительного вызова для выбора сцены. указатель вниз выполняется с интегрированной в функцию pickinfo, так что вы можете получить информацию о выборе текущего указателя вниз / вверх / переместить каждый кадр.
**** РЕДАКТИРОВАТЬ ****
После нового комментария - поскольку вы хотите анимировать значения, все, что вам нужно сделать, это сохранить текущие значения, рассчитать новые,и анимировать значения, используя внутреннюю систему анимации (документация здесь - https://doc.babylonjs.com/babylon101/animations#basic-animation). Есть много способов добиться этого, я взял старую функцию и модернизировал ее: -)
Вот демо -https://playground.babylonjs.com/#A1210C#53