Creare Videogiochi - Game Developer
Snapping System ottimizzato. - Versione stampabile

+- Creare Videogiochi - Game Developer (https://www.making-videogames.net/giochi)
+-- Forum: Unity3D Italia (https://www.making-videogames.net/giochi/Forum-Unity3D-Italia)
+--- Forum: Richieste di Aiuto per Unity 3D (https://www.making-videogames.net/giochi/Forum-Richieste-di-Aiuto-per-Unity-3D)
+--- Discussione: Snapping System ottimizzato. (/thread-Snapping-System-ottimizzato)



Snapping System ottimizzato. - Penca53 - 10-08-2017

Salve a tutti,
avrei bisogno di aiuto per la creazione di un sistema Snapping (in-game). La mia idea era quella di creare tanti quadrati (con spessore y 0 per ridurre il carico al rendering) e all' interno inserire uno script che utilizza OnMouseEnter e Exit... il problema giunge con la creazione di centinaia di oggetti e il gioco inizia a laggare. Come risolvo questo problema? Grazie in anticipo.


RE: Snapping System ottimizzato. - aandrea1974 - 10-08-2017

(10-08-2017, 01:50 PM)Penca53 Ha scritto: Salve a tutti,
avrei bisogno di aiuto per la creazione di un sistema Snapping (in-game). La mia idea era quella di creare tanti quadrati (con spessore y 0 per ridurre il carico al rendering) e all' interno inserire uno script che utilizza OnMouseEnter e Exit... il problema giunge con la creazione di centinaia di oggetti e il gioco inizia a laggare. Come risolvo questo problema? Grazie in anticipo.

Come crei gli oggetti?


RE: Snapping System ottimizzato. - Penca53 - 10-08-2017

Gli oggetti li creo all'inizio con 2 loop for (uno per la x e uno per la z) con Instantiate(ecc..) poi li disattivo con SetActive(false); Quando si preme il tasto m si attivano gli oggetti... inoltre ho anche fatto un sistema per risparmiare memoria con la disattivazione degli oggetti a seconda della distanza.


RE: Snapping System ottimizzato. - aandrea1974 - 10-08-2017

(10-08-2017, 07:08 PM)Penca53 Ha scritto: Gli oggetti li creo all'inizio con 2 loop for (uno per la x e uno per la z) con Instantiate(ecc..) poi li disattivo con SetActive(false); Quando si preme il tasto m si attivano gli oggetti... inoltre ho anche fatto un sistema per risparmiare memoria con la disattivazione degli oggetti a seconda della distanza.

Hai provato a creare un prefab che rappresenti il singolo oggetto e poi creare n istanze del prefab?


RE: Snapping System ottimizzato. - Penca53 - 11-08-2017

Si certo, l'oggetto che costruisco ad inizio game è un prefab.


RE: Snapping System ottimizzato. - aandrea1974 - 11-08-2017

Valuta che con SetActive, non li rimuovi dalla memoria.
L'oggetto è composto dal solo quadrato?
Ci sono texture o altri oggetti attaccati al quadrato?
Dopo averli creati, fai altre operazioni di trasformazione?
Che istruzioni hai messo nei metodi Update() degli script che hai inserito?


RE: Snapping System ottimizzato. - Penca53 - 12-08-2017

(11-08-2017, 05:44 PM)aandrea1974 Ha scritto: Valuta che con SetActive, non li rimuovi dalla memoria.
L'oggetto è composto dal solo quadrato?
Ci sono texture o altri oggetti attaccati al quadrato?
Dopo averli creati, fai altre operazioni di trasformazione?
Che istruzioni hai messo nei metodi Update() degli script che hai inserito?

Allora il quadrato è solamente un quadrato poi c'è un materiale grigio semi-trasparente e quando il mouse entra in collisione cambia di materiale e diventa verde chiaro. Gli update non gli ho usati.... cmq questo problema l'ho risolto utilizzando la matematica.... infatti ho messo i uno script a parte la creazione di un ray che parte dal mouse e la solita serie di for loops per x e z e nel caso la posizione della collisione del ray è maggiore della x e z e minore della x e z aumentati di 1 (quindi ho utlizzato la x e z come angoli in alto a sx dei quadrati) allora crea un quadrato alla posizione x+0.5f ez+0.5f cioè il centro del quadrato immaginario. Cosa ne pensate?


RE: Snapping System ottimizzato. - aandrea1974 - 12-08-2017

(12-08-2017, 02:34 PM)Penca53 Ha scritto:
(11-08-2017, 05:44 PM)aandrea1974 Ha scritto: Valuta che con SetActive, non li rimuovi dalla memoria.
L'oggetto è composto dal solo quadrato?
Ci sono texture o altri oggetti attaccati al quadrato?
Dopo averli creati, fai altre operazioni di trasformazione?
Che istruzioni hai messo nei metodi Update() degli script che hai inserito?

Allora il quadrato è solamente un quadrato poi c'è un materiale grigio semi-trasparente e quando il mouse entra in collisione cambia di materiale e diventa verde chiaro. Gli update non gli ho usati.... cmq questo problema l'ho risolto utilizzando la matematica.... infatti ho messo i uno script a parte la creazione di un ray che parte dal mouse e la solita serie di for loops per x e z e nel caso la posizione della collisione del ray è maggiore della x e z e minore della x e z aumentati di 1 (quindi ho utlizzato la x e z come angoli in alto a sx dei quadrati) allora crea un quadrato alla posizione x+0.5f ez+0.5f cioè il centro del quadrato immaginario. Cosa ne pensate?

Se il risultato è quello che volevi e non hai problemi di prestazione, direi che va bene.


RE: Snapping System ottimizzato. - Penca53 - 12-08-2017

Il risultato a me va bene... le prestazioni sono eccellenti... considera che il loop parte da -100 e arriva a 100 e ce ne sono 2 quindi 100*100*100*100 fa 1 miliardo quindi si... le prestazioni sono ottime.


RE: Snapping System ottimizzato. - aandrea1974 - 12-08-2017

(12-08-2017, 03:08 PM)Penca53 Ha scritto: Il risultato a me va bene... le prestazioni sono eccellenti... considera che il loop parte da -100 e arriva a 100 e ce ne sono 2 quindi 100*100*100*100 fa 1 miliardo quindi si... le prestazioni sono ottime.

Non credo sia un miliardo.
8 zeri sono 100M.
Comunque se hai due loop uno dentro all'altro, sarà 200 * 200.


RE: Snapping System ottimizzato. - Penca53 - 13-08-2017

(12-08-2017, 09:47 PM)aandrea1974 Ha scritto:
(12-08-2017, 03:08 PM)Penca53 Ha scritto: Il risultato a me va bene... le prestazioni sono eccellenti... considera che il loop parte da -100 e arriva a 100 e ce ne sono 2 quindi 100*100*100*100 fa 1 miliardo quindi si... le prestazioni sono ottime.

Non credo sia un miliardo.
8 zeri sono 100M.
Comunque se hai due loop uno dentro all'altro, sarà 200 * 200.

Si hai ragione... cmq 40.000 è un bel numero!


RE: Snapping System ottimizzato. - aandrea1974 - 13-08-2017

(13-08-2017, 12:19 PM)Penca53 Ha scritto:
(12-08-2017, 09:47 PM)aandrea1974 Ha scritto:
(12-08-2017, 03:08 PM)Penca53 Ha scritto: Il risultato a me va bene... le prestazioni sono eccellenti... considera che il loop parte da -100 e arriva a 100 e ce ne sono 2 quindi 100*100*100*100 fa 1 miliardo quindi si... le prestazioni sono ottime.

Non credo sia un miliardo.
8 zeri sono 100M.
Comunque se hai due loop uno dentro all'altro, sarà 200 * 200.

Si hai ragione... cmq 40.000 è un bel numero!

L'importante è che ora le prestazioni vadano bene.