Wenn wir Fehler um Buch finden, oder Unity sich weiterentwickelt und bestimmte Teile im Buch dadurch nicht mehr aktuell sind, stehen diese Sachen hier. Fehler, die Ihr findet, meldet Ihr am besten im Q&A-Bereich mit dem Tag Errata.

Seite X, Danksagungen: Martin Schulz schreibt sich Martin Schultz. Sorry und Danke an Martin!

Seite 12: Hier steht "Menü: Edit / Open Project". Das Menü Open Project steht aber unter File, es muss also heissen "Menü: File / Open Project". Danke an MichaelH für's Finden und Mitteilen!

Seite 48ff: In einer älteren Version von Unity hiess es hier Pixels To Units - jetzt ist es Pixels Per Unit, was auch logischer ist. Danke an Jascha Achenbach!

Seite 55, unten: um das Timing durch Verschieben von Keyframes auf der Timeline zu feinzutunen - das "zu" war ein "zu" zuviel. Danke an Jascha Achenbach!

Seite 65, ganz unten: Hier hat ein Hinweis auf die Links auf der Webseite zum Buch gefehlt. In Auflage 2 erscheint hier nach "Herzlich Willkommen" folgender Kasten (Links auf unity-buch.de):

Auf der Webseite zum Buch finden Sie unter Links im Bereich zu diesem Abschnitt (2.3.6 Parallax Scrolling hinzufügen) auch mehrere Einstiegspunkte, um C# bzw. sogar das Programmieren an sich zu lernen. (direkt zu den Links)

Seite 80, unten: Die wichtigste Eigenschaft des MeshRenderer ist Material bzw. die Materialien - da fehlt das Plural-S, es ist nämlich Materials. Danke an Jascha Achenbach!

Seite 82, erster Punkt unter Die Wände anlegenErzeugen Sie einen weiteren Würfel mit GameObject / 3D Object / Create Other / Cube, und nennen Sie ihn WallNorth. Da hatte noch "3D Object" gefehlt - früher gab's diese Unterteilung nicht, und ich hab das beim Überarbeiten übersehen. Danke an Jascha Achenbach!

Seite 91: Hier steht, dass man mit gedrückter ALT-Taste das Snapping bei Rotation aktivieren kann. Tatsächlich geht das aber am Mac mit der CMD-Taste und unter Windows mit der STRG- bzw. CTRL-Taste. Danke an Raffli für's Finden und Mitteilen!

Seite 99: MonoBehavior wird in Unity "englisch" buchstabiert, also MonoBehaviour. Im Gegensatz beispielsweise zu Color, was in Unity amerikanisch buchstabiert wird. An der Stelle ist das ein Tippfehler (oder eine Verschlimmbesserung der Rechtschreibkorrektur), evtl. gibt es aber noch andere Stellen.

Seite 111, unten: (und natürlich die jeweils anderene Kameras gleichzeitig zu deaktivieren). Danke an Jascha Achenbach!

Seite 139, unten: da es auch dort einige Einstellungen zur Texturqualität gibt (en hatte gefehlt). Danke an tobiasros für's Finden und Mitteilen (Einträge im Stream kann ich leider nicht direkt verlinken)!

Seite 143, 2. Absatz: Nun sollte bei Ihnen, ähnlich wie in Abb. 6.15das => 6.15 das. Danke an Jascha Achenbach! Eine kleine Anmerkung dazu: Diese Art von Fehler ist im Manuskript aufgrund der dort verwendeten Formatierung sehr schwer zu erkennen. Daher bin ich für Meldungen über solche Fehler besonders dankbar, auch wenn es "ja nur ein Leerzeichen ist, das fehlt".

Seite 144, letzter Absatz: den Shader Legacy Shader / Parallax Diffuse. Das hiess mal Legacy / Parallax Diffuse (wahrscheinlich nur während der Beta von Unity 5.0) - jetzt sind die alten Shader aber unter Legacy Shader zu finden. Danke an Jascha Achenbach!

Seite 145: Das war etwas missverständlich formuliert: "In der Game View ist das immer noch unspektakulär - aber nutzen Sie mal die Scene View, um ganz nah an die Wand zu gehen." - besser verständlich ist: "In der Game View ist das immer noch unspektakulär, weil die Wände recht weit von der Kamera entfernt sind - aber nutzen Sie mal ..." Danke an Jascha Achenbach für das aufmerksam machen darauf, dass man es auch so verstehen könnte, dass die Normal Map in der Game View keinen Effekt hätte!

Seite 158: Die Performance ist für allem => vor allem. Danke an Jascha Achenbach!

Seite 164: (die sind vom im Links-Bereich zu diesem Abschnitt aus verlinkt). Das "sind" hatte gefehlt, dafür war das "im" zu viel, und das "aus" schadet auch nicht. Danke an Jascha Achenbach!

