В моей 2D-игре игрок должен иметь возможность поворачивать изображение пользовательского интерфейса на основе функции перетаскивания мышью, а затем нажать кнопку «Перейти», чтобы начать уровень, и после этого кнопка «Назад» на уровне должна плеер обратно на главную сцену (та, которая имеет изображение пользовательского интерфейса), поэтому изображение должно отображаться в том же последнем вращении, которое игрок установил для него. Все работает фантастически хорошо для меня, за исключением части загрузки вращения изображения. Мне удалось увидеть правильное значение вращения в консоли, однако при возврате с другой сцены я не вижу поворота на изображении. Я пытался сделать так много попыток заставить его работать, но не получал хороших результатов. Это будет так высоко оценено, если вы поможете мне отпраздновать свой день рождения завтра!Как сохранить поворот изображения пользовательского интерфейса и загрузить его при возвращении из другой сцены в Unity3D?
Я надеюсь, что это будет лучше объяснить, что я пытаюсь сделать:
Первая сцена, где квадрат является UI изображения и кнопка Go находится под
После того, как пользователь перетаскивает изображение , он получает новое вращение. Затем игрок нажимает кнопку Go, вращение сохраняется и отображается новая сцена.
А затем есть вторая сцена, в которой есть кнопка «Назад» (она берет пользователя на главную сцену и должна отображать повернутый пользовательский интерфейс, основанный на входе последнего пользователя). Проблема в том, что на изображении пользовательского интерфейса вообще нет никакого вращения.
А вот код, который я использовал для вращения UI Изображение:
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);
}
И это код, назначенный кнопке «Go» в первой сцене:
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");
}
И код, присвоенный кнопке «Назад» во втором эпизоде:
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");
}
Вы не видите, что изображение повернуто, потому что вы его не вращали. У вас есть Vector3, но вы не назначили (просто напечатали) его в игровой объект в своем скрипте для кнопки «Назад». – buxter
@buxter Я попытался назначить его в BackButtonScript, но каждый раз, когда я получаю это сообщение об ошибке: NullReferenceException: ссылка на объект не установлена в экземпляр объекта. И я использовал этот скрипт: ImgRotation temp = this.GetComponent(); \t \t Векторный3 imgTrans; \t \t imgTrans = temp.img.transform.rotation.eulerAngles; \t \t imgTrans.z = imgRot.z; –
Maryoomi1
Можете ли вы вставить весь скрипт, пожалуйста? Кроме того, ImgRotation -> это ваш скрипт, а не изображение. – buxter