- Home /
Android camera rotation problem
Hi this code works on PC but on android it has some bugs. Sometimes it turn 180 degree for no reason. When touching two button. How to fix it thanks
private void Update()
{
if (Input.GetMouseButtonDown(0)) return;
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved)
{
if (Input.GetMouseButtonDown(0)) return;
LookAround();
}
else if (Input.touchCount > 0 && Input.GetTouch(1).phase == TouchPhase.Moved)
{
if (Input.GetMouseButtonDown(0)) return;
LookAround();
}
}
public void LookAround()
{
CalculateMouseInput(Time.deltaTime);
m_LookAngles.x += m_CurrentMouseLook.x * m_Sensitivity * (m_Invert ? 1f : -1f);
m_LookAngles.y += m_CurrentMouseLook.y * m_Sensitivity;
m_LookAngles.x = ClampAngle(m_LookAngles.x, m_DefaultLookLimits.x, m_DefaultLookLimits.y);
m_CurrentRollAngle = Mathf.Lerp(m_CurrentRollAngle, Player.LookInput.Get().x * m_RollAngle, Time.deltaTime * m_RollSpeed);
m_LookRoot.localRotation = Quaternion.Euler(m_LookAngles.x, 0f, m_CurrentRollAngle);
m_PlayerRoot.localRotation = Quaternion.Euler(0f, m_LookAngles.y, 0f);
Player.LookDirection.Set(m_LookRoot.forward);
}
private float ClampAngle(float angle, float min, float max)
{
if(angle > 360f)
angle -= 360f;
else if(angle < -360f)
angle += 360f;
return Mathf.Clamp(angle, min, max);
}
private void CalculateMouseInput(float deltaTime)
{
if (m_LastLookFrame == Time.frameCount)
return;
m_LastLookFrame = Time.frameCount;
m_SmoothMove = new Vector2(Input.GetAxisRaw("Mouse Y"), Input.GetAxisRaw("Mouse X"));
m_SmoothSteps = Mathf.Clamp(m_SmoothSteps, 1, 20);
m_SmoothWeight = Mathf.Clamp01(m_SmoothWeight);
while (m_SmoothBuffer.Count > m_SmoothSteps)
m_SmoothBuffer.RemoveAt(0);
m_SmoothBuffer.Add(m_SmoothMove);
float weight = 1f;
Vector2 average = Vector2.zero;
float averageTotal = 0f;
for(int i = m_SmoothBuffer.Count - 1; i > 0; i--)
{
average += m_SmoothBuffer[i] * weight;
averageTotal += weight;
weight *= m_SmoothWeight / (deltaTime * 60f);
}
averageTotal = Mathf.Max(1f, averageTotal);
m_CurrentMouseLook = average / averageTotal;
}
Comment