Я думаю, вы на правильном пути - вы просто неправильно поняли цикл обновления. В одном обратном вызове OnMouseDrag ваш код выглядит так, как будто он пытается увидеть разницу между позициями мыши, но они будут иметь одинаковое значение:
Проблема
startX = mousePosition.x;
// [...]
scale.x = startSize + (Input.mousePosition.x - startX) * sizingFactor;
это дает startSize + (x - x) * y
, что совпадает с startSize + 0
, что, конечно, совпадает с startSize
, что означает отсутствие изменений.
Решение
Вам необходимо различать мышиную позицию между кадрами , то есть между OnMouseDrag()
обратными вызовами:
Vector2 prevMousePosition;
void OnMouseDrag()
{
Vector2 mousePosition = Input.mousePosition;
if (Input.GetMouseButton(0))
{
transform.position = Camera.main.ScreenToWorldPoint(mousePosition);
Vector3 scale = mainObject.transform.localScale;
scale.x = scale.x * (mousePosition.x - prevMousePosition.x) * sizingFactor;
scale.y = scale.y * (mousePosition.y - prevMousePosition.y) * sizingFactor;
mainObject.transform.localScale = scale;
}
prevMousePosition = mousePosition;
}
Так что в основном этот код выполняет 2 вещи:
- Установите позицию этого объекта так, чтобы вы удерживали нажатой левую кнопку мыши (я оставил этот код как есть, но уменьшил его до 1 строки кода,
- Измените масштаб mainObject, сравнив позицию мыши предыдущего кадра с позицией этого кадра, измененную с помощью sizingFactor.
В вашем коде вы также пытаетесь управлять, когда мышь перемещается по оси Z. Как вы собираетесь перемещать мышь в третьем измерении на 2d плоскости, я не знаю - поэтому я убрал это :)
Я также воспользовался возможностью, чтобы сделать код максимально простым и легким для чтения. Мои извинения, если я удалил что-то, что было необходимо, но я думаю, что большинство строк кода устарели.
Я не пробовал этот код, пожалуйста, дайте мне знать, если он не компилируется или работает должным образом.