From : http://unity3d.qatohost.com/questions/267289/making-a-gui-texture-continue-to-rotate-while-load.html
本为c#版可以发为js版,请自力更生
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
}
}