GUI.Button: 130 фпс
а GUILayout.Label с BeginHorizontal()\EndHorizontal() и GUILayout.Width\Height: 170 фпс
110 фпс для GUILayout.Button
Вывод: для некоторых частей гуи можно использовать GL или 3д плашки \ Sprite Manager
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
public class ButtonTest : MonoBehaviour
{
static int dim_x = 30;
static int dim_y = 20;
Rect[,] rects = new Rect[dim_y, dim_x];
float w = 20f;
void Start()
{
for (int i = 0; i < dim_y; i++)
{
for (int j = 0; j < dim_x; j++)
{
rects[i, j] = new Rect(j * w, i * w, w, w);
}
}
}
//int[] ms;
string s = "";
public Texture tx;
void OnGUI()
{
for (int i = 0; i < dim_y; i++)
{
GUILayout.BeginHorizontal();
for (int j = 0; j < dim_x; j++)
{
GUILayout.Button(tx,GUILayout.Width(rects[i, j].width), GUILayout.Height(rects[i, j].height));
}
GUILayout.EndHorizontal();
}
}
public Material mat;
//void OnPostRender()
//{
// if (mat == null)
// {
// Debug.LogError("Please Assign a material on the inspector");
// return;
// }
// GL.PushMatrix();
// mat.SetPass(0);
// //for (int i = 0; i < dim_y; i++)
// //{
// // for (int j = 0; j < dim_x; j++)
// // {
// // //GUI.Label(rects[i, j], tx);
// // }
// //}
// GL.LoadPixelMatrix();
// GL.Color(Color.red);
// //using!
// GL.Begin(GL.TRIANGLES);
// for (int i = 0; i < dim_y; i++)
// {
// for (int j = 0; j < dim_x; j++)
// {
// //GUI.Label(rects[i, j], tx);
// GL.TexCoord(new Vector3(0, 0, 0)); GL.Vertex3(rects[i, j].x, rects[i, j].y, 0);
// GL.TexCoord(new Vector3(0, 1, 0)); GL.Vertex3(rects[i, j].x, rects[i, j].yMax, 0);
// GL.TexCoord(new Vector3(1, 0, 0)); GL.Vertex3(rects[i, j].xMax, rects[i, j].y, 0);
// GL.TexCoord(new Vector3(1, 0, 0)); GL.Vertex3(rects[i, j].xMax, rects[i, j].y, 0);
// GL.TexCoord(new Vector3(0, 1, 0)); GL.Vertex3(rects[i, j].x, rects[i, j].yMax, 0);
// GL.TexCoord(new Vector3(1, 1, 0)); GL.Vertex3(rects[i, j].xMax, rects[i, j].yMax, 0);
// }
// }
// GL.End();
// GL.PopMatrix();
//}
}
using System.Collections;
public class ButtonTest : MonoBehaviour
{
static int dim_x = 30;
static int dim_y = 20;
Rect[,] rects = new Rect[dim_y, dim_x];
float w = 20f;
void Start()
{
for (int i = 0; i < dim_y; i++)
{
for (int j = 0; j < dim_x; j++)
{
rects[i, j] = new Rect(j * w, i * w, w, w);
}
}
}
//int[] ms;
string s = "";
public Texture tx;
void OnGUI()
{
for (int i = 0; i < dim_y; i++)
{
GUILayout.BeginHorizontal();
for (int j = 0; j < dim_x; j++)
{
GUILayout.Button(tx,GUILayout.Width(rects[i, j].width), GUILayout.Height(rects[i, j].height));
}
GUILayout.EndHorizontal();
}
}
public Material mat;
//void OnPostRender()
//{
// if (mat == null)
// {
// Debug.LogError("Please Assign a material on the inspector");
// return;
// }
// GL.PushMatrix();
// mat.SetPass(0);
// //for (int i = 0; i < dim_y; i++)
// //{
// // for (int j = 0; j < dim_x; j++)
// // {
// // //GUI.Label(rects[i, j], tx);
// // }
// //}
// GL.LoadPixelMatrix();
// GL.Color(Color.red);
// //using!
// GL.Begin(GL.TRIANGLES);
// for (int i = 0; i < dim_y; i++)
// {
// for (int j = 0; j < dim_x; j++)
// {
// //GUI.Label(rects[i, j], tx);
// GL.TexCoord(new Vector3(0, 0, 0)); GL.Vertex3(rects[i, j].x, rects[i, j].y, 0);
// GL.TexCoord(new Vector3(0, 1, 0)); GL.Vertex3(rects[i, j].x, rects[i, j].yMax, 0);
// GL.TexCoord(new Vector3(1, 0, 0)); GL.Vertex3(rects[i, j].xMax, rects[i, j].y, 0);
// GL.TexCoord(new Vector3(1, 0, 0)); GL.Vertex3(rects[i, j].xMax, rects[i, j].y, 0);
// GL.TexCoord(new Vector3(0, 1, 0)); GL.Vertex3(rects[i, j].x, rects[i, j].yMax, 0);
// GL.TexCoord(new Vector3(1, 1, 0)); GL.Vertex3(rects[i, j].xMax, rects[i, j].yMax, 0);
// }
// }
// GL.End();
// GL.PopMatrix();
//}
}