• Benvenuto in Making Videogames!
  • Dai sfogo alla tua fantasia!
  • Crea il tuo Videogioco!
Benvenuto ospite! Login Registrati




Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
[C#] Dubbio concettuale su Array di oggetti
#1
Cialve,
le cose son 2, o son troppo stanco in questo momento, oppure c'è qualcosa che mi sfugge a livello concettuale.
Il problema è questo, sto facendo uno script C# in unity, con cui prendo un oggetto 'Ray' di partenza e creo un array di 5 elementi che inizializzo tutti come copie del raggio iniziale. Poi applico ad elemento dell'Array un modificatore del campo 'origin', alcuni variati nelle ordinate, altri nelle ascisse.
Però mi sputa addosso questo errore:
"Cannot modify a value type return value of `UnityEngine.Ray.origin'. Consider storing the value in a temporary variable"

allego anche il frammento di codice incriminato:

Codice:
Ray[] r = new Ray[5];
for(int i=0; i<5; i++) {
    r[i] = firstRay;
}
r[1].origin.x += widthMargin*0.05;
r[2].origin.x -= widthMargin*0.05;
r[3].origin.y += heightMargin*0.05;
r[4].origin.y -= heightMargin*0.05;

Thx in anticipo.
 
Rispondi
#2
Ciao
Hai provato ha creare una variabile temporanea?
Prova a fare questa piccola modifica:

Codice:
Vector2 rayPos = r[1].origin;
rayPos.x += widthMargin*0.05;
r[1].origin = rayPos;

Non sono sicuro che funzioni ma comunque provare non costa nulla Smile

P.S. Naturalmente devi farlo per tutte e 4 le righe
 
Rispondi
#3
Quell'errore succede perché il Vector3 origin è una struct: in C# non puoi modificare il valore di una struct, devi ricostruirla. In compenso le struct sono allocate nello stack, quindi sono più veloci.
Per fare quello che vuoi tu devi fare qualcosa di questo tipo:

Codice:
Ray[] r = new Ray[5];
for(int i=0; i<5; i++) {
    r[i] = firstRay;
}
r[1].origin += new Vector3(widthMargin*0.05f, 0.0f);
r[2].origin -= new Vector3(widthMargin*0.05f, 0.0f);
r[3].origin += new Vector3(0.0f, heightMargin*0.05f);
r[4].origin -= new Vector3(0.0f, heightMargin*0.05f);


PS.
Non conosco C# quindi non prendere per oro tutto ciò che ti dico, se non sei convinto di qualcosa chiedi ulteriori spiegazioni o approfondisci con google o sul tuo libro.
 
Rispondi
#4
(29-10-2013, 10:29 PM)steve Ha scritto: Quell'errore succede perché il Vector3 origin è una struct: in C# non puoi modificare il valore di una struct, devi ricostruirla. In compenso le struct sono allocate nello stack, quindi sono più veloci.
Per fare quello che vuoi tu devi fare qualcosa di questo tipo:

Codice:
Ray[] r = new Ray[5];
for(int i=0; i<5; i++) {
    r[i] = firstRay;
}
r[1].origin += new Vector3(widthMargin*0.05f, 0.0f);
r[2].origin -= new Vector3(widthMargin*0.05f, 0.0f);
r[3].origin += new Vector3(0.0f, heightMargin*0.05f);
r[4].origin -= new Vector3(0.0f, heightMargin*0.05f);


PS.
Non conosco C# quindi non prendere per oro tutto ciò che ti dico, se non sei convinto di qualcosa chiedi ulteriori spiegazioni o approfondisci con google o sul tuo libro.


E' corretto... proprio ieri sera sono arrivato a scrivere la stessa cosa trovando su google che era necessario riassegnare con un vector3.
Ora funge tutto Smile
 
Rispondi
  


Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  [C++]Chiarimenti su una lezione della guida di HTML.it ossen97 7 1,407 02-04-2011, 11:52 PM
Ultimo messaggio: steve

Vai al forum:


Browsing: 1 Ospite(i)