Как сделать, чтобы в OnPoinerDown _fingerID нормально задавался?
Во-первых, почему-то Unity выкидывает ошибку Object Reference Has Not Instance As Object во второй строке в Start'е, хотя cinemachineCamera в Инспекторе указана. Во-вторых, в OnPoinerDown _fingerID берётся какой-то очень большой (делал как в уроке https://youtu.be/I5Ru5bIyLuY?si=TQ4QAcq9b78P-RAY), поэтому в foreach'е touch.fingerID никогда не равен _fingerID. Вот код:
using Cinemachine;
using UnityEngine;
using UnityEngine.EventSystems;
namespace Player
{
public class CameraRotation : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
[SerializeField] private bool isMobile = true;
[SerializeField] private float sensitivity;
[SerializeField] private CinemachineVirtualCamera cinemachineVirtualCamera;
private CinemachinePOV _cinemachinePov;
private int _fingerId;
private bool _isPressed;
private void Start()
{
print((cinemachineVirtualCamera == null));
_cinemachinePov = cinemachineVirtualCamera.GetCinemachineComponent<CinemachinePOV>();
if (!isMobile)
{
_cinemachinePov.m_HorizontalAxis.m_InputAxisName = "Mouse X";
_cinemachinePov.m_VerticalAxis.m_InputAxisName = "Mouse Y";
return;
}
_cinemachinePov.m_HorizontalAxis.m_MaxSpeed = sensitivity;
_cinemachinePov.m_VerticalAxis.m_MaxSpeed = sensitivity;
_cinemachinePov.m_HorizontalAxis.m_InputAxisName = "";
_cinemachinePov.m_VerticalAxis.m_InputAxisName = "";
}
public void OnPointerDown(PointerEventData eventData)
{
if (!eventData.pointerCurrentRaycast.gameObject == gameObject) return;
_isPressed = true;
_fingerId = eventData.pointerId;
}
public void OnPointerUp(PointerEventData eventData)
{
_isPressed = false;
_cinemachinePov.m_VerticalAxis.m_InputAxisValue = 0;
_cinemachinePov.m_HorizontalAxis.m_InputAxisValue = 0;
}
private void Update()
{
if (!_isPressed) return;
foreach (Touch touch in Input.touches)
{
if (touch.fingerId != _fingerId)
{
print(touch.fingerId + " " + _fingerId);
continue;
}
switch (touch.phase)
{
case TouchPhase.Moved:
_cinemachinePov.m_VerticalAxis.m_InputAxisValue = touch.deltaPosition.y;
_cinemachinePov.m_HorizontalAxis.m_InputAxisValue = touch.deltaPosition.x;
break;
case TouchPhase.Stationary:
_cinemachinePov.m_VerticalAxis.m_InputAxisValue = 0;
_cinemachinePov.m_HorizontalAxis.m_InputAxisValue = 0;
break;
}
}
}
}
}