I am trying to figure out how to rotate a 2d gameObject using touch inputs. But all the code that I found is written in javascript or don’t even work I tryed multyple attempts but everytime thre gameobject doesn’t even move. Also when the gameobjects moves I don’t want inertia. Any help will be welcome.
There’s multiple ways you could rotate an object using touch inputs, could you give us a specific example of how it would work?
Either way,
One way to do it would be:
void Update (){
Raycast hit;
Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0));
if(Physics.Raycast(ray, out hit, 100)){
Vector3 NewRotation = Quaternion.LookRotation(hit.point).eulerAngles;
Vector3 SingleAxis = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, NewRotation.z);
YourGameObject.transform.eulerAngles = SingleRotation;
}
}
That would directly set the GameObject’s Z axis eulerAngle to face whereever you’re touching the screen. If something’s not right, change the axis the “NewRotation” takes the place of.
If it’s facing the opposite way by any chance, just add a minus sign before hit.point.
Keep in mind that you’ll need to have a collider behind, like a wall of sorts, a solid background etc.
Alternatively:
You might not want the object to directly point to your finger, but instead remain in place as you touch the screen and change rotation as you move your finger.
In that case, you’ll have to store the initial rotation in a variable of the main class, outside the update function, and instead of directly calculating the looking rotation, you’d have to include a relative position based on that.
Let me know if that’s what you’re going for. I won’t bother to make up the code if the first example does it for you.
If you can’t have a collider behind:
You’ll have to instead calculate the screen pixel coordinate of your GameObject, and calculate its rotation manually using onscreen coordinates.
For that, you’d need to use:
Camera.main.WorldToScreenPoint()