-

   rss_rss_hh_new

 - e-mail

 

 -

 LiveInternet.ru:
: 17.03.2011
:
:
: 51

:


Optimization Unity3d UI by GPU (for example minimap)

, 13 2017 . 15:55 +
.

- GPU,
//

image
VS
image
.
. , UI . , . . . , . . , , UI , , .

, , ,
,
, . .
streeter12 4 2016 14:51
.
1. .
2. ( ).
3. .
4. !
5. => => .
6. => ( 3).

7. .
8. .
9. ? Update tranform.position.
..

, .
.
1. . . . WOW. .

2. . UI , .

, .


static const int MaxCount = 256;
float4 _Targets[MaxCount];
float _WorldSizeX;
float _WorldSizeY;


. 256 . . float _WorldSizeX , Vector3 . , , .
: GC y . , 0. . . .

3 Vector4 (X Z W) Y .


, . ui . , .

.
protected virtual void Update ()
{
for (int i = 0; i < list.Length; i++)
{
list[i] = new Vector4(0, 0, 0, -1);
}

for (int i = 0; i < list.Length && i < targets.Count ; i++)
{
list[i] = new Vector4(targets[i].x *k.x, targets[i].y, targets[i].z*k.y, targets[i].w);
}
image.GetModifiedMaterial(image.material).SetVectorArray("_Targets", list);
}


, . . . , , . , , .

image

. , . - . , .

Y, . , , Y. - .
fixed a = _Targets[i].y;
fixed resultX = tX;
fixed resultY = tY;
if (a != 0)
{
fixed x0 = minX + (sizeX * 0.5);
fixed y0 = minY + (sizeY * 0.5);
resultX = x0 + (tX - x0) * cos(a) - (tY - y0) * sin(a);
resultY = y0 + (tY - y0) * cos(a) + (tX - x0) * sin(a);
}


. , . , . .



. . , . , . , , .

.
.
protected virtual void Start ()
{
tests = new List();
float x = 10;
float y = 10;

for (int i = 0; i < 256; i++)
{
int idx = Random.Range(0, prefabs.Count);

GameObject obj = Instantiate(prefabs[idx].gameObject);
RectTransform t = obj.GetComponent();
t.SetParent(parent);
t.localPosition = new Vector3(startPosition.x + x, startPosition.y + y, 0);
if (useRotation)
{
t.rotation = Quaternion.Euler(0, 0, Random.Range(0, 360));
}
x += step;
if (i % 20 == 0)
{
y += step;
x = 0;
}
tests.Add(t);
}
}


item.type = Random.Range(0, 64);
void Start () {
tests = new List();
float x = 10;
float z = 10;

for (int i = 0; i < 256; i++)
{
Item2 item = new Item2();
item.position = new Vector3(x, 0, z);
if (useRotation)
{
item.rotation = Random.Range(0, 360);
}
item.type = Random.Range(0, 64);
x += step;
if (i % 20 == 0)
{
z += step;
x = 0;
}
tests.Add(item);

}
}


( 3 )
image
( 3 image )
image

.
image

P.S.
" - GPU, "
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/335524/

:  

: [1] []
 

:
: 

: ( )

:

  URL