Je souhaite faire pivoter une image de 90 ° à chaque clic de bouton. Mon problème est que lorsque j'ai cliqué dessus, il ne tourne qu'à exactement 90 °. Lorsque je clique à nouveau, il ne passe pas à 180 °, 270 ° et revient à 0 ° au quatrième clic.
public Image image;
public void WheelClicker()
{
image.gameObject.transform.DORotate(new Vector3(0, 0, image.gameObject.transform.rotation.z + 90), 1);
}
3 Réponses :
D'après les documents DOTween (sous "Rigidbody"), il semble que vous deviez utilisez WorldSpaceAdd ou LocalSpaceAdd comme mode de rotation. Ensuite, vous écrivez quelque chose comme: gameObject.transform.DORotate (nouveau Vector3 (0, 0, 90), 1, RotateMode.WorldAxisAdd).
Assurez-vous simplement que l'utilisateur ne peut pas déclencher une rotation pendant une rotation, ce qui pourrait vous faire quitter votre cap 90/180/270. Le moyen le plus simple de le faire est de:
if(!DOTween.IsTweening(transform) && Input.GetKeyUp("space"))
{
transform.DORotate(new Vector3(0, 0, 90), 1, RotateMode.WorldAxisAdd);
}
Dans le cas où le fait d'appuyer sur un espace déclencherait l'interpolation.
Oui, cela allait causer un problème merci. Malheureusement, l'image ne tourne toujours qu'à 90 et pas plus sur les cliqueurs suivants.
Vous devez le baser sur la rotation de l'objet image : (image.transform.rotation.y + 90). Actuellement, vous le basez sur l'objet de jeu auquel le script est attaché.
Merci, dactylographie négligente lorsque vous posez la question. J'ai corrigé le code. Le même problème se pose cependant.
Même en tournant juste un objet de jeu normal, j'ai le même problème. Regardant dedans maintenant
Ouais en essayant sans DoTween j'ai eu la même chose
Je pense que je l'ai compris, voir modifier. S'il y a des experts DOTween là-bas, veuillez indiquer quelle est la manière la plus simple de garantir une interpolation à la fois.
ces deux méthodes fonctionnent pour moi:
public Image image;
public void WheelClicker()
{
image.gameObject.transform.Rotate(new Vector3(0, 0, 90), 1);
}
et celle-ci:
public Image image;
int someValue = 0;
public void WheelClicker()
{
someValue += 90;
image.gameObject.transform.eulerAngles(new Vector3(0, 0,someValue ), 1);
}
alors essayez peut-être quelque chose comme ceci dans votre code:
GameObject go;
void Update()
{
go.transform.Rotate(0, 90, 0, Space.World);
}
ou:
GameObject go;
float someValue = 0;
void Update()
{
someValue += 1;
go.transform.eulerAngles = new Vector3(someValue, 0, 0);
}
c'est super merci mais je dois inclure DoTween pour l'animation lors de la rotation
Vous devriez plutôt utiliser le transform.rotation est un Quaternion code > valeur! à moins que vous ne sachiez exactement ce que vous faites, vous ne devez jamais toucher ses composants individuels ( x , y , z , w code >). La valeur transform.rotation.z n'est pas la valeur que vous recherchez! transform.eulerAngles public Image image;
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Space)) WheelClicker();
}
public void WheelClicker()
{
// always prevent concurrent animations
if (DOTween.IsTweening(image.transform)) return;
image.transform.DORotate(image.transform.eulerAngles + new Vector3(0, 0, 90), 1);
}