Unity — бережливое касание перемещает объекты по оси z вместо y?

#c# #unity3d #game-physics

#c# #unity-игровой движок #игра-физика

Вопрос:

Хорошо, я использую Lean Touch из хранилища ресурсов и могу перемещать объекты в направлениях x и y. Объекты имеют твердые тела, подверженные гравитации, и поэтому будут падать на плоскость. Когда они находятся на плоскости (как в AR), мне нужно вертикальное движение пальцем, чтобы переместить объект по оси z.

Я не знаю, как это сделать. Вот где происходит преобразование:

 //REAL TRANSLATE
        protected virtual void Translate(Vector2 screenDelta)
        {
            // Make sure the camera exists
            var camera = LeanTouch.GetCamera(Camera, gameObject);

            if (camera != null)
            {
                // Screen position of the transform
                var screenPoint = camera.WorldToScreenPoint(transform.position);

                // Add the deltaPosition
                screenPoint  = (Vector3)screenDelta;

                transform.position = camera.ScreenToWorldPoint(screenPoint);
  

Это в LeanTranslate.cs. Как я могу переместить объект по оси z вместо y (в идеале, ЕСЛИ он соприкасается с плоскостью)?

ТЕПЕРЬ:

   if(transform.GetComponent<ObjectController>() != null amp;amp; transform.GetComponent<ObjectController>().isOnPlane)
                {

                    Vector3 newDelta = new Vector3(screenDelta.x, 0, screenDelta.y*0.05f);
                    screenPoint  = newDelta;

                } else {
                    screenPoint  = (Vector3)screenDelta;
                }


                transform.position = camera.ScreenToWorldPoint(screenPoint);
  

ОШИБКА:

введите описание изображения здесь

Ответ №1:

Прямо сейчас код просто преобразует переменную screenDelta в Вектор3. Это примерно эквивалентно «новому вектору 3(screenDelta.x, screenDelta.y, 0)», который оставляет ось z обнуленной.

Итак, вам просто нужно заменить эту строку пользовательской, которая присваивает дельту правильным осям.

Комментарии:

1. Спасибо, моя единственная проблема в том, что теперь он перемещается по оси z В НАПРАВЛЕНИИ камеры, y не остается неизменным (объект должен оставаться на одном уровне с плоскостью, вместо этого он устремляется к камере). Смотрите мою правку

2. Текущий код пытается спроецировать положение из пространства экрана в мировое пространство. Звучит так, будто вы просто хотите работать в мировом пространстве. Я бы удалил последнюю строку и просто переместил объект относительно дельты в положении мыши, заменив z на y .

3. То есть вы имеете в виду преобразование.position = ScreenPoint; ? Это дало мне бесконечную ошибку (опубликовано выше)

4. Нет, вам нужно будет отслеживать дельту мыши, смещение на кадр и преобразовывать это в мировые координаты, которые будут добавлены к transform.position таким образом, чтобы это было удобно в вашей игре.

5. Что-то вроде transform.position = новый Вектор3(screenDelta.x, 0, screenDelta.y);