#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);