Приведенный ниже скрипт отвечает за вращение и масштабирование (регулировку преобразования камер) основной камеры, поворот работает нормально, а масштабирование почти работает нормально.
После сборки на устройстве 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#
Место общения программистов C#
-
Anonymous
1716724099
Anonymous
Приведенный ниже скрипт отвечает за вращение и масштабирование (регулировку преобразования камер) основной камеры, поворот работает нормально, а масштабирование почти работает нормально.
После сборки на устройстве 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);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78215346/unity-camera-zoom-transform-android-problem[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия