I have a rotating gui texture and it works completely, except for whenever the level is loadings (which is when I need it). How can I get a gui texture continue to rotate while the level is loading (I already tried: Application.isLoadingLevel). Here’s my code for your convenience (I found this somewhere else [I didn’t write it] and slightly modified it to my needs).
EDIT: I have an object that doesn’t get deleted when going to another scene, but when I go back to that seen there is a duplicate. I know why this happens but how can I fix it? (It has the same name and everything, so it’s pretty confusing).
using UnityEngine;
[ExecuteInEditMode()]
public class RotatableGuiItem : MonoBehaviour
{
public Texture2D texture = null;
public float angle = 0;
public bool spin = true;
public Vector2 size = new Vector2(128, 128);
//this will overwrite the items position
public AlignmentScreenpoint ScreenpointToAlign = AlignmentScreenpoint.TopLeft;
public Vector2 relativePosition = new Vector2(0, 0);
Vector2 pos = new Vector2(0, 0);
Rect rect;
Vector2 pivot;
void Update()
{
if(spin)
{
angle++;
}
}
void Start()
{
UpdateSettings();
}
void UpdateSettings()
{
Vector2 cornerPos = new Vector2(0, 0);
//overwrite the items position
switch (ScreenpointToAlign)
{
case AlignmentScreenpoint.TopLeft:
cornerPos =new Vector2(0, 0);
break;
case AlignmentScreenpoint.TopMiddle:
cornerPos =new Vector2(Screen.width/2, 0);
break;
case AlignmentScreenpoint.TopRight:
cornerPos = new Vector2(Screen.width, 0);
break;
case AlignmentScreenpoint.LeftMiddle:
cornerPos = new Vector2(0, Screen.height / 2);
break;
case AlignmentScreenpoint.RightMiddle:
cornerPos = new Vector2(Screen.width, Screen.height / 2);
break;
case AlignmentScreenpoint.BottomLeft:
cornerPos = new Vector2(0, Screen.height);
break;
case AlignmentScreenpoint.BottomMiddle:
cornerPos = new Vector2(Screen.width/2, Screen.height);
break;
case AlignmentScreenpoint.BottomRight:
cornerPos = new Vector2(Screen.width, Screen.height);
break;
default:
break;
}
pos = cornerPos + relativePosition;
rect = new Rect(pos.x - size.x * 0.5f, pos.y - size.y * 0.5f, size.x, size.y);
pivot = new Vector2(rect.xMin + rect.width * 0.5f, rect.yMin + rect.height * 0.5f);
}
void OnGUI()
{
if (Application.isEditor)
{
UpdateSettings();
spin = true;
}
Matrix4x4 matrixBackup = GUI.matrix;
GUIUtility.RotateAroundPivot(angle, pivot);
GUI.DrawTexture(rect, texture);
GUI.matrix = matrixBackup;
}
public enum AlignmentScreenpoint
{
TopLeft, TopMiddle, TopRight,
LeftMiddle, RightMiddle,
BottomLeft, BottomMiddle, BottomRight
}
}