Двигать объекты телефоном
Я хочу реализовать следующее: некоторому объекту (допустим, кубу) вешается скрипт. Когда игра запускается, изначальные положение и ориентация куба ассоциируются с изначальными положением и ориентацией телефона, который подключен через unity remote. Двигая телефон в реальной жизни на некоторый вектор v, я хочу, чтобы куб также двинулся в игровом мире на этот вектор. (Короче, аля контроллер Oculus Touch) В голову сразу пришли слова по типу акселерометр и гироскоп.
Пользуя код из документации unity, я пришёл к выводу, что я управляю кубом не перемещая телефон, а наклоняя его. Это мне не подходит. Как я могу реализовать мою идею?
Код из документации:
using UnityEngine;
public class Example : MonoBehaviour
{
// Move object using accelerometer
float speed = 10.0f;
void Update()
{
Vector3 dir = Vector3.zero;
// we assume that device is held parallel to the ground
// and Home button is in the right hand
// remap device acceleration axis to game coordinates:
// 1) XY plane of the device is mapped onto XZ plane
// 2) rotated 90 degrees around Y axis
dir.x = -Input.acceleration.y;
dir.z = Input.acceleration.x;
// clamp acceleration vector to unit sphere
if (dir.sqrMagnitude > 1)
dir.Normalize();
// Make it move 10 meters per second instead of 10 meters per frame...
dir *= Time.deltaTime;
// Move object
transform.Translate(dir * speed);
}
}
Ответы (1 шт):
детального ответа тебе вряд ли кто даст.
Но если в двух словах - ты можешь ориентироватся или как ты сам понял по гироскопу - или по камере(AR) или комбинированно - и то и другое.
Только тебе нужно привязыватся не к прямым значениям гироскопа которые дает тебе юнити, а расчитывать математически то что тебе нужно.
Гироскоп тебе дает ускорение, на что тебе намекает слово acceleration. В твоем случае тебе нужно вспоминать физику за 7ой класс и высчитывать вектор перемещения на каждом FixedUpdate по значениям ускорения по каждому из векторов имея входные данные как ускорение. Гугли по "Равноускоренное движение по прямой растояние". Формально у тебя между каждым FixedUpdate будет такой расчет.
Задачу с камерой ты не потянешь. Как и комбинированную.
Но есть еще один нюанс - ты не отличишь движение для передвижения куба от просто движения телефоном. С этим нужно что-то придумывать. Вполне вероятно что тебе будет полезно почитать вот эту ссылочку: https://ru.stackoverflow.com/questions/572837/Определение-движения-телефона-в-пространстве/574156#574156
Вобщем, развлекайся.