Jump to content
Unity Insider Forum

Sascha

Administrators
  • Content count

    10,519
  • Joined

  • Last visited

  • Days Won

    455

Sascha last won the day on August 15

Sascha had the most liked content!

Community Reputation

2,106 Excellent

3 Followers

About Sascha

  • Rank
    Community Manager
  • Birthday 08/13/1990

Contact Methods

  • Website URL
    http://www.indiepowered.net

Profile Information

  • Gender
    Male
  • Location
    Hamburg
  • Interests
    Programmierung

Recent Profile Visitors

29,798 profile views
  1. Sascha

    Baked Light

    Klingt doch nach einem Plan!
  2. Sascha

    Baked Light

    Warum hast du nicht einfach die Blend Probes-Eigenschaft in den MeshRenderern geändert, so wie ich es gesagt habe? Deine Blend Brobes in den Black Boxes sind unnötiger Datenmüll.
  3. Sascha

    Baked Light

    Ach, du hast Light Probe Groups. Mach einfach in den Renderern den Black Boxes (und vor allem der Figuren darin) die Light Probes aus ("Off" statt "Blend Probes").
  4. Sascha

    Baked Light

    Wenn das Problem das gebackene Licht ist, warum nicht einfach Lightmap Static ausschalten und die Blackbox damit aus dem Lightmapping ausschließen?
  5. Sascha

    Scene View

    Steht ganz oben im Inspektor unter "Shader", wenn du dein Material angeklickt hast.
  6. Sascha

    Layer Mask

    1 << 12 | 1 << 15 | 1 << 17 Aber mit den Nummern zu arbeiten ist nicht besonders sinnvoll, da nicht robust und sehr fehleranfällig. Besser, Variante 1: LayerMask.GetMask("Zeug", "Rumms", "Foo") Besser, Variante 2: [SerializeField] private LayerMask mask; und dann im Editor einstellen. Wenn es sich einrichten lässt, ist Variante 2 die sauberste.
  7. Sascha

    Scene View

    Pink heißt eigentlich eher, dass der Shader nicht funktioniert. Welchen Shader benutzt dein Material denn?
  8. Sascha

    MMO

    Kommt ganz einfach drauf an, was du machst. Wenn in deiner Welt nichts passiert ohne Spieler, dann warum nicht. Wenn das Spiel aber zum Beispiel eine Wirtschaftssimulation hätte, dann muss die natürlich weiterlaufen, auch wenn kein Spieler da ist. Da gibt's nicht wirklich feste Regeln für.
  9. Sascha

    Trabant Driver: The Arcade Game

    Wenn du Tipps brauchst, mach dir gerne jeweils ein neues Thema in den Hilfebereichen auf - wer helfen will, schaut nicht unbedingt in die Projektvorstellung Sieht aber ganz schick aus. Ich hab für meine Spiegelungen das AdamPlaneReflections-Repo benutzt. In deinem Fall wäre es aber vermutlich performanter und gleichzeitig nicht nachteilhaft, das Modell einfach zu kopieren und unter einer transluzenten Fläche kopfüber noch einmal zu rendern. Wie hast du's gemacht?
  10. Sascha

    Unity Button resetet sich einfach

    Sag mal, meinst du die Project View? Im Inspektor gibt's kein Refresh. Warum drückst du das denn überhaupt?
  11. Sascha

    Unity Button resetet sich einfach

    "Im Inspektor Refresh"? Was genau meinst du?
  12. Sascha

    Unity Button resetet sich einfach

    Ist dein Button ein Prefab oder Teil eines Prefabs? Passiert das auch in einer sonst leeren Szene? Speicherst du deine Szene/dein Prefab richtig?
  13. Sascha

    Rotation Equals

    Wenn du deinen Charakter drehst, kann er halt sehr, sehr nah an 0,0,0 drankommen, aber dann eben doch nicht. Um zwei Rotationen auf "so gut wie gleich" zu überprüfen, brauchst du aber kein dickes Konstrukt, sondern einfach nur sowas: if (Quaternion.Angle(rotationA, rotationB) <= 0.001f)
  14. Das stimmt so nicht. Wie gesagt, Low Level Memory Profiling gibt's auf mobilen Geräten eigentlich nicht. Und auch auf Desktop-PCs geht das ein bisschen über das Wissen des durchschnittlichen Script Kiddies hinaus. Wenn es wirklich um relevante Beträge geht, dann solltest du vielleicht entsprechend Geld in die Hand nehmen und jemanden für deine Sicherheitstechnik anheuern.
  15. Zuallererst: Absolute Sicherheit gibt es nicht. Es ist schlicht nicht möglich, ein System gegen jeden möglichen Angreifer zu schützen, daher musst du dir direkt aus dem Kopf schlagen. Falls du an dieser Aussage Zweifel hast, schau dir mal die offiziellen High Scores zu Left 4 Dead an Der Kampf gegen Hacker und Cheater ist immer ein Spiel des Übertrumpfens. Zuerst erstellst du ein so genanntes "Angreifermodell". Da denkst du dir den mächtigsten Gegner aus, der dein System bedrohen würde, und dann baust du genügend Gegenmaßnahmen, um diesen Angreifer abzuwehren. Es ist zum Beispiel nicht davon auszugehen, dass jemand mehrere tausend Euro in die Hand nimmt, das NSA-Rechenzentrum zur Verfügung hat oder einen Quantencomputer einsetzt, um sich einen Highscore in deinem Spiel zu erschleichen. Das durchschnittliche Scriptkiddie verliert nach zehn Minuten die Lust, sobald es feststellt, dass Request Forgery nicht funktioniert, und Low Level Memory Access ist auf mobilen Endgeräten alles andere als populär. Was du also tun solltest: Hash zum Request senden. Du sendest ja einen (kleinen) Haufen Daten an deinen Server. Vermutlich in einer HTTP-Anfrage, mit den Daten im POST-Dictionary. Deine Anfrage hat dann irgendwo das hier stehen: score=1683&playername=Hackerboi Deine Anfrage hat damit zwei Datenpunkte, die sie einzigartig machen. Wenn du jetzt diesen String da oben in einen Hashing-Algorithmus gibst, kommt solcher Kauderwelsch dabei raus: fc149be11bcc1f6a8e09c0a5b50ca134ad4aa4dd7fc5846afa10b7851637f276 Als Beispiel habe ich sha256 genommen. Falls du Hashing-Algorithmen noch nicht kennst: Das sind Funktionen, in die du einen String reinsteckst. Die Hash-Funktion zerhäckselt den String dann bis zur Unkenntlichkeit, sodass man ohne enormen Rechenaufwand nicht in der Lage ist, wieder den ursprünglichen String auszurechenen. Der Knackpunkt ist aber: Hash-Funktionen sind deterministisch. Das heißt, dass du wieder denselben alphanumerischen Salat rausbekommst, wenn du denselben String noch einmal in dieselbe Hash-Funktion reinstopfst. Der Trick ist jetzt, dass du deinem Spiel ein geheimes Passwort gibst, und deinem Server dasselbe. Sagen wir, das Passwort lautet 4bh36aB§$abb4aL Anstatt den String da oben in deine Hash-Funktion zu stecken, hängst du vorher noch das Passwort dran. Du verwurschtest also score=1683&playername=Hackerboi4bh36aB§$abb4aL und kriegst damit völlig anderen Salat: 9856b0a2333d58ce31f5748e2ea20992eb8c9ceaac4962e7d412b5e2528c2bef Diesen Salat hängst du jetzt an deinen Highscore-Request: score=1683&playername=Hackerboi&hash=9856b0a2333d58ce31f5748e2ea20992eb8c9ceaac4962e7d412b5e2528c2bef und der Server empfängt diese drei Sachen. Jetzt nimmt er die eigentlichen Daten und schmeißt selber noch einmal den Hash-Algorithmus an. Punktzahl und Spielername stammen aus dem Request, das Passwort kennt er selber. Wenn jetzt derselbe Hash dabei rauskommt, wie mit der Anfrage gesendet wurde, dann kann der Server den Highscore akzeptieren. Wenn du jetzt willst, dass man nicht einfach genau dieselbe Anfrage noch einmal senden kann, kannst du noch das aktuelle Datum in die Hash-Funktion schmeißen und mit dem Request mitsenden. Du speicherst dann den Highscore in deiner Datenbank inklusive Datum und akzeptierst nur neuere Requests. Geschützt bist du dadurch vor "Request Forgery", also dem Angriff den du erwähntest: HTTP-Request anschauen, Werte kopieren, Punktzahl erhöhen, selber noch einen Request senden. Da der Angreifer das Passwort nicht kennt, ist es ihm nicht möglich, den Hash zu fälschen. Nicht geschützt bist du damit gegen Angriffe, mit denen jemand das Passwort aus deiner Executable oder gar direkt aus dem Speicher auslesen kann. Ebenfalls nicht geschützt bist du dagegen, dass jemand einfach im Spiel cheatet und das Spiel sozusagen freiwillig einen zu hohen Highscore absendet. Aber wie gesagt... schau erstmal, mit was für einem Angriff du rechnen kannst. Sich gegen die vereinten Kräfte des CCC starkzumachen, um eine Highscoretabelle mit überschaubar vielen Einträgen zu schützen, wäre nicht wirklich zielführend.
×