Приведенный ниже скрипт отвечает за вращение и масштабирование (регулировку преобразования камер) основной камеры, поворот работает нормально, а масштабирование почти работает нормально.
После сборки на устройстве Android я могу плавно увеличивать и уменьшать масштаб одним движением, моя проблема заключается в том, когда я отпускаю сжатие.
если я полностью увеличиваю масштаб, затем отпускаю, а затем снова уменьшаю масштаб при небольшом движении камеры преобразуют снимки обратно в то, что, как я полагаю, является максимальным диапазоном камеры. Если у меня широкое касание, камера правильно медленно отдаляется обратно при положении моих пальцев.
Независимо от того, как пользователь сначала выполняет сжимающее движение, я бы хотел, чтобы камера всегда начинала «уменьшать масштаб» из исходного положения. Я предполагаю, что мне нужно сохранить положение в точке отпускания, а затем начать обратно оттуда, но я не могу разберись. любая помощь будет полезна, та.
void LateUpdate()
{
if (_target)
{
if (Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Moved)
{
// For single finger touch, detect movement for rotation
_velocityX += _xSpeed * Input.GetTouch(0).deltaPosition.x * 0.02f;
_velocityY += _ySpeed * Input.GetTouch(0).deltaPosition.y * 0.02f;
}
else if (Input.touchCount == 2)
{
// For two-finger touch, detect pinch for zooming
Touch touchZero = Input.GetTouch(0);
Touch touchOne = Input.GetTouch(1);
Vector2 touchDeltaPos = touchZero.position - touchOne.position;
float touchDeltaMag = touchDeltaPos.magnitude;
_pinchDistances[_pinchFramesIndex] = touchDeltaMag;
_pinchFramesIndex = (_pinchFramesIndex + 1) % _pinchFramesCount;
float avgPinchDistance = 0.0f;
foreach (float distance in _pinchDistances)
{
avgPinchDistance += distance;
}
avgPinchDistance /= _pinchFramesCount;
float deltaMagnitudeDiff = avgPinchDistance - _pinchDistances[(_pinchFramesIndex - 1 + _pinchFramesCount) % _pinchFramesCount];
_distance = Mathf.Clamp(_distance + deltaMagnitudeDiff * _pinchZoomSensitivity, _distanceMin, _distanceMax);
}
else if (Input.GetMouseButton(0))
{
// For mouse input
_velocityX += _xSpeed * Input.GetAxis("Mouse X") * _distance * 0.02f;
_velocityY += _ySpeed * Input.GetAxis("Mouse Y") * 0.02f;
}
_rotationYAxis += _velocityX;
_rotationXAxis -= _velocityY;
_rotationXAxis = ClampAngle(_rotationXAxis, _yMinLimit, _yMaxLimit);
Quaternion fromRotation = Quaternion.Euler(transform.rotation.eulerAngles.x, transform.rotation.eulerAngles.y, 0);
Quaternion toRotation = Quaternion.Euler(_cameraAngle, _rotationYAxis, 0);
Quaternion rotation = toRotation;
// Zooming
_distance = Mathf.Clamp(_distance - Input.GetAxis("Mouse ScrollWheel") * _pinchZoomSensitivity, _distanceMin, _distanceMax);
Vector3 negDistance = new Vector3(0.0f, 0.0f, -_distance);
Vector3 position = rotation * negDistance + _target.position;
transform.rotation = rotation;
transform.position = position;
_velocityX = Mathf.Lerp(_velocityX, 0, Time.deltaTime * _smoothTime);
_velocityY = Mathf.Lerp(_velocityY, 0, Time.deltaTime * _smoothTime);
}
}
Подробнее здесь: https://stackoverflow.com/questions/782 ... id-problem
Unity - проблема масштабирования/преобразования камеры в Android ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Артефакты текстуры при разных значениях масштабирования ортогональной камеры
Anonymous » » в форуме C# - 0 Ответы
- 9 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Артефакты текстуры при разных значениях масштабирования ортогональной камеры
Anonymous » » в форуме C# - 0 Ответы
- 11 Просмотры
-
Последнее сообщение Anonymous
-