Question by
LeonidAbashidze · Dec 09, 2018 at 04:42 PM ·
errormovementrotaterotate objectmoving
Moving And Rotation 2D Object (Touch)
Hello everyone, i'm New one & need help :(
i have problem with moving and rotating object.
Check the problem after two finger touches: https://youtu.be/UMbO8s80-jo
as i understand i need Touches instead of one touch ...
this code works but objects starts "blinking" when i touch second finger to move ...
using UnityEngine;
using System.Collections;
public class Rotate1 : MonoBehaviour
{
[SerializeField]
private float turnSpeed = 5;
private Vector2 movement;
void Update()
{
Vector2 currentPosition = transform.position;
foreach (Touch touch in Input.touches)
if (Input.touchCount == 2)
{
Touch touches = Input.GetTouch(0);
if (touch.phase == TouchPhase.Moved)
{
Vector2 moveTowards = Camera.main.ScreenToWorldPoint(touch.position);
movement = moveTowards - currentPosition;
movement.Normalize();
}
}
float targetAngle = Mathf.Atan2(movement.y, movement.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Slerp(transform.rotation,
Quaternion.Euler(0, 0, targetAngle),
turnSpeed * Time.deltaTime);
transform.up = movement;
///moving
if (Input.touchCount > 0)
foreach (Touch touch in Input.touches)
{
Touch touches = Input.GetTouch(0);
Vector3 touchPosition = Camera.main.ScreenToWorldPoint(touches.position);
touchPosition.z = 0f;
transform.position = touchPosition;
}
}
}
Comment
With other code but problem is the same
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class $$anonymous$$oveandrot : $$anonymous$$onoBehaviour
{
public float speed = 5f;
private void Update()
{
if (Input.touchCount == 2)
{
Touch touch = Input.GetTouch(0);
Vector2 direction = Camera.main.ScreenToWorldPoint(touch.position) - transform.position;
float angle = $$anonymous$$athf.Atan2(direction.y, direction.x) * $$anonymous$$athf.Rad2Deg;
Quaternion rotation = Quaternion.AngleAxis(angle, Vector3.forward);
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, speed * Time.deltaTime);
transform.up = direction;
}
if (Input.touchCount > 0)
{
Touch touch = Input.GetTouch(0);
Vector3 touchPosition = Camera.main.ScreenToWorldPoint(touch.position);
touchPosition.z = 0f;
transform.position = touchPosition;
}
}
}
Your answer
Follow this Question
Related Questions
Rotate object to joystick and position direction 0 Answers
How to make a 2d platformer with a rolling ball as a player? 1 Answer
How touch works 1 Answer
I have an error with my scripts PLEASE HELP ME 2 Answers
How to speed up enemy after time? 1 Answer