Generating Heighway dragons in Unity C#
Some quick coding style remarks:


I'm not a fan of K&amp;R style brackets, and it's a style rarely seen in C# code.
I like to see access modifiers on everything. Makes things a lot clearer.
generateDirection, generateVertices etc: method names should be in PascalCase.
You use the opposite of the usual C# style of having underscores in front of private instance field names, instead you use them for parameters. This is very confusing.
'L' and 'R' are used repeatedly, so why not convert these into constants?
Why do you leave a space between your method name and the bracket, e.g. direction.Add ('R');?
direction and dragon are List&lt;T&gt;s, yet their names do not indicate that they are collections. Collection names should be plural, IMHO. I'd even argue this should be the case for Stack&lt;char&gt; stack, though that is a borderline case.
Comment should tell me why, not what. If the method call is generateVertices();, I shouldn't need to be informed //generate vertices and fill dragon -- unless your method name doesn't tell me everything I need to know.
generateDirection starts with a multi-line comment explaining what the method does. I'd expect such an explanation in the &lt;summary&gt;, not in the body of the method.
public int iterations = 4; Why is this public? Why isn't this a const? Is it your intention that this amount can be changed by code calling the HeighwayGenerator? If so, than it should be a property with a getter/setter, or perhaps you should keep iterations private and only allow it to be changed through a method.




Concerning this logic:

for (int i = 0; i &lt; _tempCount; i++) {
    char _tempChar = stack.Pop ();
    if (_tempChar == 'R') {
        direction.Add ('L');
    }
    if (_tempChar == 'L') {
        direction.Add ('R');
    }
}


I fail to see how _tempChar (a badly named variable, by the way) can be anything other than 'L' or 'R', so the second if can just as well be an else.

But this code can be even simpler:

for (int i = 0; i &lt; _tempCount; i++) {
    direction.Add((stack.Pop() == 'R') ? 'L' : 'R');
}




The same remark as the previous one can be said of this code:

if(direction[i] == 'R'){
    transform.Rotate (Vector3.forward, -90.0f);
    transform.position += magnitude * transform.right;
    dragon.Add (transform.position);
}
if (direction[i] == 'L') {
    transform.Rotate (Vector3.forward, 90.0f);
    transform.position += magnitude * transform.right;
    dragon.Add (transform.position);
}


You seem to have copy-pasted three lines which are almost identical for both cases, except for one parameter. If you're doing that, you should extract those lines into a method, or if you feel that's overkill you should simplify your code:

for (int i = 0; i &lt; direction.Count; i++) {
    transform.Rotate (Vector3.forward, (direction[i] == 'R' ? -90.0f : 90.0f));
    transform.position += magnitude * transform.right;
    dragon.Add (transform.position);
}