Jump to content
Unity Insider Forum
Kokujou

Vermeiden von Casts

Recommended Posts

Hallo erstmal ^_^

Folgendes: Ich verwende als Basis das Unity Networking und um Klassen zu synchronisieren dürfen sie leider nicht generisch sein, weswegen ich Arraylisten verwenden muss. Diese enthalten ja nur Objekte vom Typ object.

Das Problem ist, ich muss jetzt jedes Mal, wenn ich auf Werte dieser Listen zugreifen will konvertieren und ich kann mir nicht vorstellen dass das sonderlich effizient ist. Meine Frage: Was tun?

Ich weiß leider nie wann Referenzen übergeben werden und wann nicht. Würden die ursprünglichen Listen auch verändert werden wenn man das Casten nur einmal macht und dann mit der erzeugten Liste weiter arbeitet? Oder ist diese Liste eine Wertkopie?

Oder gibt es alternativ vielleicht eine möglichkeit diese ArrayLists zu vermeiden? Wäre es z.B. effektiver wenn man sich selbst eine "Serialisierungsfunktion" definiert, und wenn ja wie funktioniert sowas?

ich suche nach der effizientesten Lösung.

Share this post


Link to post
Share on other sites

willst du damit sagen, dass man inzwischen generische Klassen übers Netzwerk senden kann?
Ich hab das letzte mal mit Networking unter Unity 4.x gearbeitet, um es zum laufen zu bringen unter 5.x musste ich haufenweise ändern, es wäre gut wenn das jetzt so wäre.

Oder warum hast du mir den Source geschickt?

Share this post


Link to post
Share on other sites

Hi.

>> willst du damit sagen, dass man inzwischen generische Klassen übers Netzwerk senden kann?
Jaein. :-) Ich kann das, weil ich den Code entsprechend angepaßt habe. Was das spezielle Problem bei dir ist, kann ich nicht sagen, ich sehe den Code ja nicht. Mit deinem De-/Serialisierungshinweis kannst du recht haben, UNet zickt da manchmal rum; versuch einfach mal. Oder ent-generifiziere :-) deine Klassen vielleicht erst einmal nach dem Muster: "public class testword : test<word>", damit sollten einige Probleme gelöst sein.

>> Ich hab das letzte mal mit Networking unter Unity 4.x gearbeitet ...
UNet hat so gut wie nix mehr damit am Hut, es ist Klassen besser geworden. Das Problem ist, es arbeiten mehrere Gruppen unabhängig voneinander daran weiter, und die mehr oder weniger "federführende" Gruppe ist leider weder die flotteste noch die geschickteste, die haben auch kein Problem damit, ab und zu mal wieder zurückzufeaturen. :-( UNet ist kein Kind mehr, es ist gewachsen, aber nicht mal halbstark, das sollte man auch immer im Hinterkopf haben.

>> Oder warum hast du mir den Source geschickt?
Naja, wenn ein Programm nicht das macht, was ich möchte und ich seinen Sourcecode habe, passe ich den eben entsprechend an. Das ist schon alles.

Share this post


Link to post
Share on other sites

Oh man... Also auch noch im Unity Source rumzupfuschen da komm ich mir nicht sehr... konfident vor :P

ich arbeite nur sehr oberflächlich mit Networking.. Das Grundproblem ist einfach nur Klassen und deren Inhalte auf beiden Spielern zu synchronisieren. Aber aus mangelnder Kompatibilität habe ich aus den Klassen structs und aus den generischen listen Arraylisten machen müssen. Reicht es denn wirklich aus wenn ich das mittels Vererbung löse?

Ich muss warscheinlich sowieso nochmal alles komplett überarbeiten. Du weißt ja wie das ist, wenn du dir mal den Code ansiehst den du vor 4 Jahren geschrieben hast und du denkst "Gott was hab ich damals fürn Mist verzapft" XD

Share this post


Link to post
Share on other sites

>> Oh man... Also auch noch im Unity Source rumzupfuschen da komm ich mir nicht sehr... konfident vor :P
Ist doch nur der UNet-Code, und du kommst in den Zeugenschutz. ;-)

>> Reicht es denn wirklich aus wenn ich das mittels Vererbung löse?
Probiers aus, hängt von deinem Code ab. Das ist doch das Grundprinzip, wenn du ein Programm entwirfst: ne Idee entwickeln, diese in eine Programmiersprache zwängen und testen.

>> Du weißt ja wie das ist, wenn du dir mal den Code ansiehst den du vor 4 Jahren geschrieben hast und du denkst "Gott was hab ich damals fürn Mist verzapft" XD
Nöö, hatte ich die letzten 30 Jahre nicht mehr wirklich. :P ;-)

Share this post


Link to post
Share on other sites

Oho, ein veteran, nicht schlecht.

Nagut dann pfuschie ich mal ein bsichen an meinem Code rum und sehe was passiert~ ich muss eh nochmal alles von vorne machen.

 

Share this post


Link to post
Share on other sites
vor einer Stunde schrieb HortusLongus:

>> Du weißt ja wie das ist, wenn du dir mal den Code ansiehst den du vor 4 Jahren geschrieben hast und du denkst "Gott was hab ich damals fürn Mist verzapft" XD

Nöö, hatte ich die letzten 30 Jahre nicht mehr wirklich. :P ;-)

Das würde ich nicht als gutes Zeichen ansehen. In den allermeisten Fällen bedeutet das nur das du dich nicht weiterentwickelt hast. Es gibt immer etwas was man noch besser machen kann.

Nur mal so als Hinweis für die Leute die das hier lesen...

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×