Seite 164, vorletzter Absatz: ist das Fahrzeug vor allen an Stellen => vor allem. Danke an Jascha Achenbach!

Seite 165: ich ich habe erwähnt. Oh oh, zu viel ich! ;-) ... danke an Jascha Achenbach!

Seite 170: über das Menü Windows/Lighting -> Window/Lighting. Danke an Jascha Achenbach!

Seite 171, 172: Reflection Probes funktionieren inzwischen ein wenig anders. Der grün markierte Bereich oben rechts in Abb. 6.43 hat jetzt statt Update On Awake und Editor Update die Eigenschaften Refresh Mode und Time Slicing. Damit ändert sich auf Seite 172 auch der Absatz, der mit "In Abb. 6.43 sehen Sie außerdem noch" anfängt: Für das Arbeiten im Editor beim Einstellen wäre Type = Realtime und Refresh Mode = Every Frame zu empfehlen. Das besagte Script ist bei Refresh Mode = Every Frame dann eigentlich nicht mehr notwendig. Danke an tobiasros für's Finden und Mitteilen! (TODO: Noch im Manuskript für Auflage 2 ändern ;-) )

Seite 179: Die aktuelle Projektversion einschließlich der AmbientOcclusionDemoScene und einer einer reduzierten Testszene. Danke an Jascha Achenbach!

Seite 185: Wir wir gesehen haben -> Wie wir gesehen haben. Danke an Jascha Achenbach!

Seite 186: Achten Sie auf -> Achten Sie darauf. Danke an Jascha Achenbach!

Seite 213: Bei Listing 6.23 sind beim Layout die Fettungen verloren gegangen. Ich versuche mal, das Listing hier einzufügen - hoffe das klappt sauber. Danke an tobiasros für's Finden und Mitteilen (Einträge im Stream kann ich leider nicht direkt verlinken):

private void CheckForTurn() {
    float? testRotation = null;
    if (Input.GetKeyDown(KeyCode.LeftArrow)) {
        testRotation = -90F;
    } else if (Input.GetKeyDown(KeyCode.RightArrow)) {
        testRotation = 90F;
    }

    if (testRotation != null) {
        Turn nextTurn = new Turn();
        nextTurn.rotation = testRotation.Value;
        nextTurn.turnStartPositionFront 
              = snakeHead.transform.position;

        if (turns.Count == 0) {
            nextTurn.turnStartPositionBack 
                  = pointBack.transform.position;
        } else {
            Turn[] turnsArray = turns.ToArray();
            Turn previousTurn = turnsArray[turns.Count - 1];
            nextTurn.turnStartPositionBack 
                 = previousTurn.turnStartPositionFront;
        }

        nextTurn.distanceForTurn = Vector3.Distance(
                      nextTurn.turnStartPositionBack,
                      nextTurn.turnStartPositionFront);

        turns.Enqueue(nextTurn);

        snakeHead.transform.Rotate(0F, 
                                   nextTurn.rotation,
                                   0F);

        snakeHead.velocity 
             = snakeHead.transform.forward * baseVelocity;
    }
}

Seite 229: Es fehlt ein "." vor "Aber etwas mehr Spaß". Danke an Jascha Achenbach!

Seite 234: In Abb. 6.69 sehen Sie beispielsweise meinen Favoriten ShockWave. Der heisst ShockFlash. Danke an tobiasros für's Finden und Mitteilen (Einträge im Stream kann ich leider nicht direkt verlinken).

Seite 235: Der Screenshot Abb. 6.69 ist ganz schön klein - daher habe ich ihn in voller Auflösung jetzt auch verlinkt. In dem Kasten "Link auf unity-buch.de" auf Seite 235 steht ab Auflage 2 als letzter Satz also zusätzlich: Außerdem finden Sie hier auch Abb. 6.69 in voller Auflösung. Und natürlich finden Sie den Link dort auch tatsächlich. Danke an tobiasros für's Finden und Mitteilen!

Seite 239: Also erweitern wir dessen Methode OnTriggerEntered(). Die Methode muss heissen OnTriggerEnter()! Danke an tobiasros für's Finden und Mitteilen!

Seite 241: "Wenn aber- wie" -> "Wenn aber - wie". Danke an Jascha Achenbach!

Seite 243: Daher empfehle, dass -> hier fehlt ein "ich". Danke an Jascha Achenbach!

Seite 246, Listing 7.1: Dort hatte die Variable myRigidbody gefehlt. Danke an tobiasros für's Finden und Mitteilen!

public Transform pointBack;
public Transform pointFront;
public Transform rotateBody;
  
public Rigidbody snakeHeadPrefab;
private Rigidbody snakeHead;

private Rigidbody myRigidbody = null; // <-- fehlt im Buch in Listing 7.1
private WallController wallController = null;
private Queue<Turn> turns = new Queue<Turn>();

void Awake() {
    myRigidbody = GetComponent<Rigidbody>(); // <-- fehlt im Buch in Listing 7.1
wallController = GetComponent(); snakeHead = (Rigidbody) Instantiate(snakeHeadPrefab, pointFront.position, pointFront.rotation); snakeHead.transform.parent = this.transform.parent; snakeHead.name = string.Format("{0}-SnakeHead", this.name); snakeHead.transform.SetAsFirstSibling(); }

Seite 253: Die Datei heisst natürlich Traces_Prototype_130.zip und nicht 0090_Prototype_Polishing.zip (diese Datei gab es früher mal).

Seite 267: 6. Jetzt können ... und zwar in der Reihenfolge nach GameDescription. Das s hatte gefehlt (GameDecription). Danke an tobiasros für's Finden und Mitteilen!

Seite 275: Der Anker soll sich in der rechten linken oberen Ecke der Game View befinden, und wir wollen einen über Pixel definierten Abstand zur rechten oberen Ecke haben. Danke an tobiasros für's Finden und Mitteilen!

Seite 279: added to the build settings -> "t" hatte gefehlt. Danke an Jascha Achenbach!

Seite 306: wie er in Abb. 8.28 abgedruckt -> muss "in Listing 8.25" heißenDanke an Jascha Achenbach!

Seite 319: Download-Kasten: Sie finden sie wie üblich auf der Website zum Buch unter 0140_IconsAndSplashScreen.

Seite 324: IhrMobilgerät -> Leerzeichen fehltDanke an Jascha Achenbach!

Seite 327: Unpdate -> n rausDanke an Jascha Achenbach!

Seite 350: Oben, Punkt 2: Hier wurde bei den Materialien aus MedRes versehentlich MedRed (auch in Punkt 5, und nochmal auf Seite 363, ganz unten, Punkt 7)... und: "Wählen Sie schließlich bei Lightmapper Global Illumination den Wert Dynamic Lightmaps Realtime aus, ..." Danke an tobiasros für's Finden und Mitteilen!

Seite 363: S.o. - beim Materialnamen MedRed statt MedRes.

Seite 368: Bei den Punkten 9. und 10. war Grün und Blau durcheinanderDanke an Jascha Achenbach!

Seite 377, Listing 10.11: lastTckTime muss natürlich heissen lastTickTime. Danke an tobiasros für's Finden und Mitteilen!

Seite 385f, Listing 10.22: Dort hatten zwei Fettungen gefehlt: Die Zeile "using UnityEngine.Events;", und die gesamte Methode "Start()". Danke an tobiasros für's Finden und Mitteilen!

using UnityEngine;
using UnityEngine.Events;

[System.Serializable()]
public class UnityEventScore : UnityEvent { }

public class TracerScore : MonoBehaviour {

    public UnityEventScore onScoreUpdated 
          = new UnityEventScore();

    private int currentScore = 0;
    public int CurrentScore {
        get { return currentScore; }
    }

    public void Start() {
        // immediately notify listeners with initial score
        onScoreUpdated.Invoke(currentScore);
    }

    public void AddScore(int scoreToAdd) {
        currentScore += scoreToAdd;
        onScoreUpdated.Invoke(currentScore);
    }
}

 

Seite 415, Fußnote 13: Die war so kurz, dass man sie leicht missverstehen konnte - in Auflage 2 statt dort dann: Sie erinnern sich sicher: Setzen Sie Scale.x von ImageIcon auf -1. Würden Sie diesen Trick direkt auf ButtonBack anwenden klappt die Animation nicht mehr bzw. bräuchten Sie dann einen eigenen Controller.

Seite 422: "die Keyframes auf 1:00 auf" muss "von 1:00 auf" heißenDanke an Jascha Achenbach!

Seite 428: Objonimation ???Danke an Jascha Achenbach! Zum Glück war das im Manuskript noch korrekt und ist offenbar erst beim Layout kaputt gegangen. Hier der vollständige Abschnitt (das, was im Buch fehlt ist fett markiert):

Im Moment gibt es leider noch keine Möglichkeit, in einer Zustandsmaschine in verschiedenen Zuständen die gleiche Animation für verschiedene Objekte zu verwenden. Und genau das bräuchten wir. Wenn Sie Glück haben, kann Unity das, bis Sie diese Zeilen lesen. Dann wäre die Übung einfach: Nutzen Sie dieses neue Feature.
Andernfalls wird es deutlich komplizierter: Sie brauchen mehrere Zustandsmaschinen für die verschiedenen Objekte, die Sie mit eigenem Code so steuern und synchronisieren, dass wir das gleiche Endergebnis mit einer minimalen Anzahl von A
nimation Clips erhalten.

Seite 457: "Können Sie entsprechenden Assets" -> entsprechende (ohne n am Ende)Danke an Jascha Achenbach!