Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Cu ce va aparati de cainii agresi...

Nu imi platiti coletul cu cardul ...

Mi-au disparut amigdalitele ?

Exista vreun plan de terorizare p...
 Schimbare adresa DNS IPv4 pe rout...

Recomandare Barebone

Monede JO 2024

Suprasolicitare sistem electric
 CIV auto import

Mutare in MOZAMBIC - pareri, expe...

Scoatere antifurt airtag de pe ha...

Magnet in loc de clește pent...
 Cumparat/Locuit in apartament si ...

Pot folosi sistemul PC pe post de...

Sokol cu distorsiuni de cross-over

Filtru apa potabila cu osmoza inv...
 

[Unity] Vector2

- - - - -
  • Please log in to reply
8 replies to this topic

#1
Daniel2222

Daniel2222

    Junior Member

  • Grup: Members
  • Posts: 196
  • Înscris: 21.07.2015
Vad prin multe coduri ca se foloseste new Vector2 in loopuri.
De exemplu, daca vreau sa mut un Player de la pozitia1 la pozitia2 cum ar trebui folosit acest Vector2?

public void Move(float move, bool jump)
	{
		rb2d.velocity = new Vector2(move*MaxSpeed,rb2d.velocity.y);
		if (jump && Grounded)
		{
			Grounded = false;
			rb2d.AddForce(new Vector2(0f, JumpForce));
		}
	}


In codul de mai sus, aceasta functie este executata de butonul de mers inainte.
Daca obtin 60 frameuri pe secunda asta nu inseamna ca o sa am 120 de noi vectori2 in memorie in 2 secunde? Nu e o risipa de memorie?
Vad ca peste tot se foloseste in acest fel.

Nu era mai corect sa se foloseasca Vector2 ca o variabla de instanta si in functia Move() decat sa fie modifiacat?  
De exemplu:

Vector2 PlayerVeloc=new Vector2(0,0); // variabila de instanta
public void MoveB(float move, bool jump)
	{
		PlayerVeloc.x = move * MaxSpeed;
		PlayerVeloc.y = rb2d.velocity.y;
		rb2d.velocity = PlayerVeloc;
		if (jump && Grounded)
		{
			Grounded = false;
			//la fel si aici
			rb2d.AddForce(new Vector2(0f, JumpForce));
		}
	}


Care cod ar trebui folosit?

#2
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,236
  • Înscris: 24.02.2007
Daca iti pasa de memorie, folosesti C++ unde poti aloca linistit si pe stiva cand e convenabil.

#3
Daniel2222

Daniel2222

    Junior Member

  • Grup: Members
  • Posts: 196
  • Înscris: 21.07.2015
Bun. Nu-mi pasa prea mult de memorie daca nu e o problema prea mare.
Dar de curiozitate... Care varianta ar fi mai eficienta? Prima sau a doua?
Modificarea unui vector2 este mai lenta decat crearea unui nou vector sau de ce se foloseste asa?

Edited by Daniel2222, 08 November 2017 - 22:04.


#4
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,236
  • Înscris: 24.02.2007
Observ ca ai trecut Unity in titlu, deci e vorba de C# (credeam initial ca-i cod Java). Vector2 e struct sau class? Difera in cazul C# cum aloca memoria.

Cand ai dileme cu privire la performanta, cel mai sanatos e sa masori.

Trebuie gasit mereu si un echilibru, o optimizare intr-un loc poate fi insesizabila practic chiar daca pe hartie e mai ok.

Edited by dani.user, 08 November 2017 - 22:17.


#5
maccip

maccip

    46 ani

  • Grup: Senior Members
  • Posts: 33,261
  • Înscris: 06.01.2007
Aici mai intervine si jitterul care optimizeaza.
De aia e mai bine sa testezi.
In .NET crearea unui vector nu consuma resurse de timp cine stie ce.
Nu tre sa ia handle prin apel sistem catre sistemul de operare asa cum se face la alocare dinamica in C++.

Dar pe de alta parte, lucrand in aceiasi zona de memorie, ai sanse mai mari sa intre in cacheul procesorului, depinde de rutinele alea de pe-acolo.

#6
Daniel2222

Daniel2222

    Junior Member

  • Grup: Members
  • Posts: 196
  • Înscris: 21.07.2015
Nu am modificat eu titlul, probabil alt moderator, dar ai dreptate. Este vorba Unity si de c#. Vector2 este struct.
Da, am probleme de performanta. La inceput totul merge foarte bine. Cum inaintez in nivel incepe sa scada numarul de frameuri. Cand scade acel numar sub 60 fps totul merge sacadat. Nu foarte mult dar destul de deranjant.
Dar nu-i nimic, ii dau eu de cap!

Edited by Daniel2222, 08 November 2017 - 22:46.


#7
maccip

maccip

    46 ani

  • Grup: Senior Members
  • Posts: 33,261
  • Înscris: 06.01.2007
Daca vorbesti de FPS, diferentele intre cele 2 coduri sunt absolut nesemnificative.
Vector2 e o variabila locala fara prea multa viata, nustiu cum functioneaza garbage collecteru, dar nu mi-as face probleme de la bucata asta de cod.

#8
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Poate metodele postate sunt apelate intr-o bucla.

#9
Daniel2222

Daniel2222

    Junior Member

  • Grup: Members
  • Posts: 196
  • Înscris: 21.07.2015
Da, sunt apelate intr-o bucla.

Anunturi

Chirurgia endoscopică a hipofizei Chirurgia endoscopică a hipofizei

"Standardul de aur" în chirurgia hipofizară îl reprezintă endoscopia transnazală transsfenoidală.

Echipa NeuroHope este antrenată în unul din cele mai mari centre de chirurgie a hipofizei din Europa, Spitalul Foch din Paris, centrul în care a fost introdus pentru prima dată endoscopul în chirurgia transnazală a hipofizei, de către neurochirurgul francez Guiot. Pe lângă tumorile cu origine hipofizară, prin tehnicile endoscopice transnazale pot fi abordate numeroase alte patologii neurochirurgicale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate