Unity 3d Tutorial – Drag and Rotate Game Object with Touch Controls
- Subject: Unity 3D Tutorial
- Learning Time: 30 mins
In this tutorial we will explore how to drag you finger across the screen of your phone or tablet and have a 3D object in Unity rotate matching speed of your finger movement. This is a simple tutorial and this kind of functionalities are great for mobile games especially for character selection, unlocking different trophies, items or costumes for the game etc.
Lesson objective –
- Create a Drag and Rotate Objects project in Unity with C#
- Use Touch Phase Moved selection to check which item is active and which item to rotate in the scene
- Attach scripts to the main camera and to the game objects
- Identify the right objects using the tags element in unity
Video Tutorial on How to drag and Rotate Game object with Touch in unity with C# programming
Active Objects script
This script will be attached to the Camera in the scene.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ActivateObject : MonoBehaviour { // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { if (Input.touchCount > 0 && Input.touches[0].phase == TouchPhase.Began) { Ray ray = Camera.main.ScreenPointToRay(Input.touches[0].position); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { if (hit.transform.tag == "cube") { var objectScript = hit.collider.GetComponent<DragAndRotateCube>(); objectScript.isActive = !objectScript.isActive; } } } } }
Drag and Rotate Cube Script
This script is attached to the 3D cubes.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class DragAndRotateCube : MonoBehaviour { public bool isActive = false; Color activeColor = new Color(); // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { if (isActive) { activeColor = Color.red; if (Input.touchCount == 1) { Touch screenTouch = Input.GetTouch(0); if (screenTouch.phase == TouchPhase.Moved) { transform.Rotate(0f, screenTouch.deltaPosition.x, 0f); } if (screenTouch.phase == TouchPhase.Ended) { isActive = false; } } } else { activeColor = Color.white; } GetComponent<MeshRenderer>().material.color = activeColor; } }