#сниппет #threejs #js #webgl #deviceorientation
Так как на эту задачу было потрачено больше 5-ти минут то положу сюда сниппет по тому, как правильно забирать данные с гироскопа (тут нет части с тем, как правильно забирать разрешения на ios) Но по разрешениям:
1) DeviceOrientationEvent не работает без https
2) DeviceOrientationEvent не работает в iframe
3) DeviceOrientationEvent можно запросить только по действию пользователя, типа клика на кнопку
Пересчёт кватерниона ориентации устройства:
Так как на эту задачу было потрачено больше 5-ти минут то положу сюда сниппет по тому, как правильно забирать данные с гироскопа (тут нет части с тем, как правильно забирать разрешения на ios) Но по разрешениям:
1) DeviceOrientationEvent не работает без https
2) DeviceOrientationEvent не работает в iframe
3) DeviceOrientationEvent можно запросить только по действию пользователя, типа клика на кнопку
Пересчёт кватерниона ориентации устройства:
function getQuaternion( alpha, beta, gamma ) {
let degtorad = Math.PI / 180;
let _x = beta ? beta * degtorad : 0;
let _y = gamma ? gamma * degtorad : 0;
let _z = alpha ? alpha * degtorad : 0;
let cX = Math.cos( _x/2 );
let cY = Math.cos( _y/2 );
let cZ = Math.cos( _z/2 );
let sX = Math.sin( _x/2 );
let sY = Math.sin( _y/2 );
let sZ = Math.sin( _z/2 );
let w = cX * cY * cZ - sX * sY * sZ;
let x = sX * cY * cZ - cX * sY * sZ;
let y = cX * sY * cZ + sX * cY * sZ;
let z = cX * cY * sZ + sX * sY * cZ;
return [ w, x, y, z ];
}
Применение в three.js:window.addEventListener('deviceorientation',(event) => {
let threeQuaternion = new Matrix3();
let quat = getQuaternion(event.alpha, event.beta, event.gamma);
threeQuaternion.w = quat[0];
threeQuaternion.x = quat[1];
threeQuaternion.y = quat[2];
threeQuaternion.z = quat[3];
this.camera.setRotationFromQuaternion(threeQuaternion);
this.camera.rotation.x -= Math.PI / 2;
});
Важно добавить к повороту по X пи пополам (90 градусов в радианах), так как по умолчанию ориентация устройства (по крайней мере на ios) будет смотреть вперёд, когда камера телефона смотрит внизShrink Your Build: отключаем физику в Unity 6.3
https://medium.com/@lemapp09/adaptive-development-shrink-your-build-a5d85798e14c
В Unity 6.3 появился официальный способ полностью отключить физический движок при сборке — PhysX или Box2D. Раньше это тоже было возможно через удаление пакетов в Package Manager, но требовало ручной работы и могло аукнуться ошибками компиляции.
Теперь в Project Settings > Player > Global Settings > Optimization есть параметр Physics Runtime. Ставишь None — и при следующей сборке физическая библиотека вырезается полностью. Несколько мегабайт долой, FixedUpdate больше не тикает, буферы под коллизии не выделяются. Для WebGL и мобилок — ощутимо.
Если физика не нужна, взамен OnCollisionEnter и Raycast используем обычную математику. Проверка расстояния через Vector3.Distance или sqrMagnitude вместо коллайдеров — для UI-игр, карточных и головоломок это и быстрее, и честнее.
#unity #optimization #webgl #gamedev
https://medium.com/@lemapp09/adaptive-development-shrink-your-build-a5d85798e14c
В Unity 6.3 появился официальный способ полностью отключить физический движок при сборке — PhysX или Box2D. Раньше это тоже было возможно через удаление пакетов в Package Manager, но требовало ручной работы и могло аукнуться ошибками компиляции.
Теперь в Project Settings > Player > Global Settings > Optimization есть параметр Physics Runtime. Ставишь None — и при следующей сборке физическая библиотека вырезается полностью. Несколько мегабайт долой, FixedUpdate больше не тикает, буферы под коллизии не выделяются. Для WebGL и мобилок — ощутимо.
Если физика не нужна, взамен OnCollisionEnter и Raycast используем обычную математику. Проверка расстояния через Vector3.Distance или sqrMagnitude вместо коллайдеров — для UI-игр, карточных и головоломок это и быстрее, и честнее.
#unity #optimization #webgl #gamedev
Medium
Adaptive Development — Shrink Your Build
Disabling the Physics Backend in Unity 6
🔥17