Page 1 sur 1

[DB-AL] Rotation avancée

Publié : 16 Nov 2017 01:10
par Archimage77
Bonjour,
j'aurais besoin de votre aide sur un problème de rotation sur un seul axe.
J'ai fais pas mal de jeu sur Unity mais uniquement en 2D et il s'agit la de mon premier jeu 3D.
Le but est de faire tourné une roue (qui est face à la caméra) en faisant un cercle avec un seul doigt (horaire ou anti-horaire).

Voici la roue en question :
Image

J'ai trouvé un post sur le forum officiel d'Unity qui reproduit exactement ce que je veux faire mais c'est pour de la 2D : Voici le post : https://answers.unity.com/questions/952 ... -drag.html.
J'ai donc adapté pour de la 3D et ça marche plutôt pas mal. Il me reste un seul bug que je n'arrive pas à déniché.

Voici mon code :

Code : Tout sélectionner

using Lean.Touch;
using System.Collections.Generic;
using UnityEngine;

public class TestTouch : MonoBehaviour
{
	private float OriginalRotAng = 0;
	private float OriginalTouchAng = 0;

	private void FingerDown(LeanFinger finger)
	{
		float angle = 0;
		Vector3 axis;
		transform.rotation.ToAngleAxis(out angle, out axis);
		OriginalRotAng = angle;
		Vector3 SpinnerScreenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position);
		SpinnerScreenPoint = (finger.ScreenPosition - (Vector2)SpinnerScreenPoint);
		OriginalTouchAng = Mathf.Atan2(SpinnerScreenPoint.y, SpinnerScreenPoint.x) * Mathf.Rad2Deg - 90;
	}

	private void OnGesture(List<LeanFinger> fingers)
	{
		Vector3 SpinnerScreenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position);
		SpinnerScreenPoint = (fingers[0].ScreenPosition - (Vector2)SpinnerScreenPoint);
		float newRot = Mathf.Atan2(SpinnerScreenPoint.y, SpinnerScreenPoint.x) * Mathf.Rad2Deg - 90;

		float RotationAngle = OriginalRotAng + newRot - OriginalTouchAng;
		Rotate(RotationAngle);
	}

	private void Rotate(float RotationAngle)
	{
		transform.rotation = Quaternion.AngleAxis(RotationAngle, Vector3.left);
	}
}
(j'utilise le plugin LeanTouch pour géré la gestion souris/touch mais ça ne nous intéresse pas ici)

Le problème est le suivant : lors du "FingerDown" il arrive que dans certain angle de la roue, un saut de la roue ce produit (rotation non désiré), en réalité je vois mon axe X qui passe de positif à négatif ou de négatif à positif.
Je ne comprend pas pourquoi et j'avoue être totalement bloqué.

Si vous auriez une piste de recherche, je suis preneur.
Merci beaucoup par avance