<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blender Planet</title>
	<atom:link href="http://www.blenderplanet.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.blenderplanet.de</link>
	<description></description>
	<lastBuildDate>Fri, 13 Apr 2012 09:29:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Unity 3D: Scripts für Einsteiger Teil 2</title>
		<link>http://www.blenderplanet.de/tutorials/games/unity-3d-scripts-fur-einsteiger-teil-2/</link>
		<comments>http://www.blenderplanet.de/tutorials/games/unity-3d-scripts-fur-einsteiger-teil-2/#comments</comments>
		<pubDate>Fri, 13 Apr 2012 09:29:28 +0000</pubDate>
		<dc:creator>Lukas Huber</dc:creator>
				<category><![CDATA[Games]]></category>
		<category><![CDATA[Blender]]></category>
		<category><![CDATA[Scripten]]></category>
		<category><![CDATA[Unity 3D]]></category>

		<guid isPermaLink="false">http://www.blenderplanet.de/?p=137</guid>
		<description><![CDATA[1. Kommentare Das ist eigentlich fast schon eine Nebensache, da sie für das Programm keine Relevanz haben: Kommentare. Sie sind dazu da, um den Überblick zu behalten, oder auch, um...]]></description>
			<content:encoded><![CDATA[<h1><span style="font-size: 24px;">1. Kommentare</span></h1>
<p>Das ist eigentlich fast schon eine Nebensache, da sie für das Programm keine Relevanz haben: Kommentare.<br />
Sie sind dazu da, um den Überblick zu behalten, oder auch, um anderen etwas zu verdeutlichen.<br />
Es gibt zwei Sorten von Kommentaren: Einzeilige und Blockkommentare.</p>
<p>Einzeilig:</p>
<pre class="prettyprint" style="padding-left: 30px;"><span style="color: #99cc00;">//Dies ist ein Kommentar und wird nicht vom Programm beachtet</span></pre>
<p>Block:</p>
<pre class="prettyprint" style="padding-left: 30px;"><span style="color: #99cc00;">/* Hiermit gehen auch mehrzeilige Kommentare */</span></pre>
<p>Kommentare werden von ordentlichen Editoren (und der Unity-Scripteditor gehört dazu) farblich abgesondert; praktisch. Kommentare haben einen weiteren Nutzen: Man kann Programmteile &#8220;auskommentieren&#8221;. Setzt man <strong class="bbc">vor</strong> eine Anweisung die beiden // , dann wird sie natürlich nicht mehr ausgeführt. So kann man, falls man will, den Script testen, wie er ohne läuft.</p>
<h1>2. Die If-Abfrage</h1>
<p>Eine Funktion löst eine andere aus &#8211; das ist ja schon ganz nett.<br />
Aber will man ein Spiel schreiben, reicht das noch lange nicht aus.<br />
Es gibt ein paar Strukturen in der Programmierung, die sollte jeder kennen.<br />
Da wäre zum ersten die <strong class="bbc">If-Abfrage</strong>.<br />
&#8220;if&#8221; bedeutet auf deutsch &#8220;falls&#8221;.Die If-Abfrage besteht aus einem Kopf, in dem eine Bedingung steht &#8211; diese ist eine Variable vom Typ boolean (erinnere: ja oder nein) &#8211; und einem Körper, in dem wie bei der Funktion Anweisungen stehen.</p>
<pre class="prettyprint" style="padding-left: 30px;"><span style="color: #3366ff;">if</span>(bedingung)
{
}</pre>
<p>Sollte die Bedingung den Wert &#8220;true&#8221;, also &#8220;ja&#8221;, haben, dann werden die Funktionen im Körper, also zwischen den geschweiften Klammern, ausgeführt, sonst nicht.</p>
<p>Beispiel:</p>
<pre class="prettyprint" style="padding-left: 30px;"><span style="color: #3366ff;">if</span>(true)
{
<span style="color: #3366ff;"> print</span>("Ich scripte hier!");
}
<span style="color: #3366ff;">if</span>(false)
{
  <span style="color: #3366ff;">print</span>("Ich scripte nicht.");
}</pre>
<p>Sollte in dem Körper der Abfrage nur eine einzige Anweisung stehen, darf man die geschweiften Klammern weg lassen.</p>
<p>Ein weiteres Besipiel:</p>
<pre class="prettyprint" style="padding-left: 30px;"><span style="color: #3366ff;">var</span> <span style="color: #800080;">klappt</span> : <span style="color: #3366ff;">boolean</span> = true;
<span style="color: #3366ff;">function</span> <span style="color: #800080;">Start</span>()
{
 <span style="color: #3366ff;">if</span>(<span style="color: #800080;">klappt</span>)
   <span style="color: #3366ff;">print</span>("Es klappt.");
 <span style="color: #800080;">klappt</span> = false;
 <span style="color: #3366ff;">if</span>(<span style="color: #800080;">klappt</span>)
   <span style="color: #3366ff;">print</span>("Wenn das klappt, fress ich einen Besen.");
}</pre>
<p class="citation">Du bemerkt vielleicht, dass ich Zeilen einrücke. Das macht man für gewöhnlich mit Tab (Die Taste links neben Deinem Q), das klappt hier aber nicht so gut, daher hier nur Leerzeichen. Der Sinn dahinter ist, dass man auch bei komplexeren Strukturen nicht den Überblick verliert, welche Anweisung in welcher Abfrage steht. Da hat jeder so seine eigene Methode, ich zum Besipiel setze die öffnende geschweifte Klammer immer unter den Funktions- / Abfragen-Kopf, die meisten setzen sie dahinter. Hauptsache ist, man selbst hat noch den Überblick, optimalerweise auch andere, falls man mal anderen etwas zeigen will.</p>
<p>Nun aber weiter im Text: In If-Abfragen kann man auch andere Variablen benutzen als boolean. Dafür muss man den Wert mit einem anderen <strong class="bbc">vergleichen</strong>. Dabei kommt dann heraus: &#8220;Ist gleich&#8221; oder &#8220;ist ungleich&#8221;, und das ist dann wieder unser benötigter boolean-Wert. Zum Vergleichen benutzt man ein <strong class="bbc">doppeltes Gleichzeichen</strong> ( == ), denn das einfache ist ja schon für die Wertzuweisung zuständig.</p>
<p>Beispiel:</p>
<pre class="prettyprint" style="padding-left: 30px;"><span style="color: #3366ff;">if</span>(3 == 4)
  <span style="color: #3366ff;">print</span>("Diese Anweisung wird nicht ausgeführt werden.");

<span style="color: #3366ff;">var</span> <span style="color: #800080;">hi</span> : <span style="color: #3366ff;">String</span> = "Hallo";
<span style="color: #3366ff;">if</span>(<span style="color: #800080;">hi</span> == "Hallo")
  <span style="color: #3366ff;">print</span>("Diese Anweisung wird ausgeführt.");</pre>
<div class="blockquote">
<div class="quote">
<p>Für mathematische Vergleiche gibt es auch noch andere Operatoren als &#8220;==&#8221;.</p>
<p>Zum Beispiel:</p>
<ul>
<li>&lt; kleiner als</li>
<li>&gt; größer als</li>
<li>&lt;= kleiner oder gleich</li>
<li>&gt;= größer oder gleich</li>
<li>!= ungleich</li>
</ul>
<h1>3. Logische Operatoren</h1>
</div>
</div>
<p>Mehrere Bedingungen ( = boolean-Variablen) lassen sich zu einer zusammenfügen, indem man so genannte <strong class="bbc">logische Operatoren</strong> verwendet. So kann man im Script abfragen, ob zwei Bedingungen stimmen, oder nur eine von beiden. Da wäre zum einen das <strong class="bbc">logische Und</strong> ( &amp;&amp; ).</p>
<pre class="prettyprint" style="padding-left: 30px;"><span style="color: #3366ff;">if</span>(4 &gt; 3.5 &amp;&amp; "wurst" != "käse")
<span style="color: #3366ff;"> print</span>("Das hier wird ausgeführt");
<span style="color: #3366ff;">if</span>(4 &gt; 3.5 &amp;&amp; "wurst" == 5)
  <span style="color: #3366ff;">print</span>("Das hier bestimmt nicht.");</pre>
<p>Auf diese Weise lassen sich belieblig viele Bedingungen kombinieren.<br />
So spart man sich das Stapeln von Abfragen:</p>
<pre class="prettyprint" style="padding-left: 30px;"><span style="color: #3366ff;">if</span>(4 &gt; 3.5)
{
 <span style="color: #3366ff;">if</span>("wurst" != "käse")
 <span style="color: #3366ff;"> print</span>("Das hier würde genau so funktionieren wie das oben.");
}</pre>
<p>Dann gibt es noch das <strong class="bbc">logische Oder</strong> ( || ).<br />
Einen | erzeugt man mit AltGr+&lt; (die Taste neben der linken Umschalttaste).<br />
Eine Oder-Bedingung gilt dann als wahr, wenn eine ihrer Teilbedingungen wahr sind:</p>
<pre class="prettyprint" style="padding-left: 30px;"><span style="color: #3366ff;">var</span> <span style="color: #800080;">zahl</span> : <span style="color: #3366ff;">int</span> = 4;
<span style="color: #3366ff;">if</span>(<span style="color: #800080;">zahl</span> == 2 || <span style="color: #800080;">zahl</span> == 4)
<span style="color: #3366ff;">print</span>("Das hier wird sowas von ausgeführt...");</pre>
<p>Mehrere logische Operationen sollten unbedingt voneinander abgetrennt werden, das geschieht mit normalen Klammern ( ( und ) ):</p>
<pre class="prettyprint" style="padding-left: 30px;"><span style="color: #3366ff;">if</span>(("a" == "b" || 3 == 3) &amp;&amp; 2 &gt; 0)
  <span style="color: #3366ff;">print</span>("Auch das hier wird ausgeführt.");</pre>
<h1 class="prettyprint">4. Else</h1>
<p>&#8220;else&#8221; heißt auf deutsch &#8220;sonst&#8221;, und das passt.<br />
Wer aufgepasst hat, kann sich die Funktion schon denken:</p>
<pre class="prettyprint" style="padding-left: 30px;"><span style="color: #3366ff;">if</span>(3 &gt; 5)
  <span style="color: #3366ff;">print</span>("Das wird nicht ausgeführt");
<span style="color: #3366ff;">else </span>
  <span style="color: #3366ff;">print</span>("Das aber schon.")</pre>
<p>auch else kann einen Körper mit geschweiften Klammern haben, damit es mehrere Anweisungen gibt:</p>
<pre class="prettyprint" style="padding-left: 30px;"><span style="color: #3366ff;">if</span>(false)
{
  <span style="color: #99cc00;">//...
</span>}
<span style="color: #3366ff;">else
</span>{
  <span style="color: #99cc00;">//...
</span>}</pre>
<h1 class="prettyprint">5. While-Schleife</h1>
<p class="prettyprint">Jetzt kommt noch eine weitere Struktur. Sie ist der If-Abfrage sehr ähnlich, hat aber den Unterschied, dass die Anweisungen im Körper nicht nur ein Mal ausgeführt werden, wenn im Kopf &#8220;true&#8221; steht, sondern <strong class="bbc">immer wieder ausgeführt werden</strong>, bis &#8220;false&#8221; im Kopf steht. Das ist in den allermeisten Fällen nur sinnvoll, wenn der Wert, um den es im Kopf geht, im Körper geändert wird.</p>
<pre class="prettyprint" style="padding-left: 30px;"><span style="color: #3366ff;">var</span> <span style="color: #800080;">zahl</span> : <span style="color: #3366ff;">int</span> = 0;
<span style="color: #3366ff;">while</span>(<span style="color: #800080;">zahl</span> &lt; 5)
{
  <span style="color: #3366ff;">print</span>("Es wird getan!");
  <span style="color: #800080;">zahl</span> = <span style="color: #800080;">zahl</span> + 1;
}</pre>
<p>Am Ende haben wir hier fünf Mal den angegebenen Satz in der Konsole stehen. Daran sieht man schon einmal den primären Nutzen von Schleifen: etwas soll x Mal ausgeführt werden. Für diesen Zweck allerdings ist die For-Schleife nützlicher. Bevor die dran kommt, erst einmal neue Operatoren!</p>
<h1>6. Neue Operatoren</h1>
<p>Es gibt ein paar nützliche Operatoren, die noch gar nicht dran kamen.<br />
Da gibt es z.B. + als &#8220;Concat&#8221;-Operator, der Strings zusammenfügt:</p>
<pre class="prettyprint" style="padding-left: 30px;"><span style="color: #3366ff;">var</span> <span style="color: #800080;">name</span> : <span style="color: #3366ff;">String</span> = "Hase";
<span style="color: #3366ff;">print</span>("Mein Name ist "+<span style="color: #800080;">name</span>+".");</pre>
<p>Wer errät&#8217;s? Am Ende steht da &#8220;Mein Name ist Hase.&#8221;<br />
Sehr wichtig!<br />
Das funktioniert auch mit Strings und Zahlen:</p>
<pre class="prettyprint" style="padding-left: 30px;"><span style="color: #3366ff;">var</span> <span style="color: #800080;">zahl</span> : <span style="color: #3366ff;">int</span> = 3;
<span style="color: #3366ff;">print</span>("Die Nummer lautet "+<span style="color: #800080;">zahl</span>);</pre>
<p>Aber Vorsicht bei Rechnungen in diesem Falle, benutze Klammern!</p>
<pre class="prettyprint" style="padding-left: 30px;"><span style="color: #3366ff;">print</span>("Drei plus zwei ist "+(3+2));</pre>
<p>&#8230;denn das + ist immernoch auch zum Rechnen da.<br />
Jetzt gibt es noch schnelle Rechenoperatoren:</p>
<pre class="prettyprint" style="padding-left: 30px;"><span style="color: #800080;">zahl</span>++;</pre>
<p>Erhöht &#8220;zahl&#8221; um 1, genau wie</p>
<pre class="prettyprint" style="padding-left: 30px;"><span style="color: #800080;">zahl</span>--;</pre>
<p>&#8230;&#8221;zahl&#8221; um 1 verringert.<br />
Dann gibt es noch diese:</p>
<pre class="prettyprint" style="padding-left: 30px;"><span style="color: #800080;">zahl</span> += 5; <span style="color: #99cc00;">//entspricht zahl = zahl + 5;
</span><span style="color: #800080;">zahl</span> -= 5; <span style="color: #99cc00;">//entspricht zahl = zahl - 5;
</span><span style="color: #800080;">zahl</span> *= 5; <span style="color: #99cc00;">//entspricht zahl = zahl * 5;
</span><span style="color: #800080;">zahl</span> /= 5; <span style="color: #99cc00;">//entspricht zahl = zahl / 5;</span></pre>
<p>&#8230;für schnelleres Rechnen. Yay!<br />
Dann gibt es noch das Ausrufezeichen ( ! ). Dieses kann man benutzen, um boolean-Werte umzukehren.<br />
Dieser Code:</p>
<pre class="prettyprint" style="padding-left: 30px;"><span style="color: #3366ff;">if</span>(<span style="color: #800080;">lebtNoch</span> == false)</pre>
<p>&#8230;entspricht diesem:</p>
<pre class="prettyprint" style="padding-left: 30px;"><span style="color: #3366ff;">if</span>(!<span style="color: #800080;">lebtNoch</span>)</pre>
<p>Das ist nicht notwendig, aber ganz schön praktisch!</p>
<h1>7. For-Schleife</h1>
<p>Mit der For-Schleife geht Zählen besser als je zuvor!<br />
Anstatt sie aber im Detail zu erläutern, werde ich jetzt erstmal einfach die gängigste Verwendungsweise vorstellen:</p>
<pre class="prettyprint" style="padding-left: 30px;"><span style="color: #3366ff;">var</span> <span style="color: #800080;">wieOft</span> : <span style="color: #3366ff;">int</span> = 5;
<span style="color: #3366ff;">for</span>(<span style="color: #3366ff;">var</span> <span style="color: #800080;">i</span> : <span style="color: #3366ff;">int</span> = 0; <span style="color: #800080;">i</span> &lt; <span style="color: #800080;">wieOft</span>; <span style="color: #800080;">i</span>++)
{
  <span style="color: #3366ff;">print</span>("Wir sind bei "+<span style="color: #800080;">i</span>);
}</pre>
<p>Der Kopf der For-Schleife besteht aus drei Teilen, die per Semikolon ( ; ) voneinander getrennt sind. Der erste Teil ist eine Anweisung, die am Anfang der Schleife ausgeführt wird (hier kann man eine Variable deklarieren und initialisieren!), der zweite Teil ist eine Bedingung, die vor jedem Durchlauf der Schleife abgefragt wird (genau wie in der While-Schleife, bei false wird die Schleife abgebrochen), der dritte Teil ist wieder eine Anweisung, die nach jedem Durchlauf ausgeführt wird. Dieser Code ist also von der Funktion her identisch mit diesem:</p>
<pre class="prettyprint" style="padding-left: 30px;"><span style="color: #3366ff;">var</span> <span style="color: #800080;">wieOft</span> : <span style="color: #3366ff;">int</span> = 5;
<span style="color: #3366ff;">var</span> <span style="color: #800080;">i</span> : <span style="color: #3366ff;">int</span> = 0;
<span style="color: #3366ff;">while</span>(<span style="color: #800080;">i</span> &lt; <span style="color: #800080;">wieOft</span>)
{
  <span style="color: #3366ff;">print</span>("Wir sind bei "+<span style="color: #800080;">i</span>);
<span style="color: #800080;"> i</span>++;
}</pre>
<p>&#8230;und ist dabei wesentlich sauberer und schicker.</p>
<h1>8. Return und Break</h1>
<p>Return wurde im vorherigen Tutorial benutzt; mit return lassen sich Werte von einer Funktion zurück geben.<br />
Wer sich nicht erinnert: Die Funktion wird dadurch beendet.<br />
Man kann return auch ohne Wert benutzen:</p>
<pre class="prettyprint" style="padding-left: 30px;"><span style="color: #3366ff;">return</span>;</pre>
<p>&#8230;einfach, um die Funktion zu beenden. Das hat einen ganz einfachen nutzen: Man spart sich jede Menge geschweifter Klammern. Denn anstatt einen riesigen Anweisungsblock einer Funktion komplett in eine If-Anweisung zu packen (man denke nur ans nachträgliche Einrücken&#8230;), kann man einfach die Funktion am Anfang mit diesem Code versehen:</p>
<pre class="prettyprint" style="padding-left: 30px;"><span style="color: #3366ff;">if</span>(!<span style="color: #800080;">wirdGemacht</span>)
  <span style="color: #3366ff;">return</span>;
<span style="color: #99cc00;">//...</span></pre>
<p><strong class="bbc">Break</strong> ist ein Befehl, der ähnlich wie return verwendet wird, er beendet aber nicht die Funktion, sondern die Schleife, in der er steht.<br />
Logischerweise gibt&#8217;s hier keinen Rückgabewert, Schleifen haben ja keinen.</p>
<pre class="prettyprint" style="padding-left: 30px;"><span style="color: #3366ff;">while</span>(<span style="color: #800080;">zahl</span> &lt; 5)
{
  <span style="color: #3366ff;">if</span>(<span style="color: #800080;">zahl</span> == 4) <span style="color: #99cc00;">//Ich würd gerne vorher abbrechen... </span>    <span style="color: #3366ff;">break</span>;
  <span style="color: #3366ff;">print</span>("Wetten, das hier wird nicht ausgeführt, wenn zahl gleich 4 ist?");
}</pre>
<p>Dieser Code macht nicht viel Sinn, aber break kann durchaus von großem Nutzen sein.</p>
<h1>9. Switch-Case-Abfrage</h1>
<p>Eine interessante Abfrage gibt es noch:<br />
Man stelle sich vor, man hat eine Zahl, und abhängig von dieser möchte man etwas tun. Eine KI zum Beispiel hat eine Variable &#8220;modus&#8221;. Ist modus 1, so steht sie herum, bei 2 sucht sie den Spieler, bei 3 schießt sie wild umher und bei 4 tanzt sie Disco Fox. Will man das Verhalten nun abhängig vom Modus gestalten, bietet sich theoretisch eine Reihe von If-Abfragen an:</p>
<pre class="prettyprint" style="padding-left: 30px;"><span style="color: #3366ff;">if</span>(<span style="color: #800080;">mode</span> == 1)
<span style="color: #3366ff;"> Idle</span>();
<span style="color: #3366ff;">else if</span>(<span style="color: #800080;">mode</span> == 2)
<span style="color: #3366ff;"> Search</span>(player);
<span style="color: #99cc00;">//usw.</span></pre>
<p>Das ist etwas unschön und verstößt auch gegen einige Regeln für sauberes Programmieren. Ändert man nämlich den Namen der Variable, schaut man doof aus der Wäsche. Deshalb schafft <strong class="bbc">switch-case</strong> Abhilfe. Der Code oben lässt sich in einer Case-Abfrage so ausdrücken:</p>
<pre class="prettyprint" style="padding-left: 30px;"><span style="color: #3366ff;">switch</span>(<span style="color: #800080;">mode</span>)
{
  <span style="color: #3366ff;">case 1</span>:
    <span style="color: #3366ff;">Idle</span>();
    <span style="color: #3366ff;">break</span>;
  <span style="color: #3366ff;">case 2</span>:
    <span style="color: #3366ff;">Search</span>(player);
    <span style="color: #3366ff;">break</span>;
 <span style="color: #99cc00;">//usw. </span>}</pre>
<p>Das break ist wichtig, weil die Engine ohne das Schlüsselwort auch bei einer Übereinstimmung den Switch-Block weiter abarbeitet. Sollte in einem Case-Block &#8220;return&#8221; mit Sicherheit aufgerufen werden, darf man sich das break natürlich sparen.<br />
Ein Schlüsselwort gibt es noch: <strong class="bbc">default</strong>.</p>
<pre class="prettyprint" style="padding-left: 30px;"><span style="color: #3366ff;">switch</span>(<span style="color: #800080;">mode</span>)
{
  <span style="color: #3366ff;">default</span>:
    <span style="color: #99cc00;">//... </span>
  <span style="color: #3366ff;">break</span>;
}</pre>
<p>Der Code in einem default-Block wird immer ausgeführt und kommt daher z.B. an die Reihe, wenn mode aus irgendeinem Grund -1 ist. Er kommt nach allen case-Blöcken vor Ende des Switch-Blocks. Er sollte samt break immer vorhanden sein, auch wenn kein Code darin steht, sonst gibt es ja kein break!</p>
<h1>10. Abschließende Worte</h1>
<p>All das hat in Unity überhaupt keinen direkten Nutzen gehabt. Wir haben ja nicht einmal einen neuen Script geschrieben. Aber sicherlich kannst Du Dir denken, dass man ohne Abfragen und Schleifen nicht weit kommt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blenderplanet.de/tutorials/games/unity-3d-scripts-fur-einsteiger-teil-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Time Lapse: Kleidungssimulation</title>
		<link>http://www.blenderplanet.de/time-lapses/time-lapse-kleidungssimulation/</link>
		<comments>http://www.blenderplanet.de/time-lapses/time-lapse-kleidungssimulation/#comments</comments>
		<pubDate>Sat, 10 Sep 2011 17:12:46 +0000</pubDate>
		<dc:creator>Lukas Huber</dc:creator>
				<category><![CDATA[Time Lapses]]></category>
		<category><![CDATA[Blender]]></category>
		<category><![CDATA[Simulatieren]]></category>
		<category><![CDATA[Texturieren]]></category>

		<guid isPermaLink="false">http://www.blenderplanet.de/?p=124</guid>
		<description><![CDATA[Mit diesem Time Lapse möchte ich euch zeigen, wie einfach die Simulationen in Blender zu bedienen sind. Das hier gezeigte Beispiel ist zwar sehr simpel, aber effektiv um zu veranschaulichen...]]></description>
			<content:encoded><![CDATA[<p>Mit diesem Time Lapse möchte ich euch zeigen, wie einfach die Simulationen in Blender zu bedienen sind. Das hier gezeigte Beispiel ist zwar sehr simpel, aber effektiv um zu veranschaulichen wie leicht es ist eine kleine Idee in Blender umzusetzen.</p>
<p><iframe src="http://player.vimeo.com/video/28861643?portrait=0&amp;color=ffffff" frameborder="0" width="620" height="465"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.blenderplanet.de/time-lapses/time-lapse-kleidungssimulation/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Unity 3D: Scripts für Einsteiger Teil 1</title>
		<link>http://www.blenderplanet.de/tutorials/games/unity-3d-scripts-fur-einsteiger/</link>
		<comments>http://www.blenderplanet.de/tutorials/games/unity-3d-scripts-fur-einsteiger/#comments</comments>
		<pubDate>Fri, 09 Sep 2011 12:04:03 +0000</pubDate>
		<dc:creator>Lukas Huber</dc:creator>
				<category><![CDATA[Games]]></category>
		<category><![CDATA[Blender]]></category>
		<category><![CDATA[Scripten]]></category>
		<category><![CDATA[Unity 3D]]></category>

		<guid isPermaLink="false">http://www.blenderplanet.de/?p=95</guid>
		<description><![CDATA[Viele von euch haben vielleicht den Traum, selbst ein Spiel zu kreieren, stehen aber vor dem Problem, eine Programmiersprache lernen zu müssen. Mit diesem Tutorial möchte ich euch den Einstieg...]]></description>
			<content:encoded><![CDATA[<p>Viele von euch haben vielleicht den Traum, selbst ein Spiel zu kreieren, stehen aber vor dem Problem, eine Programmiersprache lernen zu müssen. Mit diesem Tutorial möchte ich euch den Einstieg dazu erleichtern.</p>
<p>Da das Kreieren von Spiele nicht nur dem Erstellen von Objekten und die Animationen von diesen besteht, möchte ich hier eine kurze Einführung in Javascript präsentieren. Dieses Tutorial besteht aus drei einzelnen Teilen, welche aufeinander aufbauen.</p>
<h1>        1. Die Grundlagen</h1>
<p>Wer Unity 3D schon einmal gestartet und sich ein wenig damit beschäftigt hat, hat vielleicht schon folgendes erkannt:</p>
<ul>
<li>Ein Spiel besteht aus mehreren Szenen (Level)</li>
<li>Eine Szene besteht aus den mehreren GameObjects</li>
<li>Ein GameObject besteht aus mehreren Components</li>
</ul>
<p>Ein GameObject ist eine Instanz, was soviel bedeutet wie, dass es aus nichts besteht. Es hat keine Form oder Animation. Erst das Hinzufügen von Komponente definiert das Aussehen und das Verhalten von GameObjects.<br />
Wenn man dem Gameobjects nun also ein Mesh hinzufügt, so ist dieses später auch im Spiel sichtbar. Ein zusätzlicher Script veranlasst, dass dieses GameObject auch einem bestimmten Verhalten folgt.</p>
<p>Es ist also für das Kreieren von Spielen notwendig, auch das Programmieren zu beherrschen, denn ohne Scripts lässt sich das Spiel nicht steuern.<br />
Zwar stellt Unity 3D einige nützliche Scripts zu Verfügung, doch reichen diese nicht aus um ein anständiges Spiel zu machen.</p>
<p>In Unity 3D verwendet man ein anderes System für die Scripts als in vergleichbaren Engines.<br />
Nicht ein Script steuert alle GameObjects &#8211; was die Übersichtlichkeit und Einfachheit beeinträchtigt -, sondern jedes GameObject besitzt seinen eigenen Script.<br />
Natürlich kommt es auch vor, dass ein Script bei mehreren GameObjects Verwendung findet.</p>
<h2>                1.1 Die Variablen</h2>
<p>Eine Variable besteht im Grunde aus drei Bestandteilen: Aus einem Namen, einem Datentyp und dem passenden Wert.<br />
Sie sind notwendig, um beim Programmieren Werte zu speichern, Rechnungen durchzuführen oder Wert übergeben zu können. Ohne Variablen könnte man &#8211; schlicht gesagt &#8211; nicht programmieren.</p>
<p>Ein Dateityp bestimmt welche Art von Wert eine Variable beinhaltet.<br />
So enthält eine Integer-Variable eine Ganzzahl und kann keine Buchstaben bzw. andere Zeichen speichern. (Abgesehen vom Vorzeichen)<br />
Eine String-Variable beinhaltet hingegen einen Zeichenfolge, z.B. &#8220;Hallo&#8221;. Bei dieser Art von Variable können allerdings alle Zeichen gespeichert werden, z.B. &#8220;Hallo123@&#8221;. Allerdings kann man mit dieser String-Variable nicht rechnen.<br />
Was dies genau bedeutet, werdet ihr später erkennen.<br />
Es gibt unendlich viele Dateitypen, zumal man sich eigene Dateitypen schreiben kann &#8211; sogenannte Klassen.<br />
Ihr werdet allerdings für den Anfang nur folgende primitive Dateitypen benötigen:</p>
<ul>
<li>int &#8211; Integer-Variable um Ganzzahlen zu speichern</li>
<li>float &#8211; Float-Variable um Kommazahlen zu speichern</li>
<li>double &#8211; Double-Variable um Kommazahlen mit hoher Genauigkeit zu speichern</li>
<li>boolean &#8211; Boolean-Variable um Wahrheitswerte &#8211; Wahr und Falsch &#8211; zu speichern</li>
<li>string &#8211; String-Variable um eine Zeichenfolge zu speichern</li>
</ul>
<p>Eine Variable wird in Javascript wie folgt deklariert:</p>
<blockquote><p><span style="color: #3366ff;">var</span> name;</p></blockquote>
<p>Das &#8220;var&#8221; wird vom Editor blau unterlegt, um zu kennzeichnen, dass es sich um einen bekannten Befehl handelt und gibt dem Compiler bekannt, dass man hier eine Variable deklarieren möchte<br />
Direkt an das &#8220;var&#8221; anschließend folgt der Name der Variable.<br />
In Javascript ist es üblich die Namen kleinzuschreiben.<br />
Weiters sind folgende Regeln, bei der Namensgebung zu beachten:</p>
<ul>
<li>Nur Buchstaben und Ziffern</li>
<li>Keine Sonderzeichen, Umlaute oder Leerzeichen, ausgenommen Tiefstrich &#8220;_&#8221;</li>
<li>Name muss mit einem Buchstaben beginnen</li>
</ul>
<p>Man kann der Variable direkt bei der Deklaration auch einen Wert zuweisen.<br />
Dafür verwendet man einfach das &#8220;=&#8221;. In anderen Programmiersprachen muss man dafür allerdings auch zuvor bekannt geben, um welchen Dateitypen es sich handelt.<br />
Nicht so in Javascript. Die Programmiersprache findet von selbst heraus, welcher Typ übergeben wird.<br />
Eine Wertübergabe bei der Deklaration sieht wie folgt aus:</p>
<blockquote><p><span style="color: #3366ff;">var</span> name = 123;</p></blockquote>
<p>Javascript definiert nun &#8220;name&#8221; als Integer-Variable, da es sich bei dem Wert um einen Integer handelt.<br />
Das Erkennen des Dateitypen beeinflusst allerdings die Performance des Scripts, weswegen man immer den Dateitypen von Hand bekanntgeben sollte.<br />
Die macht man mit einem &#8220;:&#8221;</p>
<blockquote><p><span style="color: #3366ff;">var</span> name : <span style="color: #3366ff;">int</span> = 123;</p></blockquote>
<p>Natürlich muss man den Wert nicht direkt bei der Deklaration bekannt geben, sondern kann ihn auch später zuweisen.</p>
<blockquote><p><span style="color: #3366ff;">var</span> name : <span style="color: #3366ff;">int</span>;<br />
name = 123;</p></blockquote>
<p>Man wird dies so nicht schreiben, allerdings könnte es sein, dass man eine Rechnung durchführen will, wodurch man eine leere Variable benötigt, in welche das spätere Ergebnis gespeichert werden soll.</p>
<p>Euch sind vielleicht die Semikolon &#8220;;&#8221; nach jeder Zeile aufgefallen. Diese sind notwendig um einen Befehl abzuschließen und werden somit auch nach jedem Befehl benötigt. Es gibt ein paar Ausnahmen, bei welchen kein Semikolon notwendig ist.</p>
<p>In Unity 3D gibt es ein Fenster namens Inspector in welchen sich die einzelnen Variablen der Scripts auch einstellen lassen. Deklariert man nun so wie oben gezeicht eine Variable, erscheint diese mit ihrem Namen im Inspector.<br />
Will man dies allerdings nicht, so muss man eine Variable als &#8220;private&#8221; markieren.</p>
<blockquote><p><span style="color: #3366ff;">private var</span> name : <span style="color: #3366ff;">int</span> = 123</p></blockquote>
<p>Diese Variable wird nicht im Inspector erscheinen, wodurch sie sich auch nicht von außerhalb verändern lässt.</p>
<p>Hat man nun einen Script bei mehreren GameObjects in Verwendung und stellt man im Inspector eines GameObjects den Wert einer Variable um, so wird nur der Wert des einzelnen GameObjects verstellt und nicht die Werte aller GameObjects.<br />
Verändert man allerdings einen Wert im Script selbst, so wird der Wert bei allen GameObjects verändert.</p>
<h2>                1.2 Die Funktionen</h2>
<p>Eine Funktion ist das entscheidende in jeder Programmiersprache. Sie enthält die einzelnen Anweisungen, wie z.B Wertzuweisungen, Rechenschritte oder ruft eine weitere Funktion auf. Eine Funktion wird wie folgt deklariert:</p>
<blockquote><p><span style="color: #3366ff;">function</span> <span style="color: #800080;">Name</span> ()<br />
{<br />
<span style="color: #99cc00;">//Die einzelnen Anweisungen</span><br />
}</p></blockquote>
<p>Bei der Namensgebung sind die Regeln wie bei den Variablen zu beachten, nur das der erste Buchstabe groß geschrieben wird.<br />
Zwischen den runden Klammern &#8221;(&#8221; und &#8220;)&#8221; stehen die Parameter, welche beim Aufrufen der Funktion übergeben werden müssen. Dies werden ihr noch nicht verstehen, da noch die Grundlagen dazu fehlen. Später dazu mehr.<br />
Zwischen den geschweiften Klammern &#8220;{&#8221; und &#8220;}&#8221; stehen die Anweisungen welche die Funktion später durchführen soll.</p>
<p>Bei der Deklaration von Funktionen ist kein Semikolon notwendig.</p>
<p>Ruft man nun eine Funktion in einer Funktion auf, so wird die aufgerufene Funktion zuerst abgearbeitet und gibt anschließend &#8211; wenn so programmiert &#8211; einen Rückgabewert zurück.<br />
Eine Funktion wird wie folgt aufgerufen:</p>
<blockquote><p><span style="color: #3366ff;">funktion</span> <span style="color: #800080;">Name</span> ()<br />
{<br />
AufzurufendeFunktion ();<br />
}</p></blockquote>
<p>Dazu ist allerdings notwendig, dass die aufzurufende Funktion auch existiert, da ansonsten der Script nicht funktioniert und eine Fehlermeldung ausgegeben wird.</p>
<p>In Unity 3D gibt es drei vordefinierte Funktionsnamen:</p>
<ul>
<li>Awake ()<br />
Wird aufgerufen, wenn das GameObject initialisiert wird</li>
<li>Start ()<br />
Wird aufgerufen, wenn das GameObject fertig initialisiert worden ist</li>
<li>Update ()<br />
Wird bei jedem neuen Frame (Bild) aufgerufen</li>
</ul>
<h2>                1.3 Die Parameter</h2>
<p>Beim Aufrufen einer Funktion können Parameter übergeben werden, mit welchen dann die aufgerufene Funktion weiterarbeiten kann. Diese Parameter müssen allerdings schon beim Schreiben der Funktion deklariert werden.</p>
<blockquote><p><span style="color: #3366ff;">function</span> <span style="color: #800080;">Addieren</span> (zahl : <span style="color: #3366ff;">int</span>)<br />
{<br />
<span style="color: #3366ff;">return</span> (zahl + 2);<br />
}</p></blockquote>
<p>Diese Funktion enthält auch schon den Befehl &#8220;return&#8221;, welcher im Kapitel &#8220;Der Rückgabewert&#8221; weiter behandelt wird.<br />
Hier ist nur zu wissen, dass diese Funktion eine Zahl mit 2 addiert und das Ergebnis danach als Rückgabewert an die aufrufende Funktion zurückgibt. Ruft man also die Funktion wie folgt auf:</p>
<blockquote><p><span style="color: #3366ff;">function</span> <span style="color: #800080;">Name</span> ()<br />
{<br />
Addieren(3);<br />
}</p></blockquote>
<p>&#8230; so erhält man den Wert 5 zurück.</p>
<p>Zusammengefasst bedeute dies nun: Man deklariert beim Schreiben einer Funktion die einzelnen Parameter, welche beim späteren Aufrufen der Funktion übergeben werden müssen. Die Funktion kann dann mit diesen übergebenen Parameter/Werten weiterarbeiten.</p>
<p>Natürlich kann man alternativ auch eine Variable mit dem passenden Dateitypen übergeben. Wenn wir nun die zuvor geschriebene Funktion &#8220;Addieren (zahl : int)&#8221; verwenden:</p>
<blockquote><p><span style="color: #3366ff;">var</span> geschwindigkeit : <span style="color: #3366ff;">int</span> = 10;</p>
<p><span style="color: #3366ff;">function</span> <span style="color: #800080;">Update</span> ()<br />
{<br />
Addieren(geschwindigkeit);<br />
}</p></blockquote>
<p>&#8230; so wird die Variable &#8220;geschwindigkeit&#8221; jedes Frame um 2 erhöht.</p>
<p>Dabei ist natürlich zu beachten, dass die übergebenen Parameter auch die richtigen Dateitypen besitzen.</p>
<h2>                1.4 Der Rückgabewert</h2>
<p>Der Rückgabewert ist jener Wert, den eine Funktion zurückgibt, wenn sie beendet wird. Beispielsweise kann eine Funktion eine bestimmte Rechnung durchführen und danach das Ergebnis als Rückgabewert an die aufrufende Funktion zurückgeben, damit diese mit dem Ergebnis weiterarbeiten kann. Natürlich könnte man auch die Rechnung direkt in der aufrufenden Funktion durchführen, aber durch das verschachteln der Funktionen wahrt man die Übersichtlichkeit. Außerdem kann es vorkommen, dass man eine bestimmte Rechnung mehrmals im Programmcode benötigt, wodurch man sich das mehrmalige Schreiben der Rechnung erspart und stattdessen nur immer wieder die benötigte Funktion aufruft.</p>
<p>Das Schlüsselwort für einen solchen Rückgabewert ist &#8220;return&#8221;. Sobald return aufgerufen wurde, beendet sich die Funktion, wodurch es natürlich immer am Ende steht.<br />
Als Beispiel werde ich eine Funktion schreiben, welche die Quadratzahl eines übergebenen Parameters ausrechnet und das Ergebnis danach zurückliefert.</p>
<blockquote><p><span style="color: #3366ff;">function</span> <span style="color: #800080;">Quadratzahl </span>(zahl :  <span style="color: #3366ff;">int</span>)<br />
{<br />
zahl = zahl * zahl;<br />
<span style="color: #3366ff;">return</span> zahl;<br />
}</p></blockquote>
<p>Wie man sieht, rechnet diese Funktion das Quadrat des übergebenen Parameters aus und gibt in zurück.<br />
Alternativ dazu kann man die Rechnung auch so durchführen lassen:</p>
<blockquote><p><span style="color: #3366ff;">function</span> <span style="color: #800080;">Quadratzahl</span> (zahl :  <span style="color: #3366ff;">int</span>)<br />
{<br />
<span style="color: #3366ff;">return</span> zahl * zahl;<br />
}</p></blockquote>
<p>Die lässt sich aber natürlich nur bei einfachen Rechnungen so durchführen.</p>
<p>Ruft man diese Funktion nun in einer anderen Funktion auf, so erhält man das Ergebnis zurück. Um dies zu veranschaulichen, habe ich folgendes Programm geschrieben:</p>
<blockquote><p><span style="color: #3366ff;">var</span> ergebnis : int;<br />
<span style="color: #3366ff;">var</span> zahl : int = 5;</p>
<p><span style="color: #3366ff;">function</span> <span style="color: #800080;">AufrufendeFunktion</span> ()<br />
{<br />
ergebnis = QuadratZahl (zahl);<br />
}</p></blockquote>
<p>Dieses Programm ruft die Funktion &#8220;QuadratZahl(zahl : int)&#8221; auf und übergibt ihr den Wert 5. Diese wiederrum liefert den Wert 25 zurück, welcher in der Variable &#8220;ergebnis&#8221; gespeichert wird.<br />
Dies ist ein sehr einfaches Beispiel, aber es veranschaulicht alle Themen, welche in diesem Tutorial durchgenommen wurden.</p>
<h1>        2. Was haben wir gelernt&#8230;</h1>
<p>Ihr habt nun die Grundlagen für das Programmieren in Unity gelernt, allerdings fehlen hier noch einige wichtige Themen. Diese werden aber in den folgenden Teilen behandelt.<br />
Nach diesem Tutorial wisst ihr:</p>
<ul>
<li>wie man Variablen korrekt deklariert</li>
<li>&#8230; und diese auch im Programmcode verwendet</li>
<li>Funktionen schreibt</li>
<li>&#8230; und aufruft</li>
<li>Parameter benutzt</li>
<li>Rückgabewerte verwendet</li>
</ul>
<p>Wie euch vielleicht aufgefallen ist, habe ich hier schon einige simple Rechenoperatoren wie + (addieren) und * (multiplizieren) verwendet. Diese werden noch in den folgenden Teilen genauer untersuchen.<br />
Weiters habe ich auch den Programmcode im inneren einer Funktion eingerückt. Dies soll die Übersichtlichkeit fördern. Generell ist es so, dass man Programmcode, welcher sich innerhalb einer Funktion oder Schleife (wird noch behandelt) einrückt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blenderplanet.de/tutorials/games/unity-3d-scripts-fur-einsteiger/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blender Planet online!</title>
		<link>http://www.blenderplanet.de/artikel/blender-planet-online/</link>
		<comments>http://www.blenderplanet.de/artikel/blender-planet-online/#comments</comments>
		<pubDate>Tue, 19 Jul 2011 06:19:53 +0000</pubDate>
		<dc:creator>Lukas Huber</dc:creator>
				<category><![CDATA[Artikel]]></category>

		<guid isPermaLink="false">http://visual-basic.lima-city.de/?p=19</guid>
		<description><![CDATA[Blender Planet ist nach langer Vorbereitungsphase nun endlich online. Aber was ist Blender Planet eigentlich?? Kurz gesagt werden auf dieser Website deutschprachige Tutorials frei zur Verfügung gestellt. Die Idee dazu...]]></description>
			<content:encoded><![CDATA[<p>Blender Planet ist nach langer Vorbereitungsphase nun endlich online.</p>
<p>Aber was ist Blender Planet eigentlich??<br />
Kurz gesagt werden auf dieser Website deutschprachige Tutorials frei zur Verfügung gestellt.<br />
Die Idee dazu hatte ich schon seit geraumer Zeit, da sich im Web nur englische Tutorials zu Blender finden lassen, welche gleichzeitig auch qulitativ hochwertig sind. Um aber auch denjenigen einen Einstieg in Blender zu ermöglichen, die nicht so fit in Englisch sind, habe ich mich dazu überrungen endlich mit dem Projekt &#8220;Eigene Homepage&#8221; anzufangen.</p>
<p>Nun aber zu meiner Person:<br />
Mein Name ist Lukas Huber und habe mich mit meinen 17 Jahren schon 5 Jahre lang mit Blender beschäftigt.<br />
Als ich mir mit 11 das Programm zum ersten Mal heruntergeladen habe, habe ich es installiert, geöffnet und daraufhin sofort wieder geschlossen. Die unübersichtliche Oberfläche war damals zu kompliziert und hätte zu viel Zeit gebraucht um mich einzuarbeiten. Kurz darauf habe ich es wieder deinstalliert. Vielleicht wäre auch noch dazu zu sagen, dass es sich damals um die Version 2.49 handelte.<br />
Ein Jahr später hatte mich nochmals die Neugierde gepackt, woraufhin ich es wieder installierte. Von da an habe ich mich geduldig mit Blender beschäftigt und will mein Wissen nun auch an andere weitergeben.</p>
<p>PS: Da sich die Website noch in der Aufbauphase befindet, kann sich das Aussehen der Website jederzeit ändern.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blenderplanet.de/artikel/blender-planet-online/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: enhanced

Served from: www.blenderplanet.de @ 2012-05-21 00:37:57 -->
