Dans mon jeu 2D le joueur devrait être capable de faire pivoter une image UI basée sur une fonction de souris, puis appuyez sur le bouton "Go" pour démarrer le niveau, et après cela, le bouton "Retour" sur le niveau devrait prendre la retour à la scène principale (celle qui a l'image de l'interface utilisateur), l'image doit donc être affichée dans la même dernière rotation que le joueur a définie pour elle. Tout fonctionne parfaitement bien pour moi, sauf pour la partie de chargement de la rotation de l'image. J'ai pu voir la valeur de rotation correcte dans la console, mais je ne vois pas de rotation sur l'image lorsque je reviens de l'autre scène. J'ai essayé de faire tellement de tentatives pour que ça marche mais ça n'obtient pas de bons résultats. Ce sera tellement apprécié si vous m'aidez à fêter mon anniversaire demain!Comment enregistrer une rotation d'image de l'interface utilisateur et la charger lors du retour d'une scène différente dans Unity3D?
J'espère que cela vous expliquera mieux ce que je suis en train de faire:
première scène où la place est l'interface utilisateur image et le bouton Go est sous
Après l'utilisateur fait glisser l'image , il obtient une nouvelle rotation. Ensuite, le joueur clique sur le bouton Go, la rotation est enregistrée et une nouvelle scène sera affichée. Et puis il y a une deuxième scène qui a le bouton Retour (cela amène l'utilisateur à la scène principale et devrait afficher l'image de l'IU tournée en fonction de l'entrée du dernier utilisateur). Le problème est qu'il n'y a aucune rotation affichée sur l'image de l'interface utilisateur.
Et voici le code que je l'ai utilisé pour l'interface utilisateur Rotation d'image:
public static Quaternion rot;
public void OnMouseDrag(){
Vector3 pos = Camera.main.WorldToScreenPoint (transform.position);
Vector3 dir = Input.mousePosition - pos;
float angle = Mathf.Atan2 (dir.y, dir.x) * Mathf.Rad2Deg;
transform.rotation = rot;
rot = Quaternion.AngleAxis (angle, Vector3.forward);
}
Et ceci est le code attribué au bouton "Go" dans la première scène:
public void OnClicked(Button button)
{
PlayerPrefs.SetFloat ("PlayerX", ImgRotation.rot.eulerAngles.x);
PlayerPrefs.SetFloat ("PlayerY", ImgRotation.rot.eulerAngles.y);
PlayerPrefs.SetFloat ("PlayerZ", ImgRotation.rot.eulerAngles.z);
Application.LoadLevel ("2");
}
Et le code attribué au bouton "Retour" dans la seconde scène:
public void OnClicked(Button button)
{
Vector3 imgRot;
imgRot = ImgRotation.rot.eulerAngles;
imgRot.x = PlayerPrefs.GetFloat ("PlayerX");
imgRot.y = PlayerPrefs.GetFloat ("PlayerY");
imgRot.z = PlayerPrefs.GetFloat ("PlayerZ");
print (imgRot.z);
Application.LoadLevel ("1");
}
Vous ne voyez pas l'image pivotée, car vous ne l'avez pas fait pivoter. Vous avez Vector3, mais vous n'avez pas assigné (simplement imprimé) à l'objet gameobject dans votre script pour le bouton "Retour". – buxter
@buxter J'ai essayé de l'assigner dans le BackButtonScript mais chaque fois que je reçois ce message d'erreur: NullReferenceException: La référence d'objet n'est pas définie sur une instance d'un objet. Et j'ai utilisé ce script: ImgRotation temp = this.GetComponent(); \t \t Vecteur3 imgTrans; \t \t imgTrans = temp.img.transform.rotation.eulerAngles; \t \t imgTrans.z = imgRot.z; –
Maryoomi1
Pouvez-vous coller le script entier, s'il vous plaît? De plus, ImgRotation -> c'est votre script, pas une image. – buxter