- Home /
Change controls from mouse to touch C#
Hello, i am trying to make this script work with touch controls. Any idea how to do that?
Script:
void Update ()
{
if (Input.GetMouseButtonDown(0))
{
f_difX = 0.0f;
}
else if (Input.GetMouseButton(0))
{
f_difX = Mathf.Abs(f_lastX - Input.GetAxis ("Mouse X"));
if (f_lastX < Input.GetAxis ("Mouse X"))
{
i_direction = -1;
transform.Rotate(Vector3.up, -f_difX);
}
if (f_lastX > Input.GetAxis ("Mouse X"))
{
i_direction = 1;
transform.Rotate(Vector3.up, f_difX);
}
f_lastX = -Input.GetAxis ("Mouse X");
}
else
{
if (f_difX > 0.5f) f_difX -= 0.05f;
if (f_difX < 0.5f) f_difX += 0.05f;
transform.Rotate(Vector3.up, f_difX * i_direction);
}
}
Thanks.
Ins$$anonymous$$d of Input.Get$$anonymous$$ouse, just use Input.GetTouch, Input.touchCount, Touch.phase etc.
Answer by tmalhassan · Sep 16, 2017 at 03:47 AM
I found a solution for whomever might need it:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SpinWheelScript : MonoBehaviour {
float pointerY;
float f_lastX = 0.0f;
float f_difX = 0.5f;
float f_steps = 0.0f;
int i_direction = 1;
void Start()
{
pointerY = Input.GetAxis("Mouse Y");
}
void Update()
{
if (Input.GetMouseButtonDown(0))
{
f_difX = 0.0f;
}
else if (Input.touchCount > 0)
{
pointerY = Input.touches[0].deltaPosition.y;
f_difX = Mathf.Abs(f_lastX - pointerY);
var touch = Input.GetTouch(0);
if (touch.position.x > Screen.width / 2)
{
// Right
if (f_lastX < Input.GetAxis("Mouse Y"))
{
i_direction = 1;
transform.Rotate(Vector3.forward, f_difX * Time.deltaTime);
}
if (f_lastX > Input.GetAxis("Mouse Y"))
{
i_direction = -1;
transform.Rotate(Vector3.forward, -f_difX * Time.deltaTime);
}
}
else if (touch.position.x < Screen.width / 2)
{
// Left
if (f_lastX < Input.GetAxis("Mouse Y"))
{
i_direction = -1;
transform.Rotate(Vector3.forward, -f_difX * Time.deltaTime);
}
if (f_lastX > Input.GetAxis("Mouse Y"))
{
i_direction = 1;
transform.Rotate(Vector3.forward, f_difX * Time.deltaTime);
}
}
f_lastX = -pointerY;
f_difX = 500f;
Debug.Log(f_difX);
}
else
{
if (f_difX > 0.5f) f_difX -= 1f;
if (f_difX < 0.5f) f_difX += 1f;
transform.Rotate(Vector3.forward, f_difX * i_direction * Time.smoothDeltaTime);
}
}
}
Currently, the object will spin based on a swipe along the Y axis, you can simple change it by replacing the Y's with X's. Also, i've modified the speeds to fit my liking. Hope this helps others.
Cheers!
Your answer
Follow this Question
Related Questions
Change the rotation of Z through swipe 0 Answers
How to create a Touch Pad to control camera rotation 0 Answers
C# How do I implement swipe controls into my mobile game? 0 Answers
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers