<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>http://hyperdramatik.net/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Fkirschner</id>
	<title>hyperdramatik - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="http://hyperdramatik.net/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Fkirschner"/>
	<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php/Spezial:Beitr%C3%A4ge/Fkirschner"/>
	<updated>2026-05-20T21:19:13Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.38.2</generator>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3185</id>
		<title>XY Plotter</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3185"/>
		<updated>2023-02-14T16:58:36Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* using the mDraw Firmware (Recommended) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== XY Plotter ==&lt;br /&gt;
&lt;br /&gt;
Spiel und Objekt besitzt drei [https://www.makeblock.com/project/xy-plotter-robot-kit| Makeblock XY Plotter].&lt;br /&gt;
&lt;br /&gt;
[[File:xyPlotter_example.jpg|500px|An image of an xyPlotter during the 2023 GameJam at the FFT Düsseldorf]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Given the age of the hardware, a lot of the documentation is out of date. This article will help you getting the device to work with your WINDOWS computer.&lt;br /&gt;
&lt;br /&gt;
== Assembly Instructions ==&lt;br /&gt;
If, for some reason, a device broke or you need to reassemble it, here is a link to the [http://download.makeblock.com/XY/pdf/XY%20Plotter%20V2.0%20Assembly%20instructions%EF%BC%882016.6%EF%BC%89.pdf| official assembly guide]&lt;br /&gt;
&lt;br /&gt;
== General Hardware Specifications ==&lt;br /&gt;
* They are controlled by a custom Arduino UNO compatible board with Custom Firmware.&lt;br /&gt;
* The two stepper motors are driven by a 12V external Power supply&lt;br /&gt;
* Some of them might have an additional Servo motor to control a Pen or a Magnet Holder.&lt;br /&gt;
&lt;br /&gt;
== Getting it to work ==&lt;br /&gt;
* Connect the XY Plotter using a Micro-USB Cable.&lt;br /&gt;
* Make sure the XY Plotter's 12V power supply is plugged in and that power is turned on (in addition to the USB Connection).&lt;br /&gt;
* Download the software &amp;quot;mDraw&amp;quot; either from the official [https://www.makeblock.com/project/xy-plotter-robot-kit|XY Plotter website] or from [https://nx16523.your-storageshare.de/s/CCW7oLcRdMbC7oS| the Spiel und Objekt Buschcloud].&lt;br /&gt;
&lt;br /&gt;
=== using the mDraw Firmware (Recommended) ===&lt;br /&gt;
* open mDraw&lt;br /&gt;
* In the drop-down Menu on the top right, select ''XY-Plotter''&lt;br /&gt;
* Make sure the Plotter is connected, the COM port should be connected in the lower right hand side of the software.&lt;br /&gt;
* Click '''Connect'''&lt;br /&gt;
* If the firmware has changed recently, or you read the word &amp;quot;init&amp;quot; in the lower right hand Console Window and the Plotter seems to move super slow, you might want to reapply the mDraw Firmware.&lt;br /&gt;
* To apply the mDraw firmware, click '''Update Firmware'''&lt;br /&gt;
* Wait for the Firmware to Download onto the board&lt;br /&gt;
* Profit!&lt;br /&gt;
** Double-Clicking in the middle of the drawing area should move the Plotter to that point. &lt;br /&gt;
** Clicking on the house Icon should move the Plotter back to its initial 0,0 Position&lt;br /&gt;
** Feel free to explore the software. The plotters should work Out-Of-The-Box with the default settings of the Software. Please document if you Settings changed setting for other groups potentially using the Plotter. Here's an image of the setting as of 14.02.23: [[File:mDraw_settings.jpg|300px|mDraw setting page]]&lt;br /&gt;
&lt;br /&gt;
=== using the official gitHub Firmware (Not Recommended) ===&lt;br /&gt;
* download the XY Plotter firmware from the [https://github.com/Makeblock-official/XY-Plotter-2.0|Makeblock GitHub page] or use the one that comes in the Spiel und Objekt Buschcloud folder.&lt;br /&gt;
* Open the Arduino file: XY-Plotter-2.0-master\software\GCodeParser.ino&lt;br /&gt;
* Make sure the Plotter is connected, then select the COM port as usual in the Arduino software.&lt;br /&gt;
* Contrary to the instructions on the official Firmware GitHub website, we selected ''&amp;quot;Arduino Uno&amp;quot;'' as our board type for success.&lt;br /&gt;
* Upload the code to the controller board&lt;br /&gt;
* The code is very, very slow, but it works. You can possibly adjust the values in the code itself to speed it up.&lt;br /&gt;
* we really recommend using the mDraw Firmware, it is much much faster.&lt;br /&gt;
&lt;br /&gt;
== Using GCode ==&lt;br /&gt;
&lt;br /&gt;
Once you have chosen a firmware (we really really suggest you use mDraw version of the firmware), you can use GCode Commands over Serial Communication to control the XY Plotter from Processing (or any other Serial compatible Code Environment).&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
GCode is a Command Set for CNC machines and 3D Printers that is often used to control and set up moving machines. The Makeblock XY Plotter uses GCode commands to move the stepper motors and the Servo into position, change its speed and other fun things.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
GCode are submitted as Strings. For example:&lt;br /&gt;
&lt;br /&gt;
 G0 X100 Y100&lt;br /&gt;
&lt;br /&gt;
moves the Plotter to the position 10cm to the right and 10cm forward from its initial home position (if the home position is on the bottom left).&lt;br /&gt;
&lt;br /&gt;
If you want to test out GCode Commands, you can apply them directly in the Input field of the mDraw software (this works for both Firmware versions) or use an Arduino Serial Monitor. Just type the command and watch what happens.&lt;br /&gt;
&lt;br /&gt;
=== Common GCode Commands for mDraw Firmware===&lt;br /&gt;
* G0 Xxxx Yyyy - moves the Plotter to xxx and yyy position in Millimeters from the Home Position&lt;br /&gt;
* G1  Xxxx Yyyy - - moves the Plotter to xxx and yyy position in Millimeters from the Home Position&lt;br /&gt;
* G28 - moves the Plotter to its 0,0 position&lt;br /&gt;
* M1 xxx - rotates the Servo (from 0 to 255, like any Arduino Servo). Note that the Servo setup of the XY Plotter usually assumes that you have a Pen or Magnet attached to the Plotter, and so a value of 80 is usually considered '''Pen Down''' and a value of 160 is usually considered '''Pen Up'''&lt;br /&gt;
&lt;br /&gt;
 Note: We reverse engineered some of this information from the mDraw Source Code, that you can see on the [https://github.com/Makeblock-official/mDrawBot/blob/master/mDrawGui/XYRobot.py| Makeblock official GitHub page] (Open Source for the win!), but you can also find really good info on this (thanks Clemens!) on [https://gist.github.com/heavysixer/511a7019a3c009027b83| this Github page!]&lt;br /&gt;
&lt;br /&gt;
=== Common GCode Commands for official Firmware ===&lt;br /&gt;
* You can derive the GCode commands from the Source Code file in XY-Plotter-2.0-master\software\GCodeParser\process_string.io&lt;br /&gt;
* Maybe there is more stuff you can do with that firmware?&lt;br /&gt;
* What's nice about it though is that you can change the firmware yourself! It's just a .ino file!&lt;br /&gt;
* We really recommend you use the mDraw Version&lt;br /&gt;
&lt;br /&gt;
== Project related Code ==&lt;br /&gt;
&lt;br /&gt;
=== Be:B.E.R.N.D. ===&lt;br /&gt;
The following code connects a xy-plotter to unity and also simulates the movement of the plotter in the game view. A simple white plane represents the scale of the plotter and a white cube its movement.&lt;br /&gt;
The movement is controlled by the arrow keys.&lt;br /&gt;
&lt;br /&gt;
GitHub [https://github.com/HfSDigital/XY-Plotter-Unity]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3184</id>
		<title>XY Plotter</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3184"/>
		<updated>2023-02-14T16:57:22Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* Getting it to work */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== XY Plotter ==&lt;br /&gt;
&lt;br /&gt;
Spiel und Objekt besitzt drei [https://www.makeblock.com/project/xy-plotter-robot-kit| Makeblock XY Plotter].&lt;br /&gt;
&lt;br /&gt;
[[File:xyPlotter_example.jpg|500px|An image of an xyPlotter during the 2023 GameJam at the FFT Düsseldorf]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Given the age of the hardware, a lot of the documentation is out of date. This article will help you getting the device to work with your WINDOWS computer.&lt;br /&gt;
&lt;br /&gt;
== Assembly Instructions ==&lt;br /&gt;
If, for some reason, a device broke or you need to reassemble it, here is a link to the [http://download.makeblock.com/XY/pdf/XY%20Plotter%20V2.0%20Assembly%20instructions%EF%BC%882016.6%EF%BC%89.pdf| official assembly guide]&lt;br /&gt;
&lt;br /&gt;
== General Hardware Specifications ==&lt;br /&gt;
* They are controlled by a custom Arduino UNO compatible board with Custom Firmware.&lt;br /&gt;
* The two stepper motors are driven by a 12V external Power supply&lt;br /&gt;
* Some of them might have an additional Servo motor to control a Pen or a Magnet Holder.&lt;br /&gt;
&lt;br /&gt;
== Getting it to work ==&lt;br /&gt;
* Connect the XY Plotter using a Micro-USB Cable.&lt;br /&gt;
* Make sure the XY Plotter's 12V power supply is plugged in and that power is turned on (in addition to the USB Connection).&lt;br /&gt;
* Download the software &amp;quot;mDraw&amp;quot; either from the official [https://www.makeblock.com/project/xy-plotter-robot-kit|XY Plotter website] or from [https://nx16523.your-storageshare.de/s/CCW7oLcRdMbC7oS| the Spiel und Objekt Buschcloud].&lt;br /&gt;
&lt;br /&gt;
=== using the mDraw Firmware (Recommended) ===&lt;br /&gt;
* open mDraw&lt;br /&gt;
* In the drop-down Menu on the top right, select ''XY-Plotter''&lt;br /&gt;
* Make sure the Plotter is connected, the COM port should be connected in the lower right hand side of the software.&lt;br /&gt;
* Click '''Connect'''&lt;br /&gt;
* To apply the mDraw firmware, click '''Update Firmware'''&lt;br /&gt;
* Wait for the Firmware to Download onto the board&lt;br /&gt;
* Profit!&lt;br /&gt;
** Double-Clicking in the middle of the drawing area should move the Plotter to that point. &lt;br /&gt;
** Clicking on the house Icon should move the Plotter back to its initial 0,0 Position&lt;br /&gt;
** Feel free to explore the software. The plotters should work Out-Of-The-Box with the default settings of the Software. Please document if you Settings changed setting for other groups potentially using the Plotter. Here's an image of the setting as of 14.02.23: [[File:mDraw_settings.jpg|300px|mDraw setting page]]&lt;br /&gt;
&lt;br /&gt;
=== using the official gitHub Firmware (Not Recommended) ===&lt;br /&gt;
* download the XY Plotter firmware from the [https://github.com/Makeblock-official/XY-Plotter-2.0|Makeblock GitHub page] or use the one that comes in the Spiel und Objekt Buschcloud folder.&lt;br /&gt;
* Open the Arduino file: XY-Plotter-2.0-master\software\GCodeParser.ino&lt;br /&gt;
* Make sure the Plotter is connected, then select the COM port as usual in the Arduino software.&lt;br /&gt;
* Contrary to the instructions on the official Firmware GitHub website, we selected ''&amp;quot;Arduino Uno&amp;quot;'' as our board type for success.&lt;br /&gt;
* Upload the code to the controller board&lt;br /&gt;
* The code is very, very slow, but it works. You can possibly adjust the values in the code itself to speed it up.&lt;br /&gt;
* we really recommend using the mDraw Firmware, it is much much faster.&lt;br /&gt;
&lt;br /&gt;
== Using GCode ==&lt;br /&gt;
&lt;br /&gt;
Once you have chosen a firmware (we really really suggest you use mDraw version of the firmware), you can use GCode Commands over Serial Communication to control the XY Plotter from Processing (or any other Serial compatible Code Environment).&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
GCode is a Command Set for CNC machines and 3D Printers that is often used to control and set up moving machines. The Makeblock XY Plotter uses GCode commands to move the stepper motors and the Servo into position, change its speed and other fun things.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
GCode are submitted as Strings. For example:&lt;br /&gt;
&lt;br /&gt;
 G0 X100 Y100&lt;br /&gt;
&lt;br /&gt;
moves the Plotter to the position 10cm to the right and 10cm forward from its initial home position (if the home position is on the bottom left).&lt;br /&gt;
&lt;br /&gt;
If you want to test out GCode Commands, you can apply them directly in the Input field of the mDraw software (this works for both Firmware versions) or use an Arduino Serial Monitor. Just type the command and watch what happens.&lt;br /&gt;
&lt;br /&gt;
=== Common GCode Commands for mDraw Firmware===&lt;br /&gt;
* G0 Xxxx Yyyy - moves the Plotter to xxx and yyy position in Millimeters from the Home Position&lt;br /&gt;
* G1  Xxxx Yyyy - - moves the Plotter to xxx and yyy position in Millimeters from the Home Position&lt;br /&gt;
* G28 - moves the Plotter to its 0,0 position&lt;br /&gt;
* M1 xxx - rotates the Servo (from 0 to 255, like any Arduino Servo). Note that the Servo setup of the XY Plotter usually assumes that you have a Pen or Magnet attached to the Plotter, and so a value of 80 is usually considered '''Pen Down''' and a value of 160 is usually considered '''Pen Up'''&lt;br /&gt;
&lt;br /&gt;
 Note: We reverse engineered some of this information from the mDraw Source Code, that you can see on the [https://github.com/Makeblock-official/mDrawBot/blob/master/mDrawGui/XYRobot.py| Makeblock official GitHub page] (Open Source for the win!), but you can also find really good info on this (thanks Clemens!) on [https://gist.github.com/heavysixer/511a7019a3c009027b83| this Github page!]&lt;br /&gt;
&lt;br /&gt;
=== Common GCode Commands for official Firmware ===&lt;br /&gt;
* You can derive the GCode commands from the Source Code file in XY-Plotter-2.0-master\software\GCodeParser\process_string.io&lt;br /&gt;
* Maybe there is more stuff you can do with that firmware?&lt;br /&gt;
* What's nice about it though is that you can change the firmware yourself! It's just a .ino file!&lt;br /&gt;
* We really recommend you use the mDraw Version&lt;br /&gt;
&lt;br /&gt;
== Project related Code ==&lt;br /&gt;
&lt;br /&gt;
=== Be:B.E.R.N.D. ===&lt;br /&gt;
The following code connects a xy-plotter to unity and also simulates the movement of the plotter in the game view. A simple white plane represents the scale of the plotter and a white cube its movement.&lt;br /&gt;
The movement is controlled by the arrow keys.&lt;br /&gt;
&lt;br /&gt;
GitHub [https://github.com/HfSDigital/XY-Plotter-Unity]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3183</id>
		<title>XY Plotter</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3183"/>
		<updated>2023-02-14T16:56:59Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* Assembly Instructions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== XY Plotter ==&lt;br /&gt;
&lt;br /&gt;
Spiel und Objekt besitzt drei [https://www.makeblock.com/project/xy-plotter-robot-kit| Makeblock XY Plotter].&lt;br /&gt;
&lt;br /&gt;
[[File:xyPlotter_example.jpg|500px|An image of an xyPlotter during the 2023 GameJam at the FFT Düsseldorf]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Given the age of the hardware, a lot of the documentation is out of date. This article will help you getting the device to work with your WINDOWS computer.&lt;br /&gt;
&lt;br /&gt;
== Assembly Instructions ==&lt;br /&gt;
If, for some reason, a device broke or you need to reassemble it, here is a link to the [http://download.makeblock.com/XY/pdf/XY%20Plotter%20V2.0%20Assembly%20instructions%EF%BC%882016.6%EF%BC%89.pdf| official assembly guide]&lt;br /&gt;
&lt;br /&gt;
== General Hardware Specifications ==&lt;br /&gt;
* They are controlled by a custom Arduino UNO compatible board with Custom Firmware.&lt;br /&gt;
* The two stepper motors are driven by a 12V external Power supply&lt;br /&gt;
* Some of them might have an additional Servo motor to control a Pen or a Magnet Holder.&lt;br /&gt;
&lt;br /&gt;
== Getting it to work ==&lt;br /&gt;
* Connect the XY Plotter using a Micro-USB Cable.&lt;br /&gt;
* Make sure the XY Plotter's 12V power supply is plugged in and that power is turned on (in addition to the USB Connection).&lt;br /&gt;
* Download the software &amp;quot;mDraw&amp;quot; either from the official [https://www.makeblock.com/project/xy-plotter-robot-kit|XY Plotter website] or from the Spiel und Objekt Buschcloud [https://nx16523.your-storageshare.de/s/CCW7oLcRdMbC7oS|here].&lt;br /&gt;
&lt;br /&gt;
=== using the mDraw Firmware (Recommended) ===&lt;br /&gt;
* open mDraw&lt;br /&gt;
* In the drop-down Menu on the top right, select ''XY-Plotter''&lt;br /&gt;
* Make sure the Plotter is connected, the COM port should be connected in the lower right hand side of the software.&lt;br /&gt;
* Click '''Connect'''&lt;br /&gt;
* To apply the mDraw firmware, click '''Update Firmware'''&lt;br /&gt;
* Wait for the Firmware to Download onto the board&lt;br /&gt;
* Profit!&lt;br /&gt;
** Double-Clicking in the middle of the drawing area should move the Plotter to that point. &lt;br /&gt;
** Clicking on the house Icon should move the Plotter back to its initial 0,0 Position&lt;br /&gt;
** Feel free to explore the software. The plotters should work Out-Of-The-Box with the default settings of the Software. Please document if you Settings changed setting for other groups potentially using the Plotter. Here's an image of the setting as of 14.02.23: [[File:mDraw_settings.jpg|300px|mDraw setting page]]&lt;br /&gt;
&lt;br /&gt;
=== using the official gitHub Firmware (Not Recommended) ===&lt;br /&gt;
* download the XY Plotter firmware from the [https://github.com/Makeblock-official/XY-Plotter-2.0|Makeblock GitHub page] or use the one that comes in the Spiel und Objekt Buschcloud folder.&lt;br /&gt;
* Open the Arduino file: XY-Plotter-2.0-master\software\GCodeParser.ino&lt;br /&gt;
* Make sure the Plotter is connected, then select the COM port as usual in the Arduino software.&lt;br /&gt;
* Contrary to the instructions on the official Firmware GitHub website, we selected ''&amp;quot;Arduino Uno&amp;quot;'' as our board type for success.&lt;br /&gt;
* Upload the code to the controller board&lt;br /&gt;
* The code is very, very slow, but it works. You can possibly adjust the values in the code itself to speed it up.&lt;br /&gt;
* we really recommend using the mDraw Firmware, it is much much faster.&lt;br /&gt;
&lt;br /&gt;
== Using GCode ==&lt;br /&gt;
&lt;br /&gt;
Once you have chosen a firmware (we really really suggest you use mDraw version of the firmware), you can use GCode Commands over Serial Communication to control the XY Plotter from Processing (or any other Serial compatible Code Environment).&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
GCode is a Command Set for CNC machines and 3D Printers that is often used to control and set up moving machines. The Makeblock XY Plotter uses GCode commands to move the stepper motors and the Servo into position, change its speed and other fun things.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
GCode are submitted as Strings. For example:&lt;br /&gt;
&lt;br /&gt;
 G0 X100 Y100&lt;br /&gt;
&lt;br /&gt;
moves the Plotter to the position 10cm to the right and 10cm forward from its initial home position (if the home position is on the bottom left).&lt;br /&gt;
&lt;br /&gt;
If you want to test out GCode Commands, you can apply them directly in the Input field of the mDraw software (this works for both Firmware versions) or use an Arduino Serial Monitor. Just type the command and watch what happens.&lt;br /&gt;
&lt;br /&gt;
=== Common GCode Commands for mDraw Firmware===&lt;br /&gt;
* G0 Xxxx Yyyy - moves the Plotter to xxx and yyy position in Millimeters from the Home Position&lt;br /&gt;
* G1  Xxxx Yyyy - - moves the Plotter to xxx and yyy position in Millimeters from the Home Position&lt;br /&gt;
* G28 - moves the Plotter to its 0,0 position&lt;br /&gt;
* M1 xxx - rotates the Servo (from 0 to 255, like any Arduino Servo). Note that the Servo setup of the XY Plotter usually assumes that you have a Pen or Magnet attached to the Plotter, and so a value of 80 is usually considered '''Pen Down''' and a value of 160 is usually considered '''Pen Up'''&lt;br /&gt;
&lt;br /&gt;
 Note: We reverse engineered some of this information from the mDraw Source Code, that you can see on the [https://github.com/Makeblock-official/mDrawBot/blob/master/mDrawGui/XYRobot.py| Makeblock official GitHub page] (Open Source for the win!), but you can also find really good info on this (thanks Clemens!) on [https://gist.github.com/heavysixer/511a7019a3c009027b83| this Github page!]&lt;br /&gt;
&lt;br /&gt;
=== Common GCode Commands for official Firmware ===&lt;br /&gt;
* You can derive the GCode commands from the Source Code file in XY-Plotter-2.0-master\software\GCodeParser\process_string.io&lt;br /&gt;
* Maybe there is more stuff you can do with that firmware?&lt;br /&gt;
* What's nice about it though is that you can change the firmware yourself! It's just a .ino file!&lt;br /&gt;
* We really recommend you use the mDraw Version&lt;br /&gt;
&lt;br /&gt;
== Project related Code ==&lt;br /&gt;
&lt;br /&gt;
=== Be:B.E.R.N.D. ===&lt;br /&gt;
The following code connects a xy-plotter to unity and also simulates the movement of the plotter in the game view. A simple white plane represents the scale of the plotter and a white cube its movement.&lt;br /&gt;
The movement is controlled by the arrow keys.&lt;br /&gt;
&lt;br /&gt;
GitHub [https://github.com/HfSDigital/XY-Plotter-Unity]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3182</id>
		<title>XY Plotter</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3182"/>
		<updated>2023-02-14T16:56:46Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* XY Plotter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== XY Plotter ==&lt;br /&gt;
&lt;br /&gt;
Spiel und Objekt besitzt drei [https://www.makeblock.com/project/xy-plotter-robot-kit| Makeblock XY Plotter].&lt;br /&gt;
&lt;br /&gt;
[[File:xyPlotter_example.jpg|500px|An image of an xyPlotter during the 2023 GameJam at the FFT Düsseldorf]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Given the age of the hardware, a lot of the documentation is out of date. This article will help you getting the device to work with your WINDOWS computer.&lt;br /&gt;
&lt;br /&gt;
== Assembly Instructions ==&lt;br /&gt;
If, for some reason, a device broke or you need to reassemble it, here is a link to the [http://download.makeblock.com/XY/pdf/XY%20Plotter%20V2.0%20Assembly%20instructions%EF%BC%882016.6%EF%BC%89.pdf | official assembly guide]&lt;br /&gt;
&lt;br /&gt;
== General Hardware Specifications ==&lt;br /&gt;
* They are controlled by a custom Arduino UNO compatible board with Custom Firmware.&lt;br /&gt;
* The two stepper motors are driven by a 12V external Power supply&lt;br /&gt;
* Some of them might have an additional Servo motor to control a Pen or a Magnet Holder.&lt;br /&gt;
&lt;br /&gt;
== Getting it to work ==&lt;br /&gt;
* Connect the XY Plotter using a Micro-USB Cable.&lt;br /&gt;
* Make sure the XY Plotter's 12V power supply is plugged in and that power is turned on (in addition to the USB Connection).&lt;br /&gt;
* Download the software &amp;quot;mDraw&amp;quot; either from the official [https://www.makeblock.com/project/xy-plotter-robot-kit|XY Plotter website] or from the Spiel und Objekt Buschcloud [https://nx16523.your-storageshare.de/s/CCW7oLcRdMbC7oS|here].&lt;br /&gt;
&lt;br /&gt;
=== using the mDraw Firmware (Recommended) ===&lt;br /&gt;
* open mDraw&lt;br /&gt;
* In the drop-down Menu on the top right, select ''XY-Plotter''&lt;br /&gt;
* Make sure the Plotter is connected, the COM port should be connected in the lower right hand side of the software.&lt;br /&gt;
* Click '''Connect'''&lt;br /&gt;
* To apply the mDraw firmware, click '''Update Firmware'''&lt;br /&gt;
* Wait for the Firmware to Download onto the board&lt;br /&gt;
* Profit!&lt;br /&gt;
** Double-Clicking in the middle of the drawing area should move the Plotter to that point. &lt;br /&gt;
** Clicking on the house Icon should move the Plotter back to its initial 0,0 Position&lt;br /&gt;
** Feel free to explore the software. The plotters should work Out-Of-The-Box with the default settings of the Software. Please document if you Settings changed setting for other groups potentially using the Plotter. Here's an image of the setting as of 14.02.23: [[File:mDraw_settings.jpg|300px|mDraw setting page]]&lt;br /&gt;
&lt;br /&gt;
=== using the official gitHub Firmware (Not Recommended) ===&lt;br /&gt;
* download the XY Plotter firmware from the [https://github.com/Makeblock-official/XY-Plotter-2.0|Makeblock GitHub page] or use the one that comes in the Spiel und Objekt Buschcloud folder.&lt;br /&gt;
* Open the Arduino file: XY-Plotter-2.0-master\software\GCodeParser.ino&lt;br /&gt;
* Make sure the Plotter is connected, then select the COM port as usual in the Arduino software.&lt;br /&gt;
* Contrary to the instructions on the official Firmware GitHub website, we selected ''&amp;quot;Arduino Uno&amp;quot;'' as our board type for success.&lt;br /&gt;
* Upload the code to the controller board&lt;br /&gt;
* The code is very, very slow, but it works. You can possibly adjust the values in the code itself to speed it up.&lt;br /&gt;
* we really recommend using the mDraw Firmware, it is much much faster.&lt;br /&gt;
&lt;br /&gt;
== Using GCode ==&lt;br /&gt;
&lt;br /&gt;
Once you have chosen a firmware (we really really suggest you use mDraw version of the firmware), you can use GCode Commands over Serial Communication to control the XY Plotter from Processing (or any other Serial compatible Code Environment).&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
GCode is a Command Set for CNC machines and 3D Printers that is often used to control and set up moving machines. The Makeblock XY Plotter uses GCode commands to move the stepper motors and the Servo into position, change its speed and other fun things.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
GCode are submitted as Strings. For example:&lt;br /&gt;
&lt;br /&gt;
 G0 X100 Y100&lt;br /&gt;
&lt;br /&gt;
moves the Plotter to the position 10cm to the right and 10cm forward from its initial home position (if the home position is on the bottom left).&lt;br /&gt;
&lt;br /&gt;
If you want to test out GCode Commands, you can apply them directly in the Input field of the mDraw software (this works for both Firmware versions) or use an Arduino Serial Monitor. Just type the command and watch what happens.&lt;br /&gt;
&lt;br /&gt;
=== Common GCode Commands for mDraw Firmware===&lt;br /&gt;
* G0 Xxxx Yyyy - moves the Plotter to xxx and yyy position in Millimeters from the Home Position&lt;br /&gt;
* G1  Xxxx Yyyy - - moves the Plotter to xxx and yyy position in Millimeters from the Home Position&lt;br /&gt;
* G28 - moves the Plotter to its 0,0 position&lt;br /&gt;
* M1 xxx - rotates the Servo (from 0 to 255, like any Arduino Servo). Note that the Servo setup of the XY Plotter usually assumes that you have a Pen or Magnet attached to the Plotter, and so a value of 80 is usually considered '''Pen Down''' and a value of 160 is usually considered '''Pen Up'''&lt;br /&gt;
&lt;br /&gt;
 Note: We reverse engineered some of this information from the mDraw Source Code, that you can see on the [https://github.com/Makeblock-official/mDrawBot/blob/master/mDrawGui/XYRobot.py| Makeblock official GitHub page] (Open Source for the win!), but you can also find really good info on this (thanks Clemens!) on [https://gist.github.com/heavysixer/511a7019a3c009027b83| this Github page!]&lt;br /&gt;
&lt;br /&gt;
=== Common GCode Commands for official Firmware ===&lt;br /&gt;
* You can derive the GCode commands from the Source Code file in XY-Plotter-2.0-master\software\GCodeParser\process_string.io&lt;br /&gt;
* Maybe there is more stuff you can do with that firmware?&lt;br /&gt;
* What's nice about it though is that you can change the firmware yourself! It's just a .ino file!&lt;br /&gt;
* We really recommend you use the mDraw Version&lt;br /&gt;
&lt;br /&gt;
== Project related Code ==&lt;br /&gt;
&lt;br /&gt;
=== Be:B.E.R.N.D. ===&lt;br /&gt;
The following code connects a xy-plotter to unity and also simulates the movement of the plotter in the game view. A simple white plane represents the scale of the plotter and a white cube its movement.&lt;br /&gt;
The movement is controlled by the arrow keys.&lt;br /&gt;
&lt;br /&gt;
GitHub [https://github.com/HfSDigital/XY-Plotter-Unity]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3181</id>
		<title>XY Plotter</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3181"/>
		<updated>2023-02-14T16:55:34Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* Common GCode Commands for mDraw Firmware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== XY Plotter ==&lt;br /&gt;
&lt;br /&gt;
Spiel und Objekt besitzt drei [https://www.makeblock.com/project/xy-plotter-robot-kit|Makeblock XY Plotter].&lt;br /&gt;
&lt;br /&gt;
[[File:xyPlotter_example.jpg|500px|An image of an xyPlotter during the 2023 GameJam at the FFT Düsseldorf]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Given the age of the hardware, a lot of the documentation is out of date. This article will help you getting the device to work with your WINDOWS computer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Assembly Instructions ==&lt;br /&gt;
If, for some reason, a device broke or you need to reassemble it, here is a link to the [http://download.makeblock.com/XY/pdf/XY%20Plotter%20V2.0%20Assembly%20instructions%EF%BC%882016.6%EF%BC%89.pdf | official assembly guide]&lt;br /&gt;
&lt;br /&gt;
== General Hardware Specifications ==&lt;br /&gt;
* They are controlled by a custom Arduino UNO compatible board with Custom Firmware.&lt;br /&gt;
* The two stepper motors are driven by a 12V external Power supply&lt;br /&gt;
* Some of them might have an additional Servo motor to control a Pen or a Magnet Holder.&lt;br /&gt;
&lt;br /&gt;
== Getting it to work ==&lt;br /&gt;
* Connect the XY Plotter using a Micro-USB Cable.&lt;br /&gt;
* Make sure the XY Plotter's 12V power supply is plugged in and that power is turned on (in addition to the USB Connection).&lt;br /&gt;
* Download the software &amp;quot;mDraw&amp;quot; either from the official [https://www.makeblock.com/project/xy-plotter-robot-kit|XY Plotter website] or from the Spiel und Objekt Buschcloud [https://nx16523.your-storageshare.de/s/CCW7oLcRdMbC7oS|here].&lt;br /&gt;
&lt;br /&gt;
=== using the mDraw Firmware (Recommended) ===&lt;br /&gt;
* open mDraw&lt;br /&gt;
* In the drop-down Menu on the top right, select ''XY-Plotter''&lt;br /&gt;
* Make sure the Plotter is connected, the COM port should be connected in the lower right hand side of the software.&lt;br /&gt;
* Click '''Connect'''&lt;br /&gt;
* To apply the mDraw firmware, click '''Update Firmware'''&lt;br /&gt;
* Wait for the Firmware to Download onto the board&lt;br /&gt;
* Profit!&lt;br /&gt;
** Double-Clicking in the middle of the drawing area should move the Plotter to that point. &lt;br /&gt;
** Clicking on the house Icon should move the Plotter back to its initial 0,0 Position&lt;br /&gt;
** Feel free to explore the software. The plotters should work Out-Of-The-Box with the default settings of the Software. Please document if you Settings changed setting for other groups potentially using the Plotter. Here's an image of the setting as of 14.02.23: [[File:mDraw_settings.jpg|300px|mDraw setting page]]&lt;br /&gt;
&lt;br /&gt;
=== using the official gitHub Firmware (Not Recommended) ===&lt;br /&gt;
* download the XY Plotter firmware from the [https://github.com/Makeblock-official/XY-Plotter-2.0|Makeblock GitHub page] or use the one that comes in the Spiel und Objekt Buschcloud folder.&lt;br /&gt;
* Open the Arduino file: XY-Plotter-2.0-master\software\GCodeParser.ino&lt;br /&gt;
* Make sure the Plotter is connected, then select the COM port as usual in the Arduino software.&lt;br /&gt;
* Contrary to the instructions on the official Firmware GitHub website, we selected ''&amp;quot;Arduino Uno&amp;quot;'' as our board type for success.&lt;br /&gt;
* Upload the code to the controller board&lt;br /&gt;
* The code is very, very slow, but it works. You can possibly adjust the values in the code itself to speed it up.&lt;br /&gt;
* we really recommend using the mDraw Firmware, it is much much faster.&lt;br /&gt;
&lt;br /&gt;
== Using GCode ==&lt;br /&gt;
&lt;br /&gt;
Once you have chosen a firmware (we really really suggest you use mDraw version of the firmware), you can use GCode Commands over Serial Communication to control the XY Plotter from Processing (or any other Serial compatible Code Environment).&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
GCode is a Command Set for CNC machines and 3D Printers that is often used to control and set up moving machines. The Makeblock XY Plotter uses GCode commands to move the stepper motors and the Servo into position, change its speed and other fun things.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
GCode are submitted as Strings. For example:&lt;br /&gt;
&lt;br /&gt;
 G0 X100 Y100&lt;br /&gt;
&lt;br /&gt;
moves the Plotter to the position 10cm to the right and 10cm forward from its initial home position (if the home position is on the bottom left).&lt;br /&gt;
&lt;br /&gt;
If you want to test out GCode Commands, you can apply them directly in the Input field of the mDraw software (this works for both Firmware versions) or use an Arduino Serial Monitor. Just type the command and watch what happens.&lt;br /&gt;
&lt;br /&gt;
=== Common GCode Commands for mDraw Firmware===&lt;br /&gt;
* G0 Xxxx Yyyy - moves the Plotter to xxx and yyy position in Millimeters from the Home Position&lt;br /&gt;
* G1  Xxxx Yyyy - - moves the Plotter to xxx and yyy position in Millimeters from the Home Position&lt;br /&gt;
* G28 - moves the Plotter to its 0,0 position&lt;br /&gt;
* M1 xxx - rotates the Servo (from 0 to 255, like any Arduino Servo). Note that the Servo setup of the XY Plotter usually assumes that you have a Pen or Magnet attached to the Plotter, and so a value of 80 is usually considered '''Pen Down''' and a value of 160 is usually considered '''Pen Up'''&lt;br /&gt;
&lt;br /&gt;
 Note: We reverse engineered some of this information from the mDraw Source Code, that you can see on the [https://github.com/Makeblock-official/mDrawBot/blob/master/mDrawGui/XYRobot.py| Makeblock official GitHub page] (Open Source for the win!), but you can also find really good info on this (thanks Clemens!) on [https://gist.github.com/heavysixer/511a7019a3c009027b83| this Github page!]&lt;br /&gt;
&lt;br /&gt;
=== Common GCode Commands for official Firmware ===&lt;br /&gt;
* You can derive the GCode commands from the Source Code file in XY-Plotter-2.0-master\software\GCodeParser\process_string.io&lt;br /&gt;
* Maybe there is more stuff you can do with that firmware?&lt;br /&gt;
* What's nice about it though is that you can change the firmware yourself! It's just a .ino file!&lt;br /&gt;
* We really recommend you use the mDraw Version&lt;br /&gt;
&lt;br /&gt;
== Project related Code ==&lt;br /&gt;
&lt;br /&gt;
=== Be:B.E.R.N.D. ===&lt;br /&gt;
The following code connects a xy-plotter to unity and also simulates the movement of the plotter in the game view. A simple white plane represents the scale of the plotter and a white cube its movement.&lt;br /&gt;
The movement is controlled by the arrow keys.&lt;br /&gt;
&lt;br /&gt;
GitHub [https://github.com/HfSDigital/XY-Plotter-Unity]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3180</id>
		<title>XY Plotter</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3180"/>
		<updated>2023-02-14T16:55:18Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* Common GCode Commands for mDraw Firmware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== XY Plotter ==&lt;br /&gt;
&lt;br /&gt;
Spiel und Objekt besitzt drei [https://www.makeblock.com/project/xy-plotter-robot-kit|Makeblock XY Plotter].&lt;br /&gt;
&lt;br /&gt;
[[File:xyPlotter_example.jpg|500px|An image of an xyPlotter during the 2023 GameJam at the FFT Düsseldorf]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Given the age of the hardware, a lot of the documentation is out of date. This article will help you getting the device to work with your WINDOWS computer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Assembly Instructions ==&lt;br /&gt;
If, for some reason, a device broke or you need to reassemble it, here is a link to the [http://download.makeblock.com/XY/pdf/XY%20Plotter%20V2.0%20Assembly%20instructions%EF%BC%882016.6%EF%BC%89.pdf | official assembly guide]&lt;br /&gt;
&lt;br /&gt;
== General Hardware Specifications ==&lt;br /&gt;
* They are controlled by a custom Arduino UNO compatible board with Custom Firmware.&lt;br /&gt;
* The two stepper motors are driven by a 12V external Power supply&lt;br /&gt;
* Some of them might have an additional Servo motor to control a Pen or a Magnet Holder.&lt;br /&gt;
&lt;br /&gt;
== Getting it to work ==&lt;br /&gt;
* Connect the XY Plotter using a Micro-USB Cable.&lt;br /&gt;
* Make sure the XY Plotter's 12V power supply is plugged in and that power is turned on (in addition to the USB Connection).&lt;br /&gt;
* Download the software &amp;quot;mDraw&amp;quot; either from the official [https://www.makeblock.com/project/xy-plotter-robot-kit|XY Plotter website] or from the Spiel und Objekt Buschcloud [https://nx16523.your-storageshare.de/s/CCW7oLcRdMbC7oS|here].&lt;br /&gt;
&lt;br /&gt;
=== using the mDraw Firmware (Recommended) ===&lt;br /&gt;
* open mDraw&lt;br /&gt;
* In the drop-down Menu on the top right, select ''XY-Plotter''&lt;br /&gt;
* Make sure the Plotter is connected, the COM port should be connected in the lower right hand side of the software.&lt;br /&gt;
* Click '''Connect'''&lt;br /&gt;
* To apply the mDraw firmware, click '''Update Firmware'''&lt;br /&gt;
* Wait for the Firmware to Download onto the board&lt;br /&gt;
* Profit!&lt;br /&gt;
** Double-Clicking in the middle of the drawing area should move the Plotter to that point. &lt;br /&gt;
** Clicking on the house Icon should move the Plotter back to its initial 0,0 Position&lt;br /&gt;
** Feel free to explore the software. The plotters should work Out-Of-The-Box with the default settings of the Software. Please document if you Settings changed setting for other groups potentially using the Plotter. Here's an image of the setting as of 14.02.23: [[File:mDraw_settings.jpg|300px|mDraw setting page]]&lt;br /&gt;
&lt;br /&gt;
=== using the official gitHub Firmware (Not Recommended) ===&lt;br /&gt;
* download the XY Plotter firmware from the [https://github.com/Makeblock-official/XY-Plotter-2.0|Makeblock GitHub page] or use the one that comes in the Spiel und Objekt Buschcloud folder.&lt;br /&gt;
* Open the Arduino file: XY-Plotter-2.0-master\software\GCodeParser.ino&lt;br /&gt;
* Make sure the Plotter is connected, then select the COM port as usual in the Arduino software.&lt;br /&gt;
* Contrary to the instructions on the official Firmware GitHub website, we selected ''&amp;quot;Arduino Uno&amp;quot;'' as our board type for success.&lt;br /&gt;
* Upload the code to the controller board&lt;br /&gt;
* The code is very, very slow, but it works. You can possibly adjust the values in the code itself to speed it up.&lt;br /&gt;
* we really recommend using the mDraw Firmware, it is much much faster.&lt;br /&gt;
&lt;br /&gt;
== Using GCode ==&lt;br /&gt;
&lt;br /&gt;
Once you have chosen a firmware (we really really suggest you use mDraw version of the firmware), you can use GCode Commands over Serial Communication to control the XY Plotter from Processing (or any other Serial compatible Code Environment).&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
GCode is a Command Set for CNC machines and 3D Printers that is often used to control and set up moving machines. The Makeblock XY Plotter uses GCode commands to move the stepper motors and the Servo into position, change its speed and other fun things.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
GCode are submitted as Strings. For example:&lt;br /&gt;
&lt;br /&gt;
 G0 X100 Y100&lt;br /&gt;
&lt;br /&gt;
moves the Plotter to the position 10cm to the right and 10cm forward from its initial home position (if the home position is on the bottom left).&lt;br /&gt;
&lt;br /&gt;
If you want to test out GCode Commands, you can apply them directly in the Input field of the mDraw software (this works for both Firmware versions) or use an Arduino Serial Monitor. Just type the command and watch what happens.&lt;br /&gt;
&lt;br /&gt;
=== Common GCode Commands for mDraw Firmware===&lt;br /&gt;
* G0 Xxxx Yyyy - moves the Plotter to xxx and yyy position in Millimeters from the Home Position&lt;br /&gt;
* G1  Xxxx Yyyy - - moves the Plotter to xxx and yyy position in Millimeters from the Home Position&lt;br /&gt;
* G28 - moves the Plotter to its 0,0 position&lt;br /&gt;
* M1 xxx - rotates the Servo (from 0 to 255, like any Arduino Servo). Note that the Servo setup of the XY Plotter usually assumes that you have a Pen or Magnet attached to the Plotter, and so a value of 80 is usually considered '''Pen Down''' and a value of 160 is usually considered '''Pen Up'''&lt;br /&gt;
&lt;br /&gt;
 Note: We reverse engineered some of this information from the mDraw Source Code, that you can see on the [https://github.com/Makeblock-official/mDrawBot/blob/master/mDrawGui/XYRobot.py|Makeblock official GitHub page] (Open Source for the win!), but you can also find really good info on this (thanks Clemens!) on [https://gist.github.com/heavysixer/511a7019a3c009027b83|this Github page!]&lt;br /&gt;
&lt;br /&gt;
=== Common GCode Commands for official Firmware ===&lt;br /&gt;
* You can derive the GCode commands from the Source Code file in XY-Plotter-2.0-master\software\GCodeParser\process_string.io&lt;br /&gt;
* Maybe there is more stuff you can do with that firmware?&lt;br /&gt;
* What's nice about it though is that you can change the firmware yourself! It's just a .ino file!&lt;br /&gt;
* We really recommend you use the mDraw Version&lt;br /&gt;
&lt;br /&gt;
== Project related Code ==&lt;br /&gt;
&lt;br /&gt;
=== Be:B.E.R.N.D. ===&lt;br /&gt;
The following code connects a xy-plotter to unity and also simulates the movement of the plotter in the game view. A simple white plane represents the scale of the plotter and a white cube its movement.&lt;br /&gt;
The movement is controlled by the arrow keys.&lt;br /&gt;
&lt;br /&gt;
GitHub [https://github.com/HfSDigital/XY-Plotter-Unity]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3179</id>
		<title>XY Plotter</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3179"/>
		<updated>2023-02-14T16:55:00Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* Common GCode Commands for mDraw Firmware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== XY Plotter ==&lt;br /&gt;
&lt;br /&gt;
Spiel und Objekt besitzt drei [https://www.makeblock.com/project/xy-plotter-robot-kit|Makeblock XY Plotter].&lt;br /&gt;
&lt;br /&gt;
[[File:xyPlotter_example.jpg|500px|An image of an xyPlotter during the 2023 GameJam at the FFT Düsseldorf]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Given the age of the hardware, a lot of the documentation is out of date. This article will help you getting the device to work with your WINDOWS computer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Assembly Instructions ==&lt;br /&gt;
If, for some reason, a device broke or you need to reassemble it, here is a link to the [http://download.makeblock.com/XY/pdf/XY%20Plotter%20V2.0%20Assembly%20instructions%EF%BC%882016.6%EF%BC%89.pdf | official assembly guide]&lt;br /&gt;
&lt;br /&gt;
== General Hardware Specifications ==&lt;br /&gt;
* They are controlled by a custom Arduino UNO compatible board with Custom Firmware.&lt;br /&gt;
* The two stepper motors are driven by a 12V external Power supply&lt;br /&gt;
* Some of them might have an additional Servo motor to control a Pen or a Magnet Holder.&lt;br /&gt;
&lt;br /&gt;
== Getting it to work ==&lt;br /&gt;
* Connect the XY Plotter using a Micro-USB Cable.&lt;br /&gt;
* Make sure the XY Plotter's 12V power supply is plugged in and that power is turned on (in addition to the USB Connection).&lt;br /&gt;
* Download the software &amp;quot;mDraw&amp;quot; either from the official [https://www.makeblock.com/project/xy-plotter-robot-kit|XY Plotter website] or from the Spiel und Objekt Buschcloud [https://nx16523.your-storageshare.de/s/CCW7oLcRdMbC7oS|here].&lt;br /&gt;
&lt;br /&gt;
=== using the mDraw Firmware (Recommended) ===&lt;br /&gt;
* open mDraw&lt;br /&gt;
* In the drop-down Menu on the top right, select ''XY-Plotter''&lt;br /&gt;
* Make sure the Plotter is connected, the COM port should be connected in the lower right hand side of the software.&lt;br /&gt;
* Click '''Connect'''&lt;br /&gt;
* To apply the mDraw firmware, click '''Update Firmware'''&lt;br /&gt;
* Wait for the Firmware to Download onto the board&lt;br /&gt;
* Profit!&lt;br /&gt;
** Double-Clicking in the middle of the drawing area should move the Plotter to that point. &lt;br /&gt;
** Clicking on the house Icon should move the Plotter back to its initial 0,0 Position&lt;br /&gt;
** Feel free to explore the software. The plotters should work Out-Of-The-Box with the default settings of the Software. Please document if you Settings changed setting for other groups potentially using the Plotter. Here's an image of the setting as of 14.02.23: [[File:mDraw_settings.jpg|300px|mDraw setting page]]&lt;br /&gt;
&lt;br /&gt;
=== using the official gitHub Firmware (Not Recommended) ===&lt;br /&gt;
* download the XY Plotter firmware from the [https://github.com/Makeblock-official/XY-Plotter-2.0|Makeblock GitHub page] or use the one that comes in the Spiel und Objekt Buschcloud folder.&lt;br /&gt;
* Open the Arduino file: XY-Plotter-2.0-master\software\GCodeParser.ino&lt;br /&gt;
* Make sure the Plotter is connected, then select the COM port as usual in the Arduino software.&lt;br /&gt;
* Contrary to the instructions on the official Firmware GitHub website, we selected ''&amp;quot;Arduino Uno&amp;quot;'' as our board type for success.&lt;br /&gt;
* Upload the code to the controller board&lt;br /&gt;
* The code is very, very slow, but it works. You can possibly adjust the values in the code itself to speed it up.&lt;br /&gt;
* we really recommend using the mDraw Firmware, it is much much faster.&lt;br /&gt;
&lt;br /&gt;
== Using GCode ==&lt;br /&gt;
&lt;br /&gt;
Once you have chosen a firmware (we really really suggest you use mDraw version of the firmware), you can use GCode Commands over Serial Communication to control the XY Plotter from Processing (or any other Serial compatible Code Environment).&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
GCode is a Command Set for CNC machines and 3D Printers that is often used to control and set up moving machines. The Makeblock XY Plotter uses GCode commands to move the stepper motors and the Servo into position, change its speed and other fun things.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
GCode are submitted as Strings. For example:&lt;br /&gt;
&lt;br /&gt;
 G0 X100 Y100&lt;br /&gt;
&lt;br /&gt;
moves the Plotter to the position 10cm to the right and 10cm forward from its initial home position (if the home position is on the bottom left).&lt;br /&gt;
&lt;br /&gt;
If you want to test out GCode Commands, you can apply them directly in the Input field of the mDraw software (this works for both Firmware versions) or use an Arduino Serial Monitor. Just type the command and watch what happens.&lt;br /&gt;
&lt;br /&gt;
=== Common GCode Commands for mDraw Firmware===&lt;br /&gt;
* G0 Xxxx Yyyy - moves the Plotter to xxx and yyy position in Millimeters from the Home Position&lt;br /&gt;
* G1  Xxxx Yyyy - - moves the Plotter to xxx and yyy position in Millimeters from the Home Position&lt;br /&gt;
* G28 - moves the Plotter to its 0,0 position&lt;br /&gt;
* M1 xxx - rotates the Servo (from 0 to 255, like any Arduino Servo). Note that the Servo setup of the XY Plotter usually assumes that you have a Pen or Magnet attached to the Plotter, and so a value of 80 is usually considered '''Pen Down''' and a value of 160 is usually considered '''Pen Up'''&lt;br /&gt;
&lt;br /&gt;
 Note: We reverse engineered some of this information from the mDraw Source Code, that you can see on the [https://github.com/Makeblock-official/mDrawBot/blob/master/mDrawGui/XYRobot.py|Makeblock official GitHub page] (Open Source for the win!), but you can also find really good info on this (thanks Clemens!) on [https://gist.github.com/heavysixer/511a7019a3c009027b83&lt;br /&gt;
| this Github page!]&lt;br /&gt;
&lt;br /&gt;
=== Common GCode Commands for official Firmware ===&lt;br /&gt;
* You can derive the GCode commands from the Source Code file in XY-Plotter-2.0-master\software\GCodeParser\process_string.io&lt;br /&gt;
* Maybe there is more stuff you can do with that firmware?&lt;br /&gt;
* What's nice about it though is that you can change the firmware yourself! It's just a .ino file!&lt;br /&gt;
* We really recommend you use the mDraw Version&lt;br /&gt;
&lt;br /&gt;
== Project related Code ==&lt;br /&gt;
&lt;br /&gt;
=== Be:B.E.R.N.D. ===&lt;br /&gt;
The following code connects a xy-plotter to unity and also simulates the movement of the plotter in the game view. A simple white plane represents the scale of the plotter and a white cube its movement.&lt;br /&gt;
The movement is controlled by the arrow keys.&lt;br /&gt;
&lt;br /&gt;
GitHub [https://github.com/HfSDigital/XY-Plotter-Unity]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3178</id>
		<title>XY Plotter</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3178"/>
		<updated>2023-02-14T16:54:44Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* Common GCode Commands for mDraw Firmware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== XY Plotter ==&lt;br /&gt;
&lt;br /&gt;
Spiel und Objekt besitzt drei [https://www.makeblock.com/project/xy-plotter-robot-kit|Makeblock XY Plotter].&lt;br /&gt;
&lt;br /&gt;
[[File:xyPlotter_example.jpg|500px|An image of an xyPlotter during the 2023 GameJam at the FFT Düsseldorf]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Given the age of the hardware, a lot of the documentation is out of date. This article will help you getting the device to work with your WINDOWS computer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Assembly Instructions ==&lt;br /&gt;
If, for some reason, a device broke or you need to reassemble it, here is a link to the [http://download.makeblock.com/XY/pdf/XY%20Plotter%20V2.0%20Assembly%20instructions%EF%BC%882016.6%EF%BC%89.pdf | official assembly guide]&lt;br /&gt;
&lt;br /&gt;
== General Hardware Specifications ==&lt;br /&gt;
* They are controlled by a custom Arduino UNO compatible board with Custom Firmware.&lt;br /&gt;
* The two stepper motors are driven by a 12V external Power supply&lt;br /&gt;
* Some of them might have an additional Servo motor to control a Pen or a Magnet Holder.&lt;br /&gt;
&lt;br /&gt;
== Getting it to work ==&lt;br /&gt;
* Connect the XY Plotter using a Micro-USB Cable.&lt;br /&gt;
* Make sure the XY Plotter's 12V power supply is plugged in and that power is turned on (in addition to the USB Connection).&lt;br /&gt;
* Download the software &amp;quot;mDraw&amp;quot; either from the official [https://www.makeblock.com/project/xy-plotter-robot-kit|XY Plotter website] or from the Spiel und Objekt Buschcloud [https://nx16523.your-storageshare.de/s/CCW7oLcRdMbC7oS|here].&lt;br /&gt;
&lt;br /&gt;
=== using the mDraw Firmware (Recommended) ===&lt;br /&gt;
* open mDraw&lt;br /&gt;
* In the drop-down Menu on the top right, select ''XY-Plotter''&lt;br /&gt;
* Make sure the Plotter is connected, the COM port should be connected in the lower right hand side of the software.&lt;br /&gt;
* Click '''Connect'''&lt;br /&gt;
* To apply the mDraw firmware, click '''Update Firmware'''&lt;br /&gt;
* Wait for the Firmware to Download onto the board&lt;br /&gt;
* Profit!&lt;br /&gt;
** Double-Clicking in the middle of the drawing area should move the Plotter to that point. &lt;br /&gt;
** Clicking on the house Icon should move the Plotter back to its initial 0,0 Position&lt;br /&gt;
** Feel free to explore the software. The plotters should work Out-Of-The-Box with the default settings of the Software. Please document if you Settings changed setting for other groups potentially using the Plotter. Here's an image of the setting as of 14.02.23: [[File:mDraw_settings.jpg|300px|mDraw setting page]]&lt;br /&gt;
&lt;br /&gt;
=== using the official gitHub Firmware (Not Recommended) ===&lt;br /&gt;
* download the XY Plotter firmware from the [https://github.com/Makeblock-official/XY-Plotter-2.0|Makeblock GitHub page] or use the one that comes in the Spiel und Objekt Buschcloud folder.&lt;br /&gt;
* Open the Arduino file: XY-Plotter-2.0-master\software\GCodeParser.ino&lt;br /&gt;
* Make sure the Plotter is connected, then select the COM port as usual in the Arduino software.&lt;br /&gt;
* Contrary to the instructions on the official Firmware GitHub website, we selected ''&amp;quot;Arduino Uno&amp;quot;'' as our board type for success.&lt;br /&gt;
* Upload the code to the controller board&lt;br /&gt;
* The code is very, very slow, but it works. You can possibly adjust the values in the code itself to speed it up.&lt;br /&gt;
* we really recommend using the mDraw Firmware, it is much much faster.&lt;br /&gt;
&lt;br /&gt;
== Using GCode ==&lt;br /&gt;
&lt;br /&gt;
Once you have chosen a firmware (we really really suggest you use mDraw version of the firmware), you can use GCode Commands over Serial Communication to control the XY Plotter from Processing (or any other Serial compatible Code Environment).&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
GCode is a Command Set for CNC machines and 3D Printers that is often used to control and set up moving machines. The Makeblock XY Plotter uses GCode commands to move the stepper motors and the Servo into position, change its speed and other fun things.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
GCode are submitted as Strings. For example:&lt;br /&gt;
&lt;br /&gt;
 G0 X100 Y100&lt;br /&gt;
&lt;br /&gt;
moves the Plotter to the position 10cm to the right and 10cm forward from its initial home position (if the home position is on the bottom left).&lt;br /&gt;
&lt;br /&gt;
If you want to test out GCode Commands, you can apply them directly in the Input field of the mDraw software (this works for both Firmware versions) or use an Arduino Serial Monitor. Just type the command and watch what happens.&lt;br /&gt;
&lt;br /&gt;
=== Common GCode Commands for mDraw Firmware===&lt;br /&gt;
* G0 Xxxx Yyyy - moves the Plotter to xxx and yyy position in Millimeters from the Home Position&lt;br /&gt;
* G1  Xxxx Yyyy - - moves the Plotter to xxx and yyy position in Millimeters from the Home Position&lt;br /&gt;
* G28 - moves the Plotter to its 0,0 position&lt;br /&gt;
* M1 xxx - rotates the Servo (from 0 to 255, like any Arduino Servo). Note that the Servo setup of the XY Plotter usually assumes that you have a Pen or Magnet attached to the Plotter, and so a value of 80 is usually considered '''Pen Down''' and a value of 160 is usually considered '''Pen Up'''&lt;br /&gt;
&lt;br /&gt;
 Note: We reverse engineered some of this information from the mDraw Source Code, that you can see on the [https://github.com/Makeblock-official/mDrawBot/blob/master/mDrawGui/XYRobot.py|Makeblock official GitHub page] (Open Source for the win!), but you can also find really good info on this (thanks Clemens!) on [https://gist.github.com/heavysixer/511a7019a3c009027b83&lt;br /&gt;
|this Github page!]&lt;br /&gt;
&lt;br /&gt;
=== Common GCode Commands for official Firmware ===&lt;br /&gt;
* You can derive the GCode commands from the Source Code file in XY-Plotter-2.0-master\software\GCodeParser\process_string.io&lt;br /&gt;
* Maybe there is more stuff you can do with that firmware?&lt;br /&gt;
* What's nice about it though is that you can change the firmware yourself! It's just a .ino file!&lt;br /&gt;
* We really recommend you use the mDraw Version&lt;br /&gt;
&lt;br /&gt;
== Project related Code ==&lt;br /&gt;
&lt;br /&gt;
=== Be:B.E.R.N.D. ===&lt;br /&gt;
The following code connects a xy-plotter to unity and also simulates the movement of the plotter in the game view. A simple white plane represents the scale of the plotter and a white cube its movement.&lt;br /&gt;
The movement is controlled by the arrow keys.&lt;br /&gt;
&lt;br /&gt;
GitHub [https://github.com/HfSDigital/XY-Plotter-Unity]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3177</id>
		<title>XY Plotter</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3177"/>
		<updated>2023-02-14T16:45:29Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* Common GCode Commands for mDraw Firmware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== XY Plotter ==&lt;br /&gt;
&lt;br /&gt;
Spiel und Objekt besitzt drei [https://www.makeblock.com/project/xy-plotter-robot-kit|Makeblock XY Plotter].&lt;br /&gt;
&lt;br /&gt;
[[File:xyPlotter_example.jpg|500px|An image of an xyPlotter during the 2023 GameJam at the FFT Düsseldorf]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Given the age of the hardware, a lot of the documentation is out of date. This article will help you getting the device to work with your WINDOWS computer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Assembly Instructions ==&lt;br /&gt;
If, for some reason, a device broke or you need to reassemble it, here is a link to the [http://download.makeblock.com/XY/pdf/XY%20Plotter%20V2.0%20Assembly%20instructions%EF%BC%882016.6%EF%BC%89.pdf | official assembly guide]&lt;br /&gt;
&lt;br /&gt;
== General Hardware Specifications ==&lt;br /&gt;
* They are controlled by a custom Arduino UNO compatible board with Custom Firmware.&lt;br /&gt;
* The two stepper motors are driven by a 12V external Power supply&lt;br /&gt;
* Some of them might have an additional Servo motor to control a Pen or a Magnet Holder.&lt;br /&gt;
&lt;br /&gt;
== Getting it to work ==&lt;br /&gt;
* Connect the XY Plotter using a Micro-USB Cable.&lt;br /&gt;
* Make sure the XY Plotter's 12V power supply is plugged in and that power is turned on (in addition to the USB Connection).&lt;br /&gt;
* Download the software &amp;quot;mDraw&amp;quot; either from the official [https://www.makeblock.com/project/xy-plotter-robot-kit|XY Plotter website] or from the Spiel und Objekt Buschcloud [https://nx16523.your-storageshare.de/s/CCW7oLcRdMbC7oS|here].&lt;br /&gt;
&lt;br /&gt;
=== using the mDraw Firmware (Recommended) ===&lt;br /&gt;
* open mDraw&lt;br /&gt;
* In the drop-down Menu on the top right, select ''XY-Plotter''&lt;br /&gt;
* Make sure the Plotter is connected, the COM port should be connected in the lower right hand side of the software.&lt;br /&gt;
* Click '''Connect'''&lt;br /&gt;
* To apply the mDraw firmware, click '''Update Firmware'''&lt;br /&gt;
* Wait for the Firmware to Download onto the board&lt;br /&gt;
* Profit!&lt;br /&gt;
** Double-Clicking in the middle of the drawing area should move the Plotter to that point. &lt;br /&gt;
** Clicking on the house Icon should move the Plotter back to its initial 0,0 Position&lt;br /&gt;
** Feel free to explore the software. The plotters should work Out-Of-The-Box with the default settings of the Software. Please document if you Settings changed setting for other groups potentially using the Plotter. Here's an image of the setting as of 14.02.23: [[File:mDraw_settings.jpg|300px|mDraw setting page]]&lt;br /&gt;
&lt;br /&gt;
=== using the official gitHub Firmware (Not Recommended) ===&lt;br /&gt;
* download the XY Plotter firmware from the [https://github.com/Makeblock-official/XY-Plotter-2.0|Makeblock GitHub page] or use the one that comes in the Spiel und Objekt Buschcloud folder.&lt;br /&gt;
* Open the Arduino file: XY-Plotter-2.0-master\software\GCodeParser.ino&lt;br /&gt;
* Make sure the Plotter is connected, then select the COM port as usual in the Arduino software.&lt;br /&gt;
* Contrary to the instructions on the official Firmware GitHub website, we selected ''&amp;quot;Arduino Uno&amp;quot;'' as our board type for success.&lt;br /&gt;
* Upload the code to the controller board&lt;br /&gt;
* The code is very, very slow, but it works. You can possibly adjust the values in the code itself to speed it up.&lt;br /&gt;
* we really recommend using the mDraw Firmware, it is much much faster.&lt;br /&gt;
&lt;br /&gt;
== Using GCode ==&lt;br /&gt;
&lt;br /&gt;
Once you have chosen a firmware (we really really suggest you use mDraw version of the firmware), you can use GCode Commands over Serial Communication to control the XY Plotter from Processing (or any other Serial compatible Code Environment).&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
GCode is a Command Set for CNC machines and 3D Printers that is often used to control and set up moving machines. The Makeblock XY Plotter uses GCode commands to move the stepper motors and the Servo into position, change its speed and other fun things.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
GCode are submitted as Strings. For example:&lt;br /&gt;
&lt;br /&gt;
 G0 X100 Y100&lt;br /&gt;
&lt;br /&gt;
moves the Plotter to the position 10cm to the right and 10cm forward from its initial home position (if the home position is on the bottom left).&lt;br /&gt;
&lt;br /&gt;
If you want to test out GCode Commands, you can apply them directly in the Input field of the mDraw software (this works for both Firmware versions) or use an Arduino Serial Monitor. Just type the command and watch what happens.&lt;br /&gt;
&lt;br /&gt;
=== Common GCode Commands for mDraw Firmware===&lt;br /&gt;
* G0 Xxxx Yyyy - moves the Plotter to xxx and yyy position in Millimeters from the Home Position&lt;br /&gt;
* G1  Xxxx Yyyy - - moves the Plotter to xxx and yyy position in Millimeters from the Home Position&lt;br /&gt;
* G28 - moves the Plotter to its 0,0 position&lt;br /&gt;
* M1 xxx - rotates the Servo (from 0 to 255, like any Arduino Servo). Note that the Servo setup of the XY Plotter usually assumes that you have a Pen or Magnet attached to the Plotter, and so a value of 80 is usually considered '''Pen Down''' and a value of 160 is usually considered '''Pen Up'''&lt;br /&gt;
&lt;br /&gt;
=== Common GCode Commands for official Firmware ===&lt;br /&gt;
* You can derive the GCode commands from the Source Code file in XY-Plotter-2.0-master\software\GCodeParser\process_string.io&lt;br /&gt;
* Maybe there is more stuff you can do with that firmware?&lt;br /&gt;
* What's nice about it though is that you can change the firmware yourself! It's just a .ino file!&lt;br /&gt;
* We really recommend you use the mDraw Version&lt;br /&gt;
&lt;br /&gt;
== Project related Code ==&lt;br /&gt;
&lt;br /&gt;
=== Be:B.E.R.N.D. ===&lt;br /&gt;
The following code connects a xy-plotter to unity and also simulates the movement of the plotter in the game view. A simple white plane represents the scale of the plotter and a white cube its movement.&lt;br /&gt;
The movement is controlled by the arrow keys.&lt;br /&gt;
&lt;br /&gt;
GitHub [https://github.com/HfSDigital/XY-Plotter-Unity]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3176</id>
		<title>XY Plotter</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3176"/>
		<updated>2023-02-14T16:39:16Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* Using GCode */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== XY Plotter ==&lt;br /&gt;
&lt;br /&gt;
Spiel und Objekt besitzt drei [https://www.makeblock.com/project/xy-plotter-robot-kit|Makeblock XY Plotter].&lt;br /&gt;
&lt;br /&gt;
[[File:xyPlotter_example.jpg|500px|An image of an xyPlotter during the 2023 GameJam at the FFT Düsseldorf]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Given the age of the hardware, a lot of the documentation is out of date. This article will help you getting the device to work with your WINDOWS computer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Assembly Instructions ==&lt;br /&gt;
If, for some reason, a device broke or you need to reassemble it, here is a link to the [http://download.makeblock.com/XY/pdf/XY%20Plotter%20V2.0%20Assembly%20instructions%EF%BC%882016.6%EF%BC%89.pdf | official assembly guide]&lt;br /&gt;
&lt;br /&gt;
== General Hardware Specifications ==&lt;br /&gt;
* They are controlled by a custom Arduino UNO compatible board with Custom Firmware.&lt;br /&gt;
* The two stepper motors are driven by a 12V external Power supply&lt;br /&gt;
* Some of them might have an additional Servo motor to control a Pen or a Magnet Holder.&lt;br /&gt;
&lt;br /&gt;
== Getting it to work ==&lt;br /&gt;
* Connect the XY Plotter using a Micro-USB Cable.&lt;br /&gt;
* Make sure the XY Plotter's 12V power supply is plugged in and that power is turned on (in addition to the USB Connection).&lt;br /&gt;
* Download the software &amp;quot;mDraw&amp;quot; either from the official [https://www.makeblock.com/project/xy-plotter-robot-kit|XY Plotter website] or from the Spiel und Objekt Buschcloud [https://nx16523.your-storageshare.de/s/CCW7oLcRdMbC7oS|here].&lt;br /&gt;
&lt;br /&gt;
=== using the mDraw Firmware (Recommended) ===&lt;br /&gt;
* open mDraw&lt;br /&gt;
* In the drop-down Menu on the top right, select ''XY-Plotter''&lt;br /&gt;
* Make sure the Plotter is connected, the COM port should be connected in the lower right hand side of the software.&lt;br /&gt;
* Click '''Connect'''&lt;br /&gt;
* To apply the mDraw firmware, click '''Update Firmware'''&lt;br /&gt;
* Wait for the Firmware to Download onto the board&lt;br /&gt;
* Profit!&lt;br /&gt;
** Double-Clicking in the middle of the drawing area should move the Plotter to that point. &lt;br /&gt;
** Clicking on the house Icon should move the Plotter back to its initial 0,0 Position&lt;br /&gt;
** Feel free to explore the software. The plotters should work Out-Of-The-Box with the default settings of the Software. Please document if you Settings changed setting for other groups potentially using the Plotter. Here's an image of the setting as of 14.02.23: [[File:mDraw_settings.jpg|300px|mDraw setting page]]&lt;br /&gt;
&lt;br /&gt;
=== using the official gitHub Firmware (Not Recommended) ===&lt;br /&gt;
* download the XY Plotter firmware from the [https://github.com/Makeblock-official/XY-Plotter-2.0|Makeblock GitHub page] or use the one that comes in the Spiel und Objekt Buschcloud folder.&lt;br /&gt;
* Open the Arduino file: XY-Plotter-2.0-master\software\GCodeParser.ino&lt;br /&gt;
* Make sure the Plotter is connected, then select the COM port as usual in the Arduino software.&lt;br /&gt;
* Contrary to the instructions on the official Firmware GitHub website, we selected ''&amp;quot;Arduino Uno&amp;quot;'' as our board type for success.&lt;br /&gt;
* Upload the code to the controller board&lt;br /&gt;
* The code is very, very slow, but it works. You can possibly adjust the values in the code itself to speed it up.&lt;br /&gt;
* we really recommend using the mDraw Firmware, it is much much faster.&lt;br /&gt;
&lt;br /&gt;
== Using GCode ==&lt;br /&gt;
&lt;br /&gt;
Once you have chosen a firmware (we really really suggest you use mDraw version of the firmware), you can use GCode Commands over Serial Communication to control the XY Plotter from Processing (or any other Serial compatible Code Environment).&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
GCode is a Command Set for CNC machines and 3D Printers that is often used to control and set up moving machines. The Makeblock XY Plotter uses GCode commands to move the stepper motors and the Servo into position, change its speed and other fun things.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
GCode are submitted as Strings. For example:&lt;br /&gt;
&lt;br /&gt;
 G0 X100 Y100&lt;br /&gt;
&lt;br /&gt;
moves the Plotter to the position 10cm to the right and 10cm forward from its initial home position (if the home position is on the bottom left).&lt;br /&gt;
&lt;br /&gt;
If you want to test out GCode Commands, you can apply them directly in the Input field of the mDraw software (this works for both Firmware versions) or use an Arduino Serial Monitor. Just type the command and watch what happens.&lt;br /&gt;
&lt;br /&gt;
=== Common GCode Commands for mDraw Firmware===&lt;br /&gt;
* G0 Xxxx Yyyy - moves the Plotter to xxx and yyy position in Millimeters from the Home Position&lt;br /&gt;
* G1  Xxxx Yyyy - - moves the Plotter to xxx and yyy position in Millimeters from the Home Position&lt;br /&gt;
* G28 - moves the Plotter to its 0,0 position&lt;br /&gt;
* M1 xxx - rotates the Servo (from 0 to 255, like any Arduino Servo). Note that the Servo setup of the XY Plotter usually assumes that you have a Pen or Magnet attached to the Plotter, and so a value of 80 is usually considered '''Pen Down''' and a value of 160 is usually considered '''Pen Up'''&lt;br /&gt;
&lt;br /&gt;
== Project related Code ==&lt;br /&gt;
&lt;br /&gt;
=== Be:B.E.R.N.D. ===&lt;br /&gt;
The following code connects a xy-plotter to unity and also simulates the movement of the plotter in the game view. A simple white plane represents the scale of the plotter and a white cube its movement.&lt;br /&gt;
The movement is controlled by the arrow keys.&lt;br /&gt;
&lt;br /&gt;
GitHub [https://github.com/HfSDigital/XY-Plotter-Unity]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3175</id>
		<title>XY Plotter</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3175"/>
		<updated>2023-02-14T15:58:30Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* using the mDraw Firmware (Recommended) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== XY Plotter ==&lt;br /&gt;
&lt;br /&gt;
Spiel und Objekt besitzt drei [https://www.makeblock.com/project/xy-plotter-robot-kit|Makeblock XY Plotter].&lt;br /&gt;
&lt;br /&gt;
[[File:xyPlotter_example.jpg|500px|An image of an xyPlotter during the 2023 GameJam at the FFT Düsseldorf]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Given the age of the hardware, a lot of the documentation is out of date. This article will help you getting the device to work with your WINDOWS computer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Assembly Instructions ==&lt;br /&gt;
If, for some reason, a device broke or you need to reassemble it, here is a link to the [http://download.makeblock.com/XY/pdf/XY%20Plotter%20V2.0%20Assembly%20instructions%EF%BC%882016.6%EF%BC%89.pdf | official assembly guide]&lt;br /&gt;
&lt;br /&gt;
== General Hardware Specifications ==&lt;br /&gt;
* They are controlled by a custom Arduino UNO compatible board with Custom Firmware.&lt;br /&gt;
* The two stepper motors are driven by a 12V external Power supply&lt;br /&gt;
* Some of them might have an additional Servo motor to control a Pen or a Magnet Holder.&lt;br /&gt;
&lt;br /&gt;
== Getting it to work ==&lt;br /&gt;
* Connect the XY Plotter using a Micro-USB Cable.&lt;br /&gt;
* Make sure the XY Plotter's 12V power supply is plugged in and that power is turned on (in addition to the USB Connection).&lt;br /&gt;
* Download the software &amp;quot;mDraw&amp;quot; either from the official [https://www.makeblock.com/project/xy-plotter-robot-kit|XY Plotter website] or from the Spiel und Objekt Buschcloud [https://nx16523.your-storageshare.de/s/CCW7oLcRdMbC7oS|here].&lt;br /&gt;
&lt;br /&gt;
=== using the mDraw Firmware (Recommended) ===&lt;br /&gt;
* open mDraw&lt;br /&gt;
* In the drop-down Menu on the top right, select ''XY-Plotter''&lt;br /&gt;
* Make sure the Plotter is connected, the COM port should be connected in the lower right hand side of the software.&lt;br /&gt;
* Click '''Connect'''&lt;br /&gt;
* To apply the mDraw firmware, click '''Update Firmware'''&lt;br /&gt;
* Wait for the Firmware to Download onto the board&lt;br /&gt;
* Profit!&lt;br /&gt;
** Double-Clicking in the middle of the drawing area should move the Plotter to that point. &lt;br /&gt;
** Clicking on the house Icon should move the Plotter back to its initial 0,0 Position&lt;br /&gt;
** Feel free to explore the software. The plotters should work Out-Of-The-Box with the default settings of the Software. Please document if you Settings changed setting for other groups potentially using the Plotter. Here's an image of the setting as of 14.02.23: [[File:mDraw_settings.jpg|300px|mDraw setting page]]&lt;br /&gt;
&lt;br /&gt;
=== using the official gitHub Firmware (Not Recommended) ===&lt;br /&gt;
* download the XY Plotter firmware from the [https://github.com/Makeblock-official/XY-Plotter-2.0|Makeblock GitHub page] or use the one that comes in the Spiel und Objekt Buschcloud folder.&lt;br /&gt;
* Open the Arduino file: XY-Plotter-2.0-master\software\GCodeParser.ino&lt;br /&gt;
* Make sure the Plotter is connected, then select the COM port as usual in the Arduino software.&lt;br /&gt;
* Contrary to the instructions on the official Firmware GitHub website, we selected ''&amp;quot;Arduino Uno&amp;quot;'' as our board type for success.&lt;br /&gt;
* Upload the code to the controller board&lt;br /&gt;
* The code is very, very slow, but it works. You can possibly adjust the values in the code itself to speed it up.&lt;br /&gt;
* we really recommend using the mDraw Firmware, it is much much faster.&lt;br /&gt;
&lt;br /&gt;
== Using GCode ==&lt;br /&gt;
&lt;br /&gt;
Once you have&lt;br /&gt;
&lt;br /&gt;
== Project related Code ==&lt;br /&gt;
&lt;br /&gt;
=== Be:B.E.R.N.D. ===&lt;br /&gt;
The following code connects a xy-plotter to unity and also simulates the movement of the plotter in the game view. A simple white plane represents the scale of the plotter and a white cube its movement.&lt;br /&gt;
The movement is controlled by the arrow keys.&lt;br /&gt;
&lt;br /&gt;
GitHub [https://github.com/HfSDigital/XY-Plotter-Unity]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=Datei:MDraw_settings.jpg&amp;diff=3174</id>
		<title>Datei:MDraw settings.jpg</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=Datei:MDraw_settings.jpg&amp;diff=3174"/>
		<updated>2023-02-14T15:57:56Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3173</id>
		<title>XY Plotter</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3173"/>
		<updated>2023-02-14T15:56:55Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* Getting it to work */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== XY Plotter ==&lt;br /&gt;
&lt;br /&gt;
Spiel und Objekt besitzt drei [https://www.makeblock.com/project/xy-plotter-robot-kit|Makeblock XY Plotter].&lt;br /&gt;
&lt;br /&gt;
[[File:xyPlotter_example.jpg|500px|An image of an xyPlotter during the 2023 GameJam at the FFT Düsseldorf]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Given the age of the hardware, a lot of the documentation is out of date. This article will help you getting the device to work with your WINDOWS computer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Assembly Instructions ==&lt;br /&gt;
If, for some reason, a device broke or you need to reassemble it, here is a link to the [http://download.makeblock.com/XY/pdf/XY%20Plotter%20V2.0%20Assembly%20instructions%EF%BC%882016.6%EF%BC%89.pdf | official assembly guide]&lt;br /&gt;
&lt;br /&gt;
== General Hardware Specifications ==&lt;br /&gt;
* They are controlled by a custom Arduino UNO compatible board with Custom Firmware.&lt;br /&gt;
* The two stepper motors are driven by a 12V external Power supply&lt;br /&gt;
* Some of them might have an additional Servo motor to control a Pen or a Magnet Holder.&lt;br /&gt;
&lt;br /&gt;
== Getting it to work ==&lt;br /&gt;
* Connect the XY Plotter using a Micro-USB Cable.&lt;br /&gt;
* Make sure the XY Plotter's 12V power supply is plugged in and that power is turned on (in addition to the USB Connection).&lt;br /&gt;
* Download the software &amp;quot;mDraw&amp;quot; either from the official [https://www.makeblock.com/project/xy-plotter-robot-kit|XY Plotter website] or from the Spiel und Objekt Buschcloud [https://nx16523.your-storageshare.de/s/CCW7oLcRdMbC7oS|here].&lt;br /&gt;
&lt;br /&gt;
=== using the mDraw Firmware (Recommended) ===&lt;br /&gt;
* open mDraw&lt;br /&gt;
* In the drop-down Menu on the top right, select ''XY-Plotter''&lt;br /&gt;
* Make sure the Plotter is connected, the COM port should be connected in the lower right hand side of the software.&lt;br /&gt;
* Click '''Connect'''&lt;br /&gt;
* To apply the mDraw firmware, click '''Update Firmware'''&lt;br /&gt;
* Wait for the Firmware to Download onto the board&lt;br /&gt;
* Profit!&lt;br /&gt;
** Double-Clicking in the middle of the drawing area should move the Plotter to that point. &lt;br /&gt;
** Clicking on the house Icon should move the Plotter back to its initial 0,0 Position&lt;br /&gt;
** Feel free to explore the software. The plotters should work Out-Of-The-Box with the default settings of the Software. Please document if you Settings changed setting for other groups potentially using the Plotter. Here's an image of the setting as of 14.02.23: [[File:mDraw_settings.jpg|500px|mDraw setting page]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== using the official gitHub Firmware (Not Recommended) ===&lt;br /&gt;
* download the XY Plotter firmware from the [https://github.com/Makeblock-official/XY-Plotter-2.0|Makeblock GitHub page] or use the one that comes in the Spiel und Objekt Buschcloud folder.&lt;br /&gt;
* Open the Arduino file: XY-Plotter-2.0-master\software\GCodeParser.ino&lt;br /&gt;
* Make sure the Plotter is connected, then select the COM port as usual in the Arduino software.&lt;br /&gt;
* Contrary to the instructions on the official Firmware GitHub website, we selected ''&amp;quot;Arduino Uno&amp;quot;'' as our board type for success.&lt;br /&gt;
* Upload the code to the controller board&lt;br /&gt;
* The code is very, very slow, but it works. You can possibly adjust the values in the code itself to speed it up.&lt;br /&gt;
* we really recommend using the mDraw Firmware, it is much much faster.&lt;br /&gt;
&lt;br /&gt;
== Using GCode ==&lt;br /&gt;
&lt;br /&gt;
Once you have&lt;br /&gt;
&lt;br /&gt;
== Project related Code ==&lt;br /&gt;
&lt;br /&gt;
=== Be:B.E.R.N.D. ===&lt;br /&gt;
The following code connects a xy-plotter to unity and also simulates the movement of the plotter in the game view. A simple white plane represents the scale of the plotter and a white cube its movement.&lt;br /&gt;
The movement is controlled by the arrow keys.&lt;br /&gt;
&lt;br /&gt;
GitHub [https://github.com/HfSDigital/XY-Plotter-Unity]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3172</id>
		<title>XY Plotter</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3172"/>
		<updated>2023-02-14T15:31:25Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* General Hardware specifications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== XY Plotter ==&lt;br /&gt;
&lt;br /&gt;
Spiel und Objekt besitzt drei [https://www.makeblock.com/project/xy-plotter-robot-kit|Makeblock XY Plotter].&lt;br /&gt;
&lt;br /&gt;
[[File:xyPlotter_example.jpg|500px|An image of an xyPlotter during the 2023 GameJam at the FFT Düsseldorf]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Given the age of the hardware, a lot of the documentation is out of date. This article will help you getting the device to work with your WINDOWS computer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Assembly Instructions ==&lt;br /&gt;
If, for some reason, a device broke or you need to reassemble it, here is a link to the [http://download.makeblock.com/XY/pdf/XY%20Plotter%20V2.0%20Assembly%20instructions%EF%BC%882016.6%EF%BC%89.pdf | official assembly guide]&lt;br /&gt;
&lt;br /&gt;
== General Hardware Specifications ==&lt;br /&gt;
* They are controlled by a custom Arduino UNO compatible board with Custom Firmware.&lt;br /&gt;
* The two stepper motors are driven by a 12V external Power supply&lt;br /&gt;
* Some of them might have an additional Servo motor to control a Pen or a Magnet Holder.&lt;br /&gt;
&lt;br /&gt;
== Getting it to work ==&lt;br /&gt;
* Connect the XY Plotter using a Micro-USB Cable.&lt;br /&gt;
* Make sure the XY Plotter's 12V power supply is plugged in and that power is turned on (in addition to the USB Connection).&lt;br /&gt;
* Download the software &amp;quot;mDraw&amp;quot; either from the official [https://www.makeblock.com/project/xy-plotter-robot-kit|XY Plotter website] or from the Spiel und Objekt Buschcloud [|here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Project related Code ==&lt;br /&gt;
&lt;br /&gt;
=== Be:B.E.R.N.D. ===&lt;br /&gt;
The following code connects a xy-plotter to unity and also simulates the movement of the plotter in the game view. A simple white plane represents the scale of the plotter and a white cube its movement.&lt;br /&gt;
The movement is controlled by the arrow keys.&lt;br /&gt;
&lt;br /&gt;
GitHub [https://github.com/HfSDigital/XY-Plotter-Unity]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3171</id>
		<title>XY Plotter</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3171"/>
		<updated>2023-02-14T15:30:50Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== XY Plotter ==&lt;br /&gt;
&lt;br /&gt;
Spiel und Objekt besitzt drei [https://www.makeblock.com/project/xy-plotter-robot-kit|Makeblock XY Plotter].&lt;br /&gt;
&lt;br /&gt;
[[File:xyPlotter_example.jpg|500px|An image of an xyPlotter during the 2023 GameJam at the FFT Düsseldorf]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Given the age of the hardware, a lot of the documentation is out of date. This article will help you getting the device to work with your WINDOWS computer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Assembly Instructions ==&lt;br /&gt;
If, for some reason, a device broke or you need to reassemble it, here is a link to the [http://download.makeblock.com/XY/pdf/XY%20Plotter%20V2.0%20Assembly%20instructions%EF%BC%882016.6%EF%BC%89.pdf | official assembly guide]&lt;br /&gt;
&lt;br /&gt;
== General Hardware specifications ==&lt;br /&gt;
* They are controlled by a custom Arduino UNO compatible board with Custom Firmware. &lt;br /&gt;
* The two stepper motors are driven by a 12V external Power supply&lt;br /&gt;
* Some of them might have an additional Servo motor to cotrol a Pen or a Magnet Holder.&lt;br /&gt;
&lt;br /&gt;
== Getting it to work ==&lt;br /&gt;
* Connect the XY Plotter using a Micro-USB Cable.&lt;br /&gt;
* Make sure the XY Plotter's 12V power supply is plugged in and that power is turned on (in addition to the USB Connection).&lt;br /&gt;
* Download the software &amp;quot;mDraw&amp;quot; either from the official [https://www.makeblock.com/project/xy-plotter-robot-kit|XY Plotter website] or from the Spiel und Objekt Buschcloud [|here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Project related Code ==&lt;br /&gt;
&lt;br /&gt;
=== Be:B.E.R.N.D. ===&lt;br /&gt;
The following code connects a xy-plotter to unity and also simulates the movement of the plotter in the game view. A simple white plane represents the scale of the plotter and a white cube its movement.&lt;br /&gt;
The movement is controlled by the arrow keys.&lt;br /&gt;
&lt;br /&gt;
GitHub [https://github.com/HfSDigital/XY-Plotter-Unity]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3170</id>
		<title>XY Plotter</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3170"/>
		<updated>2023-02-14T15:21:26Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== XY Plotter ==&lt;br /&gt;
&lt;br /&gt;
Spiel und Objekt besitzt drei [https://www.makeblock.com/project/xy-plotter-robot-kit|Makeblock XY Plotter].&lt;br /&gt;
&lt;br /&gt;
[[File:xyPlotter_example.jpg|500px|An image of an xyPlotter during the 2023 GameJam at the FFT Düsseldorf]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Given the age of the hardware, a lot of the documentation is out of date. This article will help you getting the device to work with your WINDOWS computer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== General Hardware specifications ==&lt;br /&gt;
* They are controlled by a custom Arduino UNO compatible board with Custom Firmware. &lt;br /&gt;
* The two stepper motors are driven by a 12V external Power supply&lt;br /&gt;
* Some of them might have an additional Servo motor to cotrol a Pen or a Magnet Holder.&lt;br /&gt;
&lt;br /&gt;
== Project related Code ==&lt;br /&gt;
&lt;br /&gt;
=== Be:B.E.R.N.D. ===&lt;br /&gt;
The following code connects a xy-plotter to unity and also simulates the movement of the plotter in the game view. A simple white plane represents the scale of the plotter and a white cube its movement.&lt;br /&gt;
The movement is controlled by the arrow keys.&lt;br /&gt;
&lt;br /&gt;
GitHub [https://github.com/HfSDigital/XY-Plotter-Unity]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=Hauptseite&amp;diff=3169</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=Hauptseite&amp;diff=3169"/>
		<updated>2023-02-14T15:20:38Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* XY Plotter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
Willkommen auf dem Spiel und Objekt Wiki!&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf diesen Seiten legen wir Referenzen, Projektdokumentationen, Literaturhinweise, Kursmitschriften und Best Practices ab.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=P R A X I S=&lt;br /&gt;
&lt;br /&gt;
== Kurse ==&lt;br /&gt;
&lt;br /&gt;
=== Spiel &amp;amp;&amp;amp; Objekt ===&lt;br /&gt;
&lt;br /&gt;
====WS2018/19====&lt;br /&gt;
*[[SpieleDesign|Spiel und Theater]] &lt;br /&gt;
*[[PartizipationÜbungen|Übungen Partizipation]]&lt;br /&gt;
*[[NeueMedienGesellschaft|Neue Medien und Gesellschaft]] &lt;br /&gt;
&lt;br /&gt;
====SS2020====&lt;br /&gt;
*[[Vernetzte Räume]]&lt;br /&gt;
*[[From Space to Space]]&lt;br /&gt;
&lt;br /&gt;
====WS2020/21====&lt;br /&gt;
*[[Least Likely]]&lt;br /&gt;
*[[Soft Soft]]&lt;br /&gt;
*[[Cyber+Technofeminism]]&lt;br /&gt;
&lt;br /&gt;
====SS2021====&lt;br /&gt;
*[[Everything is Talkative]]&lt;br /&gt;
&lt;br /&gt;
====WS2021/22====&lt;br /&gt;
*[[Communicating Bodies]]&lt;br /&gt;
*[[Soziale Architektur 2]]&lt;br /&gt;
*[[Spekulative Objekte]]&lt;br /&gt;
*[[Künstlerische Forschung]]&lt;br /&gt;
&lt;br /&gt;
====SS2022====&lt;br /&gt;
*[[Wireless Workshop]]&lt;br /&gt;
&lt;br /&gt;
=== Zeitgenössische Puppenspielkunst HfS ===&lt;br /&gt;
*[https://www.kobakant.at/DIY/?p=8139 #e-textile-adventures] (SS2020)&lt;br /&gt;
*[https://www.kobakant.at/DIY/?p=9038 #paper-adventures] (SS2021)&lt;br /&gt;
*[https://www.kobakant.at/DIY/?p=9545 Sensitive Puppets] (SS2022)&lt;br /&gt;
&lt;br /&gt;
=== Kooperation Uni Bremen ===&lt;br /&gt;
*[[OeffentlichkeitTheorie| Öffentlichkeit bei Habermas und Luhmann]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Projekte==&lt;br /&gt;
&lt;br /&gt;
===1. Jahrgang (2018-2020)===&lt;br /&gt;
*[[Be Bernd]]&lt;br /&gt;
*[[Wir Alle Spielen Theater]]&lt;br /&gt;
*[[Altruistic Modification]]&lt;br /&gt;
*[[Archäologischer Park- Die Villa]]&lt;br /&gt;
*[[Futopolis]]&lt;br /&gt;
*[[Kalte Ecken im Koffer]]&lt;br /&gt;
&lt;br /&gt;
===2. Jahrgang (2020-2022)===&lt;br /&gt;
*[[Random Acts of Vulnerability]]&lt;br /&gt;
*[[Wir Haben Fragen]]&lt;br /&gt;
&lt;br /&gt;
== Recherchen ==&lt;br /&gt;
&lt;br /&gt;
=== Künstlerische ===&lt;br /&gt;
*[[BioArt]]&lt;br /&gt;
*[[Feminismus]]&lt;br /&gt;
*[[VideoAsSculpture]]&lt;br /&gt;
*[[SpieleDesign]]&lt;br /&gt;
*[[NoScreens]]&lt;br /&gt;
*[[DesignFiction]]&lt;br /&gt;
*[[NetworkedArt|Networked Theatre, Performance, Art, Culture...]]&lt;br /&gt;
*[[Donna Haraway]]&lt;br /&gt;
&lt;br /&gt;
=== Technische ===&lt;br /&gt;
*[[Schreiben]]&lt;br /&gt;
*[[Capturing Process]]&lt;br /&gt;
*[[Websites]]&lt;br /&gt;
*[[Ticketing]]&lt;br /&gt;
&lt;br /&gt;
= T E C H N I K =&lt;br /&gt;
== Inventar ==&lt;br /&gt;
*[[Spiel&amp;amp;&amp;amp;Objekt Gadgets]]&lt;br /&gt;
&lt;br /&gt;
=== KITS ===&lt;br /&gt;
*[[S&amp;amp;&amp;amp;O KIT]] (brought to you by the [[Labor für Digitalität]])&lt;br /&gt;
*[[world meets computer KIT]] (from the course [[Least Likely]] Scenario)&lt;br /&gt;
*[[softsoft KIT]] (from the course [[Soft Soft]])&lt;br /&gt;
*[[spaghetti monster KIT]] (from the course [[Communicating Bodies]])&lt;br /&gt;
*[[Dome Pod KIT]]s&lt;br /&gt;
*[[mini Dome Pod Staw KIT]]&lt;br /&gt;
&lt;br /&gt;
== Fabrication ==&lt;br /&gt;
*[[How to: 3D Drucken]]&lt;br /&gt;
*[[How to: build a mini Dome Pod from Drinking Straws]]&lt;br /&gt;
*Circuits&lt;br /&gt;
**[[How to: make PCBs]] (coming soon...)&lt;br /&gt;
**[[Wire]]&lt;br /&gt;
&lt;br /&gt;
== Physical Computing ==&lt;br /&gt;
&lt;br /&gt;
*[[Arduino| Arduino Übersicht]]&lt;br /&gt;
&lt;br /&gt;
*[[Sensors]]&lt;br /&gt;
*[[Actuators]]&lt;br /&gt;
**[[Audio Amplification]]&lt;br /&gt;
*[[Motors | Motors Overview]]&lt;br /&gt;
**[[Stepper Motor and Driver]]&lt;br /&gt;
**[[Servo Motor Control]]&lt;br /&gt;
*[[Transistors]]&lt;br /&gt;
*[[Widerstände]] (Resistors)&lt;br /&gt;
*[[Voltage Divider]] (Spannungs-Teiler)&lt;br /&gt;
*[[Voltage Divider what?]]&lt;br /&gt;
&lt;br /&gt;
=== Physical Computing Examples ===&lt;br /&gt;
*[[Making Sound with Sensors]]&lt;br /&gt;
*[[Bewässerungsanlage mit Arduino Uno und DIY-Feuchtigkeitssensor]]&lt;br /&gt;
&lt;br /&gt;
== Programming ==&lt;br /&gt;
&lt;br /&gt;
=== Unity ===&lt;br /&gt;
*[[Unity]]&lt;br /&gt;
*[[Online_Multiplayer]]&lt;br /&gt;
*[[BasicMultiplayerFramework|Virtuelle Multiuser Räume]]&lt;br /&gt;
&lt;br /&gt;
=== p5.js (Javascript) ===&lt;br /&gt;
*[[p5 Overview]]&lt;br /&gt;
&lt;br /&gt;
===Arduino===&lt;br /&gt;
*[[smoothing analog sensor values]]&lt;br /&gt;
&lt;br /&gt;
====ESP mit Arduino====&lt;br /&gt;
*[[ESP32 mit Arduino | ESP32 Dev Module mit Arduino programmieren]]&lt;br /&gt;
*[[ESP8266 Lolin mit Arduino]] programmieren&lt;br /&gt;
&lt;br /&gt;
====ESP32,ESP8266 mit micropython====&lt;br /&gt;
*[[arduino vs. micropython]]&lt;br /&gt;
*[[micropython install]]&lt;br /&gt;
*[[Empfehlungen micropython]]&lt;br /&gt;
*[[uPyCraft]]&lt;br /&gt;
*[[DMX_MQTT_CONTROLLER]]&lt;br /&gt;
&lt;br /&gt;
===Miscellaneous===&lt;br /&gt;
*[[Multiple_Keyboards_with_RaspberryPi_and_OSC|Mehrere Keyboards/RFID Reader an ein RaspberryPi, mit OSC ins Netzwerk]]&lt;br /&gt;
*[[Raspberry Pi - Helfende Befehle]]&lt;br /&gt;
&lt;br /&gt;
== Kommunikation / Netzwerkommunikation ==&lt;br /&gt;
&lt;br /&gt;
=== Wireless Kommunikation ===&lt;br /&gt;
*see: [[Wireless Workshop]]&lt;br /&gt;
&lt;br /&gt;
=== WIFI ===&lt;br /&gt;
*[[Wifi what?]]&lt;br /&gt;
*[[Ubiquiti WiFi|Stabiles WiFi auf der Bühne]]&lt;br /&gt;
*[[AsusRP-N53|Access Point mit dem Asus RP-N53]]&lt;br /&gt;
*[[Asus RT-AC68U|WLan mit dem Asus RT-AC68U]]&lt;br /&gt;
&lt;br /&gt;
=== OSC Protocol ===&lt;br /&gt;
*[[OSC what?]]&lt;br /&gt;
*[[OSC in Arduino]]&lt;br /&gt;
*[[OSC in Processing]]&lt;br /&gt;
*[[OSC between Arduino and Processing]]&lt;br /&gt;
*[[OSC in vvvv]]&lt;br /&gt;
*[[OSC in Unity]]&lt;br /&gt;
&lt;br /&gt;
=== MQTT Protocol ===&lt;br /&gt;
*[[MQTT what?]]&lt;br /&gt;
MQTT Brokers:&lt;br /&gt;
*[[MQTT Brokers]] (online server, localhost)&lt;br /&gt;
*[[Build your own MQTT Broker]]&lt;br /&gt;
MQTT Clients:&lt;br /&gt;
*[[MQTT in Arduino]] (Shiftr library)&lt;br /&gt;
*[[MQTT in Arduino 2]] (different library)&lt;br /&gt;
*[[MQTT in Processing]] (Shiftr library)&lt;br /&gt;
*[[MQTT between Arduino and Processing]]&lt;br /&gt;
*[[MQTT in vvvv]]&lt;br /&gt;
*[[MQTT in pure data]] (vom [[Communicating Bodies]] Kurs)&lt;br /&gt;
*[[MQTT in Unity]]&lt;br /&gt;
&lt;br /&gt;
*[[Mqtt to Unity via shiftr.io | How to send Data from ESP to Unity with Mqtt protocol]]&lt;br /&gt;
*[[MQTT implementation in Basic Multiplayer via webGL Client | Shiftr.io/MQTT implementation in Basic Multiplayer via webGL Client]]&lt;br /&gt;
&lt;br /&gt;
==== MQTT Examples ====&lt;br /&gt;
*[[PubSub_3sensors_onChange_asSeperateTopics]] (ESP &amp;amp; Arduino)&lt;br /&gt;
*[[PubSub_3sensors_continuous_asStringList]] (ESP &amp;amp; Arduino)&lt;br /&gt;
*[[Pub_3sensors_continuous_asStringList and Sub_3sensors_control3Servos]] (ESP &amp;amp; Arduino)&lt;br /&gt;
&lt;br /&gt;
=== RFID ===&lt;br /&gt;
*[[User Login|Einloggen an einer Station mit einem Avatar]]&lt;br /&gt;
&lt;br /&gt;
=== XY Plotter ===&lt;br /&gt;
Please refer to this page if you want to use the [[XY Plotter | XyPlotter]].&lt;br /&gt;
&lt;br /&gt;
== Video Technik ==&lt;br /&gt;
''Alles, was dir deine Eltern nicht zum Thema '''Videoübertragung''' erzählt haben.'' &lt;br /&gt;
Oft ist ein PC als Schnittstelle zwischer Kamera und Bildschirm/Projektor sinnvoll oder nötig. Doch es gibt auch Fälle, in denen eine unkomplizierte, direkte Verbindung einfacher und besser ist.&lt;br /&gt;
&lt;br /&gt;
=== Verbindung Kamera&amp;lt;-&amp;gt;Ausgabegerät ===&lt;br /&gt;
*[[NX500|NX500 &amp;amp;rArr; Bildschirm oder Projektor]]&lt;br /&gt;
&lt;br /&gt;
=== PC als Schnittstelle ===&lt;br /&gt;
*[[Der Videomischer]]&lt;br /&gt;
*[[Blackmagic Intensity|Blackmagic Intensity &amp;amp;rArr; PC]]&lt;br /&gt;
&lt;br /&gt;
= T H E O R I E =&lt;br /&gt;
&lt;br /&gt;
== Glossare, Begriffe und Konzepte ==&lt;br /&gt;
* [[GlossarCG|Begriffe der Computergrafik]]&lt;br /&gt;
* [[GlossarSensorActuator|Sensoren und Aktuatoren]]&lt;br /&gt;
* [[Algorithms|Common Algorithms]]&lt;br /&gt;
* [[Glossar Code|Code Glossar]]&lt;br /&gt;
* [[Glossar Elektronik|Elektronik Glossar]]&lt;br /&gt;
* [[Netzwerk]]&lt;br /&gt;
* [[Interaktionstaxonomie AR]]&lt;br /&gt;
* [[Bibliothek|Literatur Bibliothek]]&lt;br /&gt;
&lt;br /&gt;
=P R A K T I S C H E S=&lt;br /&gt;
&lt;br /&gt;
==Stuff==&lt;br /&gt;
** [[Shopping]]&lt;br /&gt;
** [[Events]]&lt;br /&gt;
&lt;br /&gt;
==Hack your &amp;quot;Theater&amp;quot; - How To==&lt;br /&gt;
*[[for Theaterleitung]]&lt;br /&gt;
*[[for Künstler*innen]]&lt;br /&gt;
&lt;br /&gt;
==Wiki Help==&lt;br /&gt;
*[[how to structure documentation well]]&lt;br /&gt;
*[[cheatsheet]]&lt;br /&gt;
*[https://www.mediawiki.org/wiki/Help:Formatting Hilfe: Formatierung]&lt;br /&gt;
*[https://www.mediawiki.org/wiki/Help:Links Hilfe: Links]&lt;br /&gt;
*[[ignore wiki syntax]]&lt;br /&gt;
*[[code syntax highlighting]]&lt;br /&gt;
*[[text scroll box]&lt;br /&gt;
&lt;br /&gt;
=In Arbeit=&lt;br /&gt;
*[[OSC Kommunikation in Processing]]&lt;br /&gt;
*[[software architecture in theatre]]&lt;br /&gt;
*[[Verbindung Arduino / Unity - Research Diary]]&lt;br /&gt;
*[[TFT LCD Shield|2.6&amp;quot;/2.8&amp;quot; TFT LCD Shield mit Touch]]&lt;br /&gt;
*[[Trying out Wikistuff]]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=Datei:XyPlotter_example.jpg&amp;diff=3168</id>
		<title>Datei:XyPlotter example.jpg</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=Datei:XyPlotter_example.jpg&amp;diff=3168"/>
		<updated>2023-02-14T15:19:16Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3167</id>
		<title>XY Plotter</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=XY_Plotter&amp;diff=3167"/>
		<updated>2023-02-14T15:15:20Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: Die Seite wurde neu angelegt: „== XY Plotter ==  Spiel und Objekt besitzt drei [https://www.makeblock.com/project/xy-plotter-robot-kit|Makeblock XY Plotter].  An image of an xyPlotter during the 2023 GameJam at the FFT Düsseldorf &amp;lt;br/&amp;gt; Given the age of the hardware, a lot of the documentation is out of date. This article will help you getting the device to work with your WINDOWS computer.   == General Hardware specifications == * They are controlle…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== XY Plotter ==&lt;br /&gt;
&lt;br /&gt;
Spiel und Objekt besitzt drei [https://www.makeblock.com/project/xy-plotter-robot-kit|Makeblock XY Plotter].&lt;br /&gt;
&lt;br /&gt;
[[File:xyPlotter_example.jpg|500px|An image of an xyPlotter during the 2023 GameJam at the FFT Düsseldorf]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Given the age of the hardware, a lot of the documentation is out of date. This article will help you getting the device to work with your WINDOWS computer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== General Hardware specifications ==&lt;br /&gt;
* They are controlled by a custom Arduino UNO compatible board with Custom Firmware. &lt;br /&gt;
* The two stepper motors are driven by a 12V external Power supply&lt;br /&gt;
* Some of them might have an additional Servo motor to cotrol a Pen or a Magnet Holder.&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=Hauptseite&amp;diff=3166</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=Hauptseite&amp;diff=3166"/>
		<updated>2023-02-14T15:07:16Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* XY Plotter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
Willkommen auf dem Spiel und Objekt Wiki!&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf diesen Seiten legen wir Referenzen, Projektdokumentationen, Literaturhinweise, Kursmitschriften und Best Practices ab.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=P R A X I S=&lt;br /&gt;
&lt;br /&gt;
== Kurse ==&lt;br /&gt;
&lt;br /&gt;
=== Spiel &amp;amp;&amp;amp; Objekt ===&lt;br /&gt;
&lt;br /&gt;
====WS2018/19====&lt;br /&gt;
*[[SpieleDesign|Spiel und Theater]] &lt;br /&gt;
*[[PartizipationÜbungen|Übungen Partizipation]]&lt;br /&gt;
*[[NeueMedienGesellschaft|Neue Medien und Gesellschaft]] &lt;br /&gt;
&lt;br /&gt;
====SS2020====&lt;br /&gt;
*[[Vernetzte Räume]]&lt;br /&gt;
*[[From Space to Space]]&lt;br /&gt;
&lt;br /&gt;
====WS2020/21====&lt;br /&gt;
*[[Least Likely]]&lt;br /&gt;
*[[Soft Soft]]&lt;br /&gt;
*[[Cyber+Technofeminism]]&lt;br /&gt;
&lt;br /&gt;
====SS2021====&lt;br /&gt;
*[[Everything is Talkative]]&lt;br /&gt;
&lt;br /&gt;
====WS2021/22====&lt;br /&gt;
*[[Communicating Bodies]]&lt;br /&gt;
*[[Soziale Architektur 2]]&lt;br /&gt;
*[[Spekulative Objekte]]&lt;br /&gt;
*[[Künstlerische Forschung]]&lt;br /&gt;
&lt;br /&gt;
====SS2022====&lt;br /&gt;
*[[Wireless Workshop]]&lt;br /&gt;
&lt;br /&gt;
=== Zeitgenössische Puppenspielkunst HfS ===&lt;br /&gt;
*[https://www.kobakant.at/DIY/?p=8139 #e-textile-adventures] (SS2020)&lt;br /&gt;
*[https://www.kobakant.at/DIY/?p=9038 #paper-adventures] (SS2021)&lt;br /&gt;
*[https://www.kobakant.at/DIY/?p=9545 Sensitive Puppets] (SS2022)&lt;br /&gt;
&lt;br /&gt;
=== Kooperation Uni Bremen ===&lt;br /&gt;
*[[OeffentlichkeitTheorie| Öffentlichkeit bei Habermas und Luhmann]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Projekte==&lt;br /&gt;
&lt;br /&gt;
===1. Jahrgang (2018-2020)===&lt;br /&gt;
*[[Be Bernd]]&lt;br /&gt;
*[[Wir Alle Spielen Theater]]&lt;br /&gt;
*[[Altruistic Modification]]&lt;br /&gt;
*[[Archäologischer Park- Die Villa]]&lt;br /&gt;
*[[Futopolis]]&lt;br /&gt;
*[[Kalte Ecken im Koffer]]&lt;br /&gt;
&lt;br /&gt;
===2. Jahrgang (2020-2022)===&lt;br /&gt;
*[[Random Acts of Vulnerability]]&lt;br /&gt;
*[[Wir Haben Fragen]]&lt;br /&gt;
&lt;br /&gt;
== Recherchen ==&lt;br /&gt;
&lt;br /&gt;
=== Künstlerische ===&lt;br /&gt;
*[[BioArt]]&lt;br /&gt;
*[[Feminismus]]&lt;br /&gt;
*[[VideoAsSculpture]]&lt;br /&gt;
*[[SpieleDesign]]&lt;br /&gt;
*[[NoScreens]]&lt;br /&gt;
*[[DesignFiction]]&lt;br /&gt;
*[[NetworkedArt|Networked Theatre, Performance, Art, Culture...]]&lt;br /&gt;
*[[Donna Haraway]]&lt;br /&gt;
&lt;br /&gt;
=== Technische ===&lt;br /&gt;
*[[Schreiben]]&lt;br /&gt;
*[[Capturing Process]]&lt;br /&gt;
*[[Websites]]&lt;br /&gt;
*[[Ticketing]]&lt;br /&gt;
&lt;br /&gt;
= T E C H N I K =&lt;br /&gt;
== Inventar ==&lt;br /&gt;
*[[Spiel&amp;amp;&amp;amp;Objekt Gadgets]]&lt;br /&gt;
&lt;br /&gt;
=== KITS ===&lt;br /&gt;
*[[S&amp;amp;&amp;amp;O KIT]] (brought to you by the [[Labor für Digitalität]])&lt;br /&gt;
*[[world meets computer KIT]] (from the course [[Least Likely]] Scenario)&lt;br /&gt;
*[[softsoft KIT]] (from the course [[Soft Soft]])&lt;br /&gt;
*[[spaghetti monster KIT]] (from the course [[Communicating Bodies]])&lt;br /&gt;
*[[Dome Pod KIT]]s&lt;br /&gt;
*[[mini Dome Pod Staw KIT]]&lt;br /&gt;
&lt;br /&gt;
== Fabrication ==&lt;br /&gt;
*[[How to: 3D Drucken]]&lt;br /&gt;
*[[How to: build a mini Dome Pod from Drinking Straws]]&lt;br /&gt;
*Circuits&lt;br /&gt;
**[[How to: make PCBs]] (coming soon...)&lt;br /&gt;
**[[Wire]]&lt;br /&gt;
&lt;br /&gt;
== Physical Computing ==&lt;br /&gt;
&lt;br /&gt;
*[[Arduino| Arduino Übersicht]]&lt;br /&gt;
&lt;br /&gt;
*[[Sensors]]&lt;br /&gt;
*[[Actuators]]&lt;br /&gt;
**[[Audio Amplification]]&lt;br /&gt;
*[[Motors | Motors Overview]]&lt;br /&gt;
**[[Stepper Motor and Driver]]&lt;br /&gt;
**[[Servo Motor Control]]&lt;br /&gt;
*[[Transistors]]&lt;br /&gt;
*[[Widerstände]] (Resistors)&lt;br /&gt;
*[[Voltage Divider]] (Spannungs-Teiler)&lt;br /&gt;
*[[Voltage Divider what?]]&lt;br /&gt;
&lt;br /&gt;
=== Physical Computing Examples ===&lt;br /&gt;
*[[Making Sound with Sensors]]&lt;br /&gt;
*[[Bewässerungsanlage mit Arduino Uno und DIY-Feuchtigkeitssensor]]&lt;br /&gt;
&lt;br /&gt;
== Programming ==&lt;br /&gt;
&lt;br /&gt;
=== Unity ===&lt;br /&gt;
*[[Unity]]&lt;br /&gt;
*[[Online_Multiplayer]]&lt;br /&gt;
*[[BasicMultiplayerFramework|Virtuelle Multiuser Räume]]&lt;br /&gt;
&lt;br /&gt;
=== p5.js (Javascript) ===&lt;br /&gt;
*[[p5 Overview]]&lt;br /&gt;
&lt;br /&gt;
===Arduino===&lt;br /&gt;
*[[smoothing analog sensor values]]&lt;br /&gt;
&lt;br /&gt;
====ESP mit Arduino====&lt;br /&gt;
*[[ESP32 mit Arduino | ESP32 Dev Module mit Arduino programmieren]]&lt;br /&gt;
*[[ESP8266 Lolin mit Arduino]] programmieren&lt;br /&gt;
&lt;br /&gt;
====ESP32,ESP8266 mit micropython====&lt;br /&gt;
*[[arduino vs. micropython]]&lt;br /&gt;
*[[micropython install]]&lt;br /&gt;
*[[Empfehlungen micropython]]&lt;br /&gt;
*[[uPyCraft]]&lt;br /&gt;
*[[DMX_MQTT_CONTROLLER]]&lt;br /&gt;
&lt;br /&gt;
===Miscellaneous===&lt;br /&gt;
*[[Multiple_Keyboards_with_RaspberryPi_and_OSC|Mehrere Keyboards/RFID Reader an ein RaspberryPi, mit OSC ins Netzwerk]]&lt;br /&gt;
*[[Raspberry Pi - Helfende Befehle]]&lt;br /&gt;
&lt;br /&gt;
== Kommunikation / Netzwerkommunikation ==&lt;br /&gt;
&lt;br /&gt;
=== Wireless Kommunikation ===&lt;br /&gt;
*see: [[Wireless Workshop]]&lt;br /&gt;
&lt;br /&gt;
=== WIFI ===&lt;br /&gt;
*[[Wifi what?]]&lt;br /&gt;
*[[Ubiquiti WiFi|Stabiles WiFi auf der Bühne]]&lt;br /&gt;
*[[AsusRP-N53|Access Point mit dem Asus RP-N53]]&lt;br /&gt;
*[[Asus RT-AC68U|WLan mit dem Asus RT-AC68U]]&lt;br /&gt;
&lt;br /&gt;
=== OSC Protocol ===&lt;br /&gt;
*[[OSC what?]]&lt;br /&gt;
*[[OSC in Arduino]]&lt;br /&gt;
*[[OSC in Processing]]&lt;br /&gt;
*[[OSC between Arduino and Processing]]&lt;br /&gt;
*[[OSC in vvvv]]&lt;br /&gt;
*[[OSC in Unity]]&lt;br /&gt;
&lt;br /&gt;
=== MQTT Protocol ===&lt;br /&gt;
*[[MQTT what?]]&lt;br /&gt;
MQTT Brokers:&lt;br /&gt;
*[[MQTT Brokers]] (online server, localhost)&lt;br /&gt;
*[[Build your own MQTT Broker]]&lt;br /&gt;
MQTT Clients:&lt;br /&gt;
*[[MQTT in Arduino]] (Shiftr library)&lt;br /&gt;
*[[MQTT in Arduino 2]] (different library)&lt;br /&gt;
*[[MQTT in Processing]] (Shiftr library)&lt;br /&gt;
*[[MQTT between Arduino and Processing]]&lt;br /&gt;
*[[MQTT in vvvv]]&lt;br /&gt;
*[[MQTT in pure data]] (vom [[Communicating Bodies]] Kurs)&lt;br /&gt;
*[[MQTT in Unity]]&lt;br /&gt;
&lt;br /&gt;
*[[Mqtt to Unity via shiftr.io | How to send Data from ESP to Unity with Mqtt protocol]]&lt;br /&gt;
*[[MQTT implementation in Basic Multiplayer via webGL Client | Shiftr.io/MQTT implementation in Basic Multiplayer via webGL Client]]&lt;br /&gt;
&lt;br /&gt;
==== MQTT Examples ====&lt;br /&gt;
*[[PubSub_3sensors_onChange_asSeperateTopics]] (ESP &amp;amp; Arduino)&lt;br /&gt;
*[[PubSub_3sensors_continuous_asStringList]] (ESP &amp;amp; Arduino)&lt;br /&gt;
*[[Pub_3sensors_continuous_asStringList and Sub_3sensors_control3Servos]] (ESP &amp;amp; Arduino)&lt;br /&gt;
&lt;br /&gt;
=== RFID ===&lt;br /&gt;
*[[User Login|Einloggen an einer Station mit einem Avatar]]&lt;br /&gt;
&lt;br /&gt;
=== XY Plotter ===&lt;br /&gt;
[[XY Plotter | XyPlotter]]&lt;br /&gt;
&lt;br /&gt;
The following code connects a xy-plotter to unity and also simulates the movement of the plotter in the game view. A simple white plane represents the scale of the plotter and a white cube its movement.&lt;br /&gt;
The movement is controlled by the arrow keys.&lt;br /&gt;
&lt;br /&gt;
GitHub [https://github.com/HfSDigital/XY-Plotter-Unity]&lt;br /&gt;
&lt;br /&gt;
== Video Technik ==&lt;br /&gt;
''Alles, was dir deine Eltern nicht zum Thema '''Videoübertragung''' erzählt haben.'' &lt;br /&gt;
Oft ist ein PC als Schnittstelle zwischer Kamera und Bildschirm/Projektor sinnvoll oder nötig. Doch es gibt auch Fälle, in denen eine unkomplizierte, direkte Verbindung einfacher und besser ist.&lt;br /&gt;
&lt;br /&gt;
=== Verbindung Kamera&amp;lt;-&amp;gt;Ausgabegerät ===&lt;br /&gt;
*[[NX500|NX500 &amp;amp;rArr; Bildschirm oder Projektor]]&lt;br /&gt;
&lt;br /&gt;
=== PC als Schnittstelle ===&lt;br /&gt;
*[[Der Videomischer]]&lt;br /&gt;
*[[Blackmagic Intensity|Blackmagic Intensity &amp;amp;rArr; PC]]&lt;br /&gt;
&lt;br /&gt;
= T H E O R I E =&lt;br /&gt;
&lt;br /&gt;
== Glossare, Begriffe und Konzepte ==&lt;br /&gt;
* [[GlossarCG|Begriffe der Computergrafik]]&lt;br /&gt;
* [[GlossarSensorActuator|Sensoren und Aktuatoren]]&lt;br /&gt;
* [[Algorithms|Common Algorithms]]&lt;br /&gt;
* [[Glossar Code|Code Glossar]]&lt;br /&gt;
* [[Glossar Elektronik|Elektronik Glossar]]&lt;br /&gt;
* [[Netzwerk]]&lt;br /&gt;
* [[Interaktionstaxonomie AR]]&lt;br /&gt;
* [[Bibliothek|Literatur Bibliothek]]&lt;br /&gt;
&lt;br /&gt;
=P R A K T I S C H E S=&lt;br /&gt;
&lt;br /&gt;
==Stuff==&lt;br /&gt;
** [[Shopping]]&lt;br /&gt;
** [[Events]]&lt;br /&gt;
&lt;br /&gt;
==Hack your &amp;quot;Theater&amp;quot; - How To==&lt;br /&gt;
*[[for Theaterleitung]]&lt;br /&gt;
*[[for Künstler*innen]]&lt;br /&gt;
&lt;br /&gt;
==Wiki Help==&lt;br /&gt;
*[[how to structure documentation well]]&lt;br /&gt;
*[[cheatsheet]]&lt;br /&gt;
*[https://www.mediawiki.org/wiki/Help:Formatting Hilfe: Formatierung]&lt;br /&gt;
*[https://www.mediawiki.org/wiki/Help:Links Hilfe: Links]&lt;br /&gt;
*[[ignore wiki syntax]]&lt;br /&gt;
*[[code syntax highlighting]]&lt;br /&gt;
*[[text scroll box]&lt;br /&gt;
&lt;br /&gt;
=In Arbeit=&lt;br /&gt;
*[[OSC Kommunikation in Processing]]&lt;br /&gt;
*[[software architecture in theatre]]&lt;br /&gt;
*[[Verbindung Arduino / Unity - Research Diary]]&lt;br /&gt;
*[[TFT LCD Shield|2.6&amp;quot;/2.8&amp;quot; TFT LCD Shield mit Touch]]&lt;br /&gt;
*[[Trying out Wikistuff]]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=OSC_in_Unity&amp;diff=2980</id>
		<title>OSC in Unity</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=OSC_in_Unity&amp;diff=2980"/>
		<updated>2022-02-03T18:48:33Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* Herunterladen des externen OSC Codes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= OSC in Unity =&lt;br /&gt;
Um von anderen Programmen (z.B. Processing) Daten an Unity zu senden, verwenden wir das IP Protokoll und eine OSC Library. Das heisst, das Device auf dem das Unity Programm laufen soll (Computer oder Tablet) muss mit einem [[Netzwerk]] verbunden sein und eine '''IP-Adresse''' besitzen. OSC basiert wiederum auf dem UDP Protokoll, das vor allem in lokalen Netzwerken gut funktioniert. Mehr Infos zu Protokollen und Netzwerken gibt es auf der [[Netzwerk]] Seite.&lt;br /&gt;
&lt;br /&gt;
== externen OSC Code in unser Projekt einfügen ==&lt;br /&gt;
&lt;br /&gt;
=== Herunterladen des externen OSC Codes ===&lt;br /&gt;
Code für die Implementierung von OSC in Unity gibt es auf [https://github.com/thomasfredericks/UnityOSC/releases | der github Seite von Thomas Fredericks unter ''Releases''], eine kurze Erklärung und ein Beispiel auf [https://thomasfredericks.github.io/UnityOSC/| seiner Webseite]. Für uns ist der Release '''For Unity 2018''' relevant (funktioniert auch bis Unity 2020.3).&lt;br /&gt;
  &lt;br /&gt;
Nachdem wir den SourceCode als .zip heruntergeladen haben, erstellen wir am Besten ein neues Unity Projekt mit dem Standard Template (3D). Wenn ihr bereits ein Unity Projekt habt, in dem ihr OSC verwenden möchtet, dann könnt ihr diesen Schritt gerne überspringen. :-)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die von uns hier verwendete OSC-Implementierung funktioniert nachgewiesen auf Unity 2019.4 und Unity 2020.3. Gerne könnt ihr 2020.3 nutzen.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:new-osc-test-project.jpg|600px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Einfügen des externen OSC Codes in unser Projekt ===&lt;br /&gt;
&lt;br /&gt;
Nachdem wir das Projekt erstellt haben, und der Unity Editor das Projekt geöffnet hat, kopieren wir den Inhalt der heruntergeladenen .zip Datei in den Projektordner unseres neu erstellten Projekts, wie hier angezeigt: &amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:copy_osc_to_new_unity_project.jpg|800px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Windows fragt, ob wir einige der zu kopierenden Dateien überschreiben oder überspringen wollen. In diesem Fall würden wir sie '''überspringen'''. Beides ist aber okay.&lt;br /&gt;
&lt;br /&gt;
Wenn wir zurück zu Unity wechseln, werden nach einem kurzen Moment des Importierens im Project Tab einige neue Dateien angezeigt:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:imported-Osc-unity.jpg|800px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Aufräumen ===&lt;br /&gt;
Für die Anleitung hier im Wiki werden wir nicht vom mitgelieferten beispiel ausgehen, deswegen würde ich die 5 Dateien die von OSC direkt in den Assets Folder kopiert worden sind direkt in den Extras-Ordner verschieben, um die Übersicht im Projekt zu behalten:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:move-unnecessary-example-osc-unity.jpg|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Ebenso lohnt es sich, direkt im Assets Folder einen Ordner zu erstellen, den wir '''Scripts''' nennen, und in dem wir unsere eigenen Scripte speichern werden:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Unity-scripts-folder-osc-example.jpeg|400px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== OSC in unserer Szene benutzen ==&lt;br /&gt;
Nachdem wir den OSC Code erfolgreich ins Projekt importiert haben, können wir nur beispielhaft damit arbeiten. Hierfür müssen wir das externe OSC.cs Script auf ein GameObject in unserer Szene legen.&lt;br /&gt;
Wir wollen im weiteren Verlauf Scripte schreiben, die auf die Funktionen des OSC.cs Scripts zugreifen können. Dafür müssen wir das OSC.cs Script in ein GameObject in der Szene einfügen.&lt;br /&gt;
&lt;br /&gt;
=== Einfügen des OSC Scripts in die Szene ===&lt;br /&gt;
Dafür erstellen wir am Besten ein neues, leeres Gameobject in unserer Hierarchy und nennen es &amp;quot;OSC&amp;quot;(wir könnten es auch anders nennen) : &amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:create-osc-gameobject.jpg|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Dann wählen wir das eben erstellte Gameobject in unserer Hierarchy an und ziehen das OSC.cs Script aus dem Ordner OSC in unserem Project Tab in den Inspector:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:place-osc-script-on-gameobject.jpg|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Einstellungen im OSC Script ===&lt;br /&gt;
Wenn wir das Script eingefügt haben, können wir einige Variablen ändern, die mit unserer Nutzung von OSC im weiteren Verlauf zu tun haben:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:osc-script-explained.jpg|500px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''inPort''' - steht für den Port, auf dem das OSC Script nach ankommenden OSC-Messages sucht. Im Processing OSC Beispiel ist der Port auf 12000 gesetzt, hier ist er Standardmässig auf 6969 gesetzt. Es lohnt sich, das direkt zu ändern, damit Processing und Unity direkt miteinander kommunizieren können.&lt;br /&gt;
* '''outIP''' - steht für die IP Adresse, an die unser OSC-Script im weiteren Verlauf OSC-Messages ''schicken'' kann.&lt;br /&gt;
* '''outPort''' - steht für den Port, an dem geschickte OSC-Messages ankommen werden.&lt;br /&gt;
&lt;br /&gt;
'''Wichtig:''' der inPort wird von Unity für das Betriebssystem reserviert, wenn wir auf Play drücken. Das heisst, kein anderes Programm kann dann auf diesen Port zugreifen, bzw. es gibt eine Fehlermeldung, wenn ein Anderes Programm schon diesen Port reserviert hat. Wenn ihr das Processing Beispiel gleichzeitig laufen habt können nicht beide Programme den Port 12000 reservieren.&lt;br /&gt;
&lt;br /&gt;
== OSC Nachrichten empfangen ==&lt;br /&gt;
&lt;br /&gt;
Nun möchten wir über ein eigenes Script auf die OSC-Funktionalität des OSC Scripts zugreifen. ''Es gibt sehr viele verschiedene Wege das zu tun. Der hier angeführte Weg macht viele Dinge, die im weiteren Verlauf eleganter gelöst werden können. Es wird Kekse für elegantere Lösungen geben.''&amp;lt;br&amp;gt;&lt;br /&gt;
* Hierzu erstellen wir ein neues, leeres GameObject in der Hierarchy und geben ihm den Namen &amp;quot;OSCempfangen&amp;quot;:&amp;lt;br&amp;gt;&lt;br /&gt;
* Daraufhin erstellen wir in unserem Scripts-Ordner im Project Tab ein neues C# Script und nennen es OscReceive.cs (Gross-Kleinschreibung beachten! Scripte immer mit Grossbuchstaben beginnen!). ''Der Unterschied in der Namensgebung zwischen dem Gameobject und dem Script soll andeuten, dass diese Namen frei gewählt sind und nicht etwa eine versteckte Unity Funktionalität andeuten. Es lohnt sich, Scripte und Gameobjects nach dem zu benennen, was sie tun.''&lt;br /&gt;
* Schliesslich legen wir unser neu erstelltes Script auf das neu erstellte Gameobject, so dass es sich in unsere Szene befindet und ausgeführt wird. Daraufhin können wir mit der eigentlichen Programmierung beginnen.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:osc-oscreceive-setup.jpg|700px]]&lt;br /&gt;
&lt;br /&gt;
=== In Code auf das externe OSC Script zugreifen ===&lt;br /&gt;
Wir haben nun in unserer Szene zwei Scripte als Components auf jeweils einem GameObject:&lt;br /&gt;
* Das OSC-Script, dass wir von extern haben. &amp;lt;br&amp;gt;&lt;br /&gt;
und:&amp;lt;br&amp;gt;&lt;br /&gt;
* Unser OscReceive Script, das wir jetzt schreiben wollen.&lt;br /&gt;
&lt;br /&gt;
Wir möchten von unserem eigenen OscReceive-Script aus auf die Funktionen und Variablen des OSC Scripts zugreifen. Hierzu müssen wir in unserem Code eine Verbindung über eine Variable schaffen, durch die wir auf die Funktionen und Variablen des anderen Scripts zugreifen können:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:osc-connect-to-osc-cSharp.jpg|500px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ihr erinnert euch sicherlich, dass Scripte in Unity immer auch als Typ genutzt werden können, um von &amp;quot;aussen&amp;quot; auf alle Variablen und Funktionen dieses Scripts zugreifen zu können. Wir wollen also durch eine Variable vom Typ '''OSC''', die wir &amp;quot;myOSC&amp;quot; nennen (könnte auch anders heissen), auf die Funktionen und Variablen des OSC-Scripts zugreifen.&amp;lt;br&amp;gt;&lt;br /&gt;
Wir definieren diese Variable als public, damit wir sie im Unity Editor mit dem bereits in der Szene befindlichen OSC-Script verbinden können:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:connect-osc-script-in-editor.jpg|700px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nachdem wir diese Verbindung im Unity Editor geschaffen haben, können wir nun mit Hilfe von &amp;quot;myOSC&amp;quot; auf die Funktionalität des OSC Scripts zugreifen.&lt;br /&gt;
&lt;br /&gt;
=== OSC Messages im eigenen Script empfangen ===&lt;br /&gt;
Um im eigenen Script OSC Messages zu empfangen, müssen wir selbst eine Funktion festlegen, die aufgerufen wird, wenn eine neue OSC-Message an unserem inPort ankommt. Das tun wir, indem wir folgende Funktion im OSC Script über unsere myOSC Variable ausführen:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 SetMessageHandler(''funktionsname'');&lt;br /&gt;
&lt;br /&gt;
Dabei können wir uns den Funktionsnamen aussuchen. Er beschreibt eine Funktion, die in unserem Script stehen muss, und die ausgeführt wird, wenn messages ankommen. Ich schlage vor, wir nutzen den selben Namen wie bei Processing: ''OscEvent''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da wir diese Funktion nur einmal ausführen müssen, um die Verbindung von &amp;quot;Message kommt an&amp;quot; zu &amp;quot;Funktion wird ausgeführt&amp;quot; einzustellen, macht es Sinn, diesen Funktionsaufruf in die &amp;quot;Start&amp;quot; Funktion unseres Scripts zu schreiben: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  public OSC myOSC;&lt;br /&gt;
 &lt;br /&gt;
    // Start is called before the first frame update&lt;br /&gt;
    void Start()&lt;br /&gt;
    {&lt;br /&gt;
        myOSC.SetAllMessageHandler(OscEvent);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
Als nächstes müssen wir die Funktion selbst schreiben und festlegen, was passieren soll, wenn eine OscMessage ankommt. Wir fügen also eine neue Funktion in unser Script ein, die ''OscEvent'' heisst (weil wir sie so genannt haben), und die als Parameter eine Variable vom Typ OscMessage hat, die wir z.B. ''receivedMessage'' nennen können (weil wir es wollen, nicht müssen).&lt;br /&gt;
Diese Funktion muss einen Parameter vom Typ OscMessage haben, damit die verbindung von &amp;quot;Message kommt an&amp;quot; und &amp;quot;Funktion wird aufgerufen&amp;quot; funktioniert. Wie wir die Variable im Parameter nennen ist allerdings uns überlassen.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Funktion würde dann so aussehen:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    void OscEvent(OscMessage receivedMessage)&lt;br /&gt;
    {&lt;br /&gt;
 &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
Durch den Parameter bekommen wir automatisch die neueste, angekommene OscMessage zugespielt und können in dieser Funktion anfangen, mit ihr umzugehen. Unser Script sieht also inzwischen so aus:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:basic-osc-receive-script.JPG|500px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OSC Message &amp;quot;auspacken&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Da wir jetzt davon ausgehen können, dass wir eine Funktion haben, die ausgeführt wird, wenn eine OscMessage am inPort ankommt, und eine Variable durch die wir Zugang zu dieser OscMessage haben (die wir ''receivedMessage'' genannt haben), können wir uns mit dem Inhalt der Message befassen. Ähnlich wie in Processing stehen uns mehrere Funktionen zur Verfügung, um auf die Inhalte der Message zuzugreifen:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 receivedMessage.address;            //gibt uns die osc-Adresse der OSC-Message&lt;br /&gt;
 receivedMessage.GetInt(index);      //gibt uns eine ganze Zahl als Wert an der Stelle &amp;quot;index&amp;quot; zurück&lt;br /&gt;
 receivedMessage.GetFloat(index);    //gibt uns eine Kommazahl als Wert an der Stelle &amp;quot;index&amp;quot; zurück&lt;br /&gt;
 &lt;br /&gt;
 receivedMessage.values[index];      //lässt uns direkt auf den Wert in der Liste an der Stelle &amp;quot;index&amp;quot; zugreifen&lt;br /&gt;
 &lt;br /&gt;
 receivedMessage.values[index].ToString();    //gibt uns einen String als Wert an der Stelle &amp;quot;index&amp;quot; zurück&lt;br /&gt;
&lt;br /&gt;
Ausgehend von unserem Processing-Code, den wir hier als Test-Sendeprogramm nutzen können, können wir unsere Funktion also folgendermassen schreiben:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:debug-osc-receive-script.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
=== Wenn alles funktioniert ===&lt;br /&gt;
Hier ist ein Screenshot von Unity und Processing nebeneinander, mit einigen rot eingefärbten Bereichen. Könnt ihr euch erklären, wieso die rot eingefärbten Werte so gewählt wurden, wie sie gewählt wurden?&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:osc-unity-processing-test-setup.JPG|1000px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Where To From Here ===&lt;br /&gt;
In diesem Beispiel haben wir ein eigenes Script geschrieben, das nur dafür da ist, den Inhalt der OscMessage in die Konsole zu schreiben. In euren projekten wollt ihr sicherlich kompliziertere Dinge machen, wenn ihr OscMessages empfangt, und werdet vielleicht schon ein Script haben, das etwas bestimmtes macht (Ton abspielen, Dinge bewegen, etc.) wenn eine OscMessage empfangen wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn ihr aufmerksam mitgelesen habt, könnt ihr feststellen, dass ihr in jede eurer Scripte eine Funktion einbauen könnt, die aufgerufen wird, wenn eine OscMessage ankommt. Ihr müsst in eurem Script dafür dann folgendes tun:&lt;br /&gt;
* eine Verbindung zum OSC Script über eine public OSC ''myOSC'' Variable anlegen (wobei ihr myOSC auch anders nennen könnt).&lt;br /&gt;
* diese Verbindung im Editor verknüpfen, indem ihr das GameObject, auf dem das OSC Script liegt in diese Variable auf eurem Script zieht&lt;br /&gt;
* in eurer Start() Funktion die Funktion '''myOSC.SetAllMessageHandler(OscEvent);''' aufrufen (wobei eure Funktion auch anders heissen darf&lt;br /&gt;
* in eurem Script die Funktion ''void OscEvent(OscMessage myMessage){}'' schreiben. (wenn ihr eure Funktion anders genannt habt, dann hier den anderen Namen nutzen.)&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel eines Scripts, das jedes mal kleine Würfel aus einem Prefab generiert, wenn eine OscMessage ankommt:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[InstantiatePrefabOnOscMessage]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ihr könnt euch auch den Beispielcode anschauen, der bei der OSC-Implementierung dabei ist, [http://thomasfredericks.github.io/UnityOSC/| oder die Erklärungen auf der Webseite lesen]. Vielleicht entdeckt ihr ja noch ein paar weitere Funktionen, die man im OSC-Script nutzen kann.&lt;br /&gt;
&lt;br /&gt;
== OSC Nachrichten verschicken ==&lt;br /&gt;
tbd.&lt;br /&gt;
&lt;br /&gt;
== Beispielprojekte ==&lt;br /&gt;
Ein Projekt des ersten Jahrgangs Spiel und Objekt, das sehr viel OSC in Processing und Unity implementiert hat, ist [[Be Bernd]].&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=Saving_in_Unity&amp;diff=2658</id>
		<title>Saving in Unity</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=Saving_in_Unity&amp;diff=2658"/>
		<updated>2021-11-16T11:59:25Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* Daten als JSON speichern und lesen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Allgemeines zum Speichern=&lt;br /&gt;
Um Daten in Unity speichern und wieder laden zu können, schreiben wir für gewöhnlich eben diese Daten auf das Speichermedium unseres Devices (meistens eine Festplatte oder equivalent). Die Art und Weise, wie wir diese Daten ablegen ist dabe uns selbst überlassen. &amp;lt;br&amp;gt;&lt;br /&gt;
Tatsächlich gibt es mehrere standardisierte Verfahren,die dafür sorgen, dass sich Daten, die wir auf eine Festplatte geschrieben haben, wieder so lesen lassen, dass wir verstehen was gemeint war. Schlussendlich sind sämtliche Daten auf einer Festplatte als Bytes gespeichert, die durch von uns angesetzte Interpretation dann als Text, Zahl, Bild oder Ton wieder gelesen werden können.&lt;br /&gt;
&lt;br /&gt;
=Wohin speichert Unity?=&lt;br /&gt;
=Daten als ASCII Text speichern und lesen=&lt;br /&gt;
=Daten als JSON speichern und lesen=&lt;br /&gt;
Unity stellt Funktionen bereit, die alle Variablen eines von uns selbst definierten Objects in eine Textdatei ausgeben, und aus dieser auch wieder herauslesen kann. &lt;br /&gt;
Hierzu generieren wir eine neue Klasse, die nicht von Monobehaviour abgeleitet ist, ungefähr so:&lt;br /&gt;
&lt;br /&gt;
 public class SaveData&lt;br /&gt;
 {&lt;br /&gt;
   int eineAnzahl=0;&lt;br /&gt;
   string einText=&amp;quot;hallowelt&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=Daten als WaveForm speichern und lesen=&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=Saving_in_Unity&amp;diff=2657</id>
		<title>Saving in Unity</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=Saving_in_Unity&amp;diff=2657"/>
		<updated>2021-11-16T11:58:23Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: Die Seite wurde neu angelegt: „=Allgemeines zum Speichern= Um Daten in Unity speichern und wieder laden zu können, schreiben wir für gewöhnlich eben diese Daten auf das Speichermedium uns…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Allgemeines zum Speichern=&lt;br /&gt;
Um Daten in Unity speichern und wieder laden zu können, schreiben wir für gewöhnlich eben diese Daten auf das Speichermedium unseres Devices (meistens eine Festplatte oder equivalent). Die Art und Weise, wie wir diese Daten ablegen ist dabe uns selbst überlassen. &amp;lt;br&amp;gt;&lt;br /&gt;
Tatsächlich gibt es mehrere standardisierte Verfahren,die dafür sorgen, dass sich Daten, die wir auf eine Festplatte geschrieben haben, wieder so lesen lassen, dass wir verstehen was gemeint war. Schlussendlich sind sämtliche Daten auf einer Festplatte als Bytes gespeichert, die durch von uns angesetzte Interpretation dann als Text, Zahl, Bild oder Ton wieder gelesen werden können.&lt;br /&gt;
&lt;br /&gt;
=Wohin speichert Unity?=&lt;br /&gt;
=Daten als ASCII Text speichern und lesen=&lt;br /&gt;
=Daten als JSON speichern und lesen=&lt;br /&gt;
Unity stellt Funktionen bereit, die alle Variablen eines von uns selbst definierten Objects in eine Textdatei ausgeben, und aus dieser auch wieder herauslesen kann. &lt;br /&gt;
Hierzu generieren wir eine neue Klasse, die nicht von Monobehaviour abgeleitet ist, ungefähr so:&lt;br /&gt;
&lt;br /&gt;
 public class SaveData&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
   int eineAnzahl=0;&lt;br /&gt;
   string einText=&amp;quot;hallowelt&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=Daten als WaveForm speichern und lesen=&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=Unity&amp;diff=2656</id>
		<title>Unity</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=Unity&amp;diff=2656"/>
		<updated>2021-11-16T11:43:07Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* Konzepte und Tutorials */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Was ist Unity?==&lt;br /&gt;
Unity ist ein Programm, mit dessen Hilfe man eigene interaktive Applikationen und Visualisierungen herstellen kann. In Unity können wir eigene virtuelle Räume mit Hilfe des Unity Editors gestalten und mit eigenen Scripten, die in der Programmiersprache C# geschrieben werden, eigene Interaktionen in diesen Räumen festlegen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unity wird oft auch als Game-Engine beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Für welche Geräte kann ich Unity nutzen?==&lt;br /&gt;
Wir benutzen den Unity Editor unter Windows 10, er läuft aber auch unter Mac OS.&amp;lt;br&amp;gt;&lt;br /&gt;
Im Unterricht nutzen wir den Unity Editor um Programme zu gestalten, die auf Windows, Mac OS, Android und WebGL laufen können. Man kann Unity zwar dafür verwenden, Programme für iOS zu gestalten, unser Studiengang deckt diese prozesse allerdings nicht ab.&lt;br /&gt;
&lt;br /&gt;
==Welche Version von Unity nutzen wir?==&lt;br /&gt;
Wir verwenden für die Verwaltung unserer Projekte und Unity Versionen das programm '''Unity Hub'''. Damit ist es möglich, mehrere Versionen von Unity gleichzeitig installiert zu haben und jedes Projekt mit unterschiedlichen Versionen des Unity Editors zu bearbeiten.&lt;br /&gt;
Die momentan im Unterricht genutzten Versionen von Unity sind '''2020.3.x''' und '''2019.4.x'''. &lt;br /&gt;
Innerhalb der Stelle hinter dem zweiten Punkt in der Versionsnummer von Unity sollten Updates des Unity Editors für gewöhnlich kein Problem sein. Projekte die in 2019.4.12 angefangen wurden sollten problemlos unter 2019.4.18 laufen. Es empfiehlt sich nicht, alte Projekte mit grösseren Versionsunterschieden in neueren Versionen von Unity zu öffnen.&lt;br /&gt;
&lt;br /&gt;
==Terminologie im Unity Editor==&lt;br /&gt;
[[Datei:Unity_Interface.jpg|1024px]]&lt;br /&gt;
&lt;br /&gt;
==Begriffe==&lt;br /&gt;
* '''Projekt''' - ein Ordner auf dem Computer in dem sich eine ganze Reihe weiterer Ordner befinden. Es gibt nicht eine einzelne Projektdatei, sondern eine ganze Struktur an Dateien und Ordnern aus denen der Unity Editor das Projekt erstellt und manipulierbar macht. Deswegen lohnt es sich, Unity Projekte über den Unity Hub zu verwalten. Der Ablageort eines Projektes auf der Festplatte kann sich verschieben, solange die in ihm enthaltene Verzeichnisstruktur gewahrt bleibt.&lt;br /&gt;
* '''Szene''' - eine Datei im Asset Folder von Unity, in der eine bestimmte Konfiguration von GameObjects und Verknüpfungen zwischen ihnen gespeichert ist.&lt;br /&gt;
* '''GameObject''' - ein GameObject ist eine Datenstruktur innerhalb einer Szene in Unity. Alle GameObjects, unabhängig davon ob sie eine visuelle Repräsentation haben, sind in der Hierarchy ausgeführt. Scripte können für gewöhnlich nur ausgeführt werden, wenn sie als Component eines gameObjects in der Szene vorhanden sind.&lt;br /&gt;
* '''Script''' - unter einem Script verstehen wir eine mit Visual Studio in C# geschriebene Datei, die wir im Editor als Component auf GameObjects legen können, damit das Script ausgeführt wird. Scripts können auf mehrere GameObjects gleichzeitig gelegt werden, oder auch mehrmals auf dasselbe GameObject und laufen als eigenständige Instanzen jeweils so oft, wie sie in der Szene vorkommen.&lt;br /&gt;
* '''Component''' - ein Script als Teil eines GameObjects, dessen Variablen ich sowohl über den Inspector im Unity Editor, als auch über ein eigenes Script verändern kann.&lt;br /&gt;
* '''Asset Folder''' - ein Ordner in der Unity Projektstruktur, in dem alle für das Projekt benötigten Scripte, Audio-, Bild-, Video-, 3D und Textdateien abgelegt werden. Diese Dateien werden oft auch Assets genannt. Unity scannt diesen Ordner jedesmal, wenn der Unity-Editor in Windows in den Focus tritt und importiert sämtliche im Ordner befindlichen Dateien automatisch in das Projekt.&lt;br /&gt;
* '''Build''' - ein unabhängig vom Editor ausführbares programm erstellen nennt man auch einen Build machen. Da Unity sämtliche Dateien im Asset-Folder direkt ins Projekt importieren möchte, empfiehlt es sich, diese von Unity erstellten Dateien in einem eigenen Ordner ausserhalb des Asset-Folders aber innerhalb des Projektordners zu speichern.&lt;br /&gt;
&lt;br /&gt;
==Eingabe und Ausgabe in Unity==&lt;br /&gt;
Interaktion in Unity Projekten entsteht erst, wenn die Eingabe von Nutzer*innen mit Veränderungen in der Gestaltung der Unity Szene verknüpft wird.&lt;br /&gt;
*[[Input in Unity]]&lt;br /&gt;
* [[Output in Unity]]&lt;br /&gt;
&lt;br /&gt;
==Mein Build funktioniert nicht!==&lt;br /&gt;
&lt;br /&gt;
* Android builds auf externen Festplatten gehen oft nicht. In dem Fall das Projekt auf die Festplatte des Computers kopieren, auf dem der build ist&lt;br /&gt;
* keine umlaute und leerzeichen in dateinamen und ordnern verwenden&lt;br /&gt;
* Zu lange Ordnerstrukturen vermeiden (z.B. C:\Users\Ein Name mit Zuname\Dokumente\Unity Test\2021\Oktober\Nur rumprobieren\MeinProjekt Version 12)&lt;br /&gt;
* Manche Plugins und Add-ons sind Hardwarespezifisch (z.B. Kinect Addon und NVidia Grafikkarten)&lt;br /&gt;
&lt;br /&gt;
== Konzepte und Tutorials ==&lt;br /&gt;
* [[Algorithms#Unity|Basic Algorithms]]&lt;br /&gt;
* [[Moving_Objects_in_Unity|Moving Objects in Unity]]&lt;br /&gt;
* [[UI in Unity]]&lt;br /&gt;
* [[OSC_in_Unity| OSC in Unity]]&lt;br /&gt;
* [[Raycasts]] in Unity&lt;br /&gt;
* [[Saving_in_Unity | Speichern in Unity]]&lt;br /&gt;
&lt;br /&gt;
== Pages related to Unity that need Context and/or Love ==&lt;br /&gt;
* [[Mqtt_to_Unity_via_shiftr.io| MQTT, Unity and shiftr.io]]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=Hauptseite&amp;diff=2655</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=Hauptseite&amp;diff=2655"/>
		<updated>2021-11-16T11:28:03Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* Programming */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
Willkommen auf dem Spiel und Objekt Wiki!&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf diesen Seiten legen wir Referenzen, Projektdokumentationen, Literaturhinweise, Kursmitschriften und Best Practices ab.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=P R A X I S=&lt;br /&gt;
&lt;br /&gt;
== Kurse ==&lt;br /&gt;
&lt;br /&gt;
=== Spiel &amp;amp;&amp;amp; Objekt ===&lt;br /&gt;
&lt;br /&gt;
====WS2018/19====&lt;br /&gt;
*[[SpieleDesign|Spiel und Theater]] &lt;br /&gt;
*[[PartizipationÜbungen|Übungen Partizipation]]&lt;br /&gt;
*[[NeueMedienGesellschaft|Neue Medien und Gesellschaft]] &lt;br /&gt;
&lt;br /&gt;
====SS2020====&lt;br /&gt;
*[[Vernetzte Räume]]&lt;br /&gt;
*[[From Space to Space]]&lt;br /&gt;
&lt;br /&gt;
====WS2020/21====&lt;br /&gt;
*[[Least Likely]]&lt;br /&gt;
*[[Soft Soft]]&lt;br /&gt;
*[[Cyber+Technofeminism]]&lt;br /&gt;
&lt;br /&gt;
====SS2021====&lt;br /&gt;
*[[Everything is Talkative]]&lt;br /&gt;
&lt;br /&gt;
====WS2021/22====&lt;br /&gt;
*[[Communicating Bodies]]&lt;br /&gt;
*[[Soziale Architektur 2]]&lt;br /&gt;
&lt;br /&gt;
=== Zeitgenössische Puppenspielkunst HfS ===&lt;br /&gt;
*[[Material Adventures]] (SS2020)&lt;br /&gt;
*[[Paper Adventures]] (SS2021)&lt;br /&gt;
&lt;br /&gt;
=== Kooperation Uni Bremen ===&lt;br /&gt;
*[[OeffentlichkeitTheorie| Öffentlichkeit bei Habermas und Luhmann]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Projekte==&lt;br /&gt;
&lt;br /&gt;
===1. Jahrgang (2018-2020)===&lt;br /&gt;
*[[Be Bernd]]&lt;br /&gt;
*[[Wir Alle Spielen Theater]]&lt;br /&gt;
*[[Altruistic Modification]]&lt;br /&gt;
*[[Archäologischer Park- Die Villa]]&lt;br /&gt;
*[[Futopolis]]&lt;br /&gt;
*[[Kalte Ecken im Koffer]]&lt;br /&gt;
&lt;br /&gt;
===2. Jahrgang (2020-2022)===&lt;br /&gt;
*[[Random Acts of Vulnerability]]&lt;br /&gt;
*[[Wir Haben Fragen]]&lt;br /&gt;
&lt;br /&gt;
== Recherchen ==&lt;br /&gt;
*[[BioArt]]&lt;br /&gt;
*[[Feminismus]]&lt;br /&gt;
*[[VideoAsSculpture]]&lt;br /&gt;
*[[SpieleDesign]]&lt;br /&gt;
*[[NoScreens]]&lt;br /&gt;
*[[DesignFiction]]&lt;br /&gt;
*[[NetworkedArt|Networked Theatre, Performance, Art, Culture...]]&lt;br /&gt;
*[[Donna Haraway]]&lt;br /&gt;
*[[Schreiben]]&lt;br /&gt;
*[[Capturing Process]]&lt;br /&gt;
*[[Websites]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= T E C H N I K =&lt;br /&gt;
== Inventar ==&lt;br /&gt;
*[[Spiel&amp;amp;&amp;amp;Objekt Gadgets]]&lt;br /&gt;
&lt;br /&gt;
=== KITS ===&lt;br /&gt;
*[[S&amp;amp;&amp;amp;O KIT]] (brought to you by the [[Labor für Digitalität]])&lt;br /&gt;
*[[world meets computer KIT]] (from the course [[Least Likely]] Scenario)&lt;br /&gt;
*[[softsoft KIT]] (from the course [[Soft Soft]])&lt;br /&gt;
*[[spaghetti monster KIT]] (from the course [[Communicating Bodies]])&lt;br /&gt;
*[[Dome Pod KIT]]s&lt;br /&gt;
&lt;br /&gt;
== Fabrication ==&lt;br /&gt;
*[[How to: 3D Drucken]]&lt;br /&gt;
*[[How to: build geodesic domes]] (coming soon...)&lt;br /&gt;
*[[How to: make PCBs]] (coming soon...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Physical Computing ==&lt;br /&gt;
&lt;br /&gt;
*[[Arduino| Arduino Übersicht]]&lt;br /&gt;
&lt;br /&gt;
*[[Sensors]]&lt;br /&gt;
*[[Actuators]]&lt;br /&gt;
*[[Widerstände]]&lt;br /&gt;
*[[Voltage Divider]]&lt;br /&gt;
&lt;br /&gt;
=== Physical Computing Examples ===&lt;br /&gt;
*[[Making Sound with Sensors]]&lt;br /&gt;
*[[Bewässerungsanlage mit Arduino Uno und DIY-Feuchtigkeitssensor]]&lt;br /&gt;
&lt;br /&gt;
== Programming ==&lt;br /&gt;
&lt;br /&gt;
=== Unity ===&lt;br /&gt;
*[[Unity]]&lt;br /&gt;
*[[Online_Multiplayer]]&lt;br /&gt;
*[[BasicMultiplayerFramework|Virtuelle Multiuser Räume]]&lt;br /&gt;
&lt;br /&gt;
=== p5.js (Javascript) ===&lt;br /&gt;
*[[p5 Overview]]&lt;br /&gt;
&lt;br /&gt;
===ESP32 mit Arduino===&lt;br /&gt;
*[[ESP32 mit Arduino]] programmieren&lt;br /&gt;
&lt;br /&gt;
===ESP32,ESP8266 mit micropython===&lt;br /&gt;
*[[arduino vs. micropython]]&lt;br /&gt;
*[[micropython install]]&lt;br /&gt;
*[[Empfehlungen micropython]]&lt;br /&gt;
*[[uPyCraft]]&lt;br /&gt;
*[[DMX_MQTT_CONTROLLER]]&lt;br /&gt;
&lt;br /&gt;
===Miscellaneous===&lt;br /&gt;
*[[Multiple_Keyboards_with_RaspberryPi_and_OSC|Mehrere Keyboards/RFID Reader an ein RaspberryPi, mit OSC ins Netzwerk]]&lt;br /&gt;
*[[Raspberry Pi - Helfende Befehle]]&lt;br /&gt;
&lt;br /&gt;
== Netzwerkommunikation ==&lt;br /&gt;
&lt;br /&gt;
=== WIFI ===&lt;br /&gt;
*[[Ubiquiti WiFi|Stabiles WiFi auf der Bühne]]&lt;br /&gt;
*[[AsusRP-N53|Access Point mit dem Asus RP-N53]]&lt;br /&gt;
*[[Asus RT-AC68U|WLan mit dem Asus RT-AC68U]]&lt;br /&gt;
*[[Mqtt to Unity via shiftr.io | How to send Data from ESP to Unity with Mqtt protocol]]&lt;br /&gt;
*[[MQTT implementation in Basic Multiplayer via webGL Client | Shiftr.io/MQTT implementation in Basic Multiplayer via webGL Client]]&lt;br /&gt;
&lt;br /&gt;
==== MQTT ====&lt;br /&gt;
*[[What is MQTT?]]&lt;br /&gt;
*[[MQTT Brokers]] (online server, localhost)&lt;br /&gt;
*[[MQTT Clients]] (Arduino, Processing)&lt;br /&gt;
&lt;br /&gt;
===== MQTT Examples =====&lt;br /&gt;
*[[PubSub_3sensors_onChange_asSeperateTopics]] (ESP &amp;amp; Arduino)&lt;br /&gt;
*[[PubSub_3sensors_continuous_asStringList]] (ESP &amp;amp; Arduino)&lt;br /&gt;
&lt;br /&gt;
=== RFID ===&lt;br /&gt;
*[[User Login|Einloggen an einer Station mit einem Avatar]]&lt;br /&gt;
&lt;br /&gt;
=== XY Plotter ===&lt;br /&gt;
The following code connects a xy-plotter to unity and also simulates the movement of the plotter in the game view. A simple white plane represents the scale of the plotter and a white cube its movement.&lt;br /&gt;
The movement is controlled by the arrow keys.&lt;br /&gt;
&lt;br /&gt;
GitHub [https://github.com/HfSDigital/XY-Plotter-Unity]&lt;br /&gt;
&lt;br /&gt;
== Kommunikation ==&lt;br /&gt;
&lt;br /&gt;
===OSC===&lt;br /&gt;
*[[OSC what?]]&lt;br /&gt;
*[[OSC in Unity]]&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
*[[MQTT what?]]&lt;br /&gt;
*[[MQTT in Unity]]&lt;br /&gt;
*[[Build your own MQTT Broker]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Video Technik ==&lt;br /&gt;
''Alles, was dir deine Eltern nicht zum Thema '''Videoübertragung''' erzählt haben.'' &lt;br /&gt;
Oft ist ein PC als Schnittstelle zwischer Kamera und Bildschirm/Projektor sinnvoll oder nötig. Doch es gibt auch Fälle, in denen eine unkomplizierte, direkte Verbindung einfacher und besser ist.&lt;br /&gt;
&lt;br /&gt;
=== Verbindung Kamera&amp;lt;-&amp;gt;Ausgabegerät ===&lt;br /&gt;
*[[NX500|NX500 &amp;amp;rArr; Bildschirm oder Projektor]]&lt;br /&gt;
&lt;br /&gt;
=== PC als Schnittstelle ===&lt;br /&gt;
*[[Der Videomischer]]&lt;br /&gt;
*[[Blackmagic Intensity|Blackmagic Intensity &amp;amp;rArr; PC]]&lt;br /&gt;
&lt;br /&gt;
= T H E O R I E =&lt;br /&gt;
&lt;br /&gt;
== Glossare, Begriffe und Konzepte ==&lt;br /&gt;
* [[GlossarCG|Begriffe der Computergrafik]]&lt;br /&gt;
* [[GlossarSensorActuator|Sensoren und Aktuatoren]]&lt;br /&gt;
* [[Algorithms|Common Algorithms]]&lt;br /&gt;
* [[Glossar Code|Code Glossar]]&lt;br /&gt;
* [[Glossar Elektronik|Elektronik Glossar]]&lt;br /&gt;
* [[Netzwerk]]&lt;br /&gt;
* [[Interaktionstaxonomie AR]]&lt;br /&gt;
* [[Bibliothek|Literatur Bibliothek]]&lt;br /&gt;
&lt;br /&gt;
=P R A K T I S C H E S=&lt;br /&gt;
&lt;br /&gt;
** [[Shopping]]&lt;br /&gt;
** [[Events]]&lt;br /&gt;
&lt;br /&gt;
==Hack your &amp;quot;Theater&amp;quot; - How To==&lt;br /&gt;
*[[for Theaterleitung]]&lt;br /&gt;
*[[for Künstler*innen]]&lt;br /&gt;
&lt;br /&gt;
= Wiki Help =&lt;br /&gt;
*[[how to structure documentation well]]&lt;br /&gt;
*[[cheatsheet]]&lt;br /&gt;
*[https://www.mediawiki.org/wiki/Help:Formatting Hilfe: Formatierung]&lt;br /&gt;
*[https://www.mediawiki.org/wiki/Help:Links Hilfe: Links]&lt;br /&gt;
*[[ignore wiki syntax]]&lt;br /&gt;
*[[code syntax highlighting]]&lt;br /&gt;
*[[text scroll box]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=In Arbeit=&lt;br /&gt;
*[[OSC Kommunikation in Processing]]&lt;br /&gt;
*[[software architecture in theatre]]&lt;br /&gt;
*[[Verbindung Arduino / Unity - Research Diary]]&lt;br /&gt;
*[[TFT LCD Shield|2.6&amp;quot;/2.8&amp;quot; TFT LCD Shield mit Touch]]&lt;br /&gt;
*[[Trying out Wikistuff]]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=NeueMedienGesellschaft&amp;diff=2322</id>
		<title>NeueMedienGesellschaft</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=NeueMedienGesellschaft&amp;diff=2322"/>
		<updated>2021-07-20T10:23:53Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* Leseliste */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Leseliste ==&lt;br /&gt;
&lt;br /&gt;
* Erving Goffmann: Behaviour in Public Places&lt;br /&gt;
* John Stuart Hall: Cultural Studies&lt;br /&gt;
* Karin Knorr-Cetina: Postsozialität&lt;br /&gt;
* Anne Hohner und Ronald Hitzler: Technik und Vergemeinschaftung&lt;br /&gt;
* Hans georg Soeffner: Vergesst eure Leitkultur [https://www.faz.net/aktuell/feuilleton/debatten/hans-georg-soeffner-vergesst-eure-leitkultur-14007001.html]&lt;br /&gt;
* Jay Bolter, David Grusin: Remediation&lt;br /&gt;
* Paolo Freire: Pedagogy of the Oppressed&lt;br /&gt;
* Franz Fanon: Black Skin, White Mask&lt;br /&gt;
&lt;br /&gt;
=== weiterführende Literatur ===&lt;br /&gt;
* Marshal McLuhan: Understanding Media&lt;br /&gt;
* Michel DeCerteau: The Practice of Everyday Life&lt;br /&gt;
* Friedrich Kittler: Aufschreibesysteme&lt;br /&gt;
* Bruno Latour: Pandora's Hope&lt;br /&gt;
* Ronald Hitzler: Bastelexistenz&lt;br /&gt;
* Janet Murray: Hamlet on the Holodeck&lt;br /&gt;
* Karin Knorr-Cetina: Sozialität mit Objekten&lt;br /&gt;
* Max Weber: Die protestanthische Ethik und der Geist des Kapitalismus&lt;br /&gt;
* Elisabeth Beck-Gernsheim, Ulrich Beck: Riskante Freiheiten&lt;br /&gt;
* Schütz: Der sinnhafte Aufbau der sozialen Welt&lt;br /&gt;
* Huizinga: Homo Ludens&lt;br /&gt;
&lt;br /&gt;
== Schaubilder und Aufschriebe ==&lt;br /&gt;
&lt;br /&gt;
=== Sinnhafter Aufbau einer spielerischen/theatralen Situation: ===&lt;br /&gt;
[[Datei:Situation.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
=== Wirkung und Gestaltung bei partizipativen Anlagen: ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:UrsacheWirkung.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
== Aufgaben ==&lt;br /&gt;
Im WiSe 2018/19 fand das Seminar &amp;quot;Neue Medien und Gesellschaft&amp;quot; statt. Im Zuge dieses Seminars entstanden die folgenden Texte in Auseinandersetzung mit dem Spiel Stories untold und dem Text &amp;quot;Remediation. Understanding New Media.&amp;quot; von J.D. Bolter und R. Grusin statt.&lt;br /&gt;
&lt;br /&gt;
*[[Eine Beschäftigung mit dem Text &amp;quot;Remediation. Understanding New Media.&amp;quot; von Jay David Bolter und Richard Grusin, MIT 1999.]]&lt;br /&gt;
*[[Knowledge/Wissen]]&lt;br /&gt;
*[[Hypermediaty in &amp;quot;Stories Untold&amp;quot;]]&lt;br /&gt;
*[[Immediacy durch Hypermediacy und Remediation in &amp;quot;Stories Untold&amp;quot;?]]&lt;br /&gt;
*[[Textadventure &amp;quot;Stories Untold&amp;quot; - Woher kommt die reale Spannung im virtuellen Spiel?]]&lt;br /&gt;
*[[Stories Untold: Ich zocke also bin ich?]]&lt;br /&gt;
*[[The House Unbanded- eine Spielerfahrung untersucht an den Thesen von Jay David Bolter and Richard Grusin‘s: Remediation Von Leonie Adam]]&lt;br /&gt;
*[[HyperBewildered]]&lt;br /&gt;
*[[Mise en abandon]]&lt;br /&gt;
*[[Warum heißt unser Betriebssystem eigentlich Windows? How to become a penguin.]]&lt;br /&gt;
*[[Strg + Klicken Sie auf einen Hyperlink, um ihn zu öffnen]]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=Input_in_Unity&amp;diff=2034</id>
		<title>Input in Unity</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=Input_in_Unity&amp;diff=2034"/>
		<updated>2021-05-05T11:37:51Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* Abfrage der Mausezeigerposition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Interagieren in Unity =&lt;br /&gt;
Um den Nutzer*innen in den von uns gestalteten Unity Programmen die Möglichkeit zu geben zu interagieren, sollen hier einige generelle Interaktionsmodi aufgelistet und erklärt werden.&lt;br /&gt;
&lt;br /&gt;
== Keyboard Input ==&lt;br /&gt;
Um in einem Unity Script abzufragen, ob eine bestimmte Taste auf dem Keyboard gedrückt wurde, nutzen wir die Input Klasse. Unity Dokumentation [https://docs.unity3d.com/ScriptReference/Input.html| hier].&lt;br /&gt;
In Code verwenden wir folgende Abfrage meist in unserer Update() Funktion, da diese Funktion in jedem Frame aufgerufen wird, und wir den Zustand des Keyboards nicht versehentlich verpassen wollen:&lt;br /&gt;
&lt;br /&gt;
 if (Input.GetKeyUp(KeyCode.Y)){&lt;br /&gt;
 &lt;br /&gt;
    //do something when the key y has been released&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Mouse Input ==&lt;br /&gt;
=== Abfrage der Mausezeigerposition ===&lt;br /&gt;
Unity gibt uns mehrere Möglichkeiten, die Position des Mauszeigers sowie seine relative Veränderung abzufragen. &amp;lt;br&amp;gt;&lt;br /&gt;
Einerseits kann direkt die Position des Mauszeigers als Bildschirmkoordinaten durch abgefragt werden (ähnlich mouseX und mouseY in Processing):&lt;br /&gt;
&lt;br /&gt;
 Input.mouseposition&lt;br /&gt;
&lt;br /&gt;
Mehr Infos dazu in der Dokumentation zu [https://docs.unity3d.com/ScriptReference/Input.html| Input in Unity].&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andererseits können wir auch auf die Veränderung der Mausposition über Zeit zugreifen:&lt;br /&gt;
&lt;br /&gt;
 Input.GetAxis(&amp;quot;Mouse X&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Mehr Infos und Beispielcode dazu in der Dokumentation von [https://docs.unity3d.com/ScriptReference/Input.GetAxis.html| Input.GetAxis()].&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Letzteres können wir nutzen, um die Rotation der Kamera per Mausbewegung zu steuern, ähnlich wie wir es aus Videospielen kennen:&lt;br /&gt;
&lt;br /&gt;
* dazu müssen wir ein Script schreiben, das auf dem GameObject mit Camera-Component liegt (oder auf das GameObject mit Camera Component zugreift)&lt;br /&gt;
* in diesem GameObject müssen wir den Transform Component so verändern, dass er anhand der Mausbewegung seine Rotation ändert.&lt;br /&gt;
* das müssen wir in jedem Frame machen (also in der Update Funktion)&lt;br /&gt;
&lt;br /&gt;
Der Code dazu könnte in etwa wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
 void&lt;br /&gt;
&lt;br /&gt;
=== Klicken auf ein Objekt ===&lt;br /&gt;
&lt;br /&gt;
== Touch Input ==&lt;br /&gt;
&lt;br /&gt;
== Netzwerk Input ==&lt;br /&gt;
Auch durch Interaktionen von anderen Computern aus können in einem Unity Programm Dinge passieren. Eine genauere Beschreibung möglicher Netzwerkinteraktion steht auf der [[OSC in Unity]] Seite.&lt;br /&gt;
&lt;br /&gt;
== Position und Rotation des Devices ==&lt;br /&gt;
=== Position via GPS ===&lt;br /&gt;
=== Rotation via Gyroskop ===&lt;br /&gt;
=== Position und Rotation via ARCore ===&lt;br /&gt;
&lt;br /&gt;
== UI Interaktion ==&lt;br /&gt;
Die Interaktion durch sogenannte UI Elemente in Unity ist stärker strukturiert als die oben angegebenen Beispiele und bedarf einer längeren Kontextualisierung. Mehr Informationen zu UI Elementen gibt es auf der [[UI in Unity]] Seite.&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=Input_in_Unity&amp;diff=2033</id>
		<title>Input in Unity</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=Input_in_Unity&amp;diff=2033"/>
		<updated>2021-05-05T11:10:12Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* Abfrage der Mausezeigerposition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Interagieren in Unity =&lt;br /&gt;
Um den Nutzer*innen in den von uns gestalteten Unity Programmen die Möglichkeit zu geben zu interagieren, sollen hier einige generelle Interaktionsmodi aufgelistet und erklärt werden.&lt;br /&gt;
&lt;br /&gt;
== Keyboard Input ==&lt;br /&gt;
Um in einem Unity Script abzufragen, ob eine bestimmte Taste auf dem Keyboard gedrückt wurde, nutzen wir die Input Klasse. Unity Dokumentation [https://docs.unity3d.com/ScriptReference/Input.html| hier].&lt;br /&gt;
In Code verwenden wir folgende Abfrage meist in unserer Update() Funktion, da diese Funktion in jedem Frame aufgerufen wird, und wir den Zustand des Keyboards nicht versehentlich verpassen wollen:&lt;br /&gt;
&lt;br /&gt;
 if (Input.GetKeyUp(KeyCode.Y)){&lt;br /&gt;
 &lt;br /&gt;
    //do something when the key y has been released&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Mouse Input ==&lt;br /&gt;
=== Abfrage der Mausezeigerposition ===&lt;br /&gt;
Unity gibt uns mehrere Möglichkeiten, die Position des Mauszeigers sowie seine relative Veränderung abzufragen. &amp;lt;br&amp;gt;&lt;br /&gt;
Einerseits kann direkt die Position des Mauszeigers als Bildschirmkoordinaten durch abgefragt werden (ähnlich mouseX und mouseY in Processing):&lt;br /&gt;
&lt;br /&gt;
 Input.mouseposition&lt;br /&gt;
&lt;br /&gt;
Mehr Infos dazu in der Dokumentation zu [https://docs.unity3d.com/ScriptReference/Input.html| Input in Unity].&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andererseits können wir auch auf die Veränderung der Mausposition über Zeit zugreifen:&lt;br /&gt;
&lt;br /&gt;
 Input.GetAxis(&amp;quot;Mouse X&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Mehr Infos und Beispielcode dazu in der Dokumentation von [https://docs.unity3d.com/ScriptReference/Input.GetAxis.html| Input.GetAxis()].&lt;br /&gt;
&lt;br /&gt;
=== Klicken auf ein Objekt ===&lt;br /&gt;
&lt;br /&gt;
== Touch Input ==&lt;br /&gt;
&lt;br /&gt;
== Netzwerk Input ==&lt;br /&gt;
Auch durch Interaktionen von anderen Computern aus können in einem Unity Programm Dinge passieren. Eine genauere Beschreibung möglicher Netzwerkinteraktion steht auf der [[OSC in Unity]] Seite.&lt;br /&gt;
&lt;br /&gt;
== Position und Rotation des Devices ==&lt;br /&gt;
=== Position via GPS ===&lt;br /&gt;
=== Rotation via Gyroskop ===&lt;br /&gt;
=== Position und Rotation via ARCore ===&lt;br /&gt;
&lt;br /&gt;
== UI Interaktion ==&lt;br /&gt;
Die Interaktion durch sogenannte UI Elemente in Unity ist stärker strukturiert als die oben angegebenen Beispiele und bedarf einer längeren Kontextualisierung. Mehr Informationen zu UI Elementen gibt es auf der [[UI in Unity]] Seite.&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=Unity&amp;diff=2032</id>
		<title>Unity</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=Unity&amp;diff=2032"/>
		<updated>2021-05-05T10:51:46Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* Eingabe und Ausgabe in Unity */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Was ist Unity?==&lt;br /&gt;
Unity ist ein Programm, mit dessen Hilfe man eigene interaktive Applikationen und Visualisierungen herstellen kann. In Unity können wir eigene virtuelle Räume mit Hilfe des Unity Editors gestalten und mit eigenen Scripten, die in der Programmiersprache C# geschrieben werden, eigene Interaktionen in diesen Räumen festlegen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unity wird oft auch als Game-Engine beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Für welche Geräte kann ich Unity nutzen?==&lt;br /&gt;
Wir benutzen den Unity Editor unter Windows 10, er läuft aber auch unter Mac OS.&amp;lt;br&amp;gt;&lt;br /&gt;
Im Unterricht nutzen wir den Unity Editor um Programme zu gestalten, die auf Windows, Mac OS, Android und WebGL laufen können. Man kann Unity zwar dafür verwenden, Programme für iOS zu gestalten, unser Studiengang deckt diese prozesse allerdings nicht ab.&lt;br /&gt;
&lt;br /&gt;
==Welche Version von Unity nutzen wir?==&lt;br /&gt;
Wir verwenden für die Verwaltung unserer Projekte und Unity Versionen das programm '''Unity Hub'''. Damit ist es möglich, mehrere Versionen von Unity gleichzeitig installiert zu haben und jedes Projekt mit unterschiedlichen Versionen des Unity Editors zu bearbeiten.&lt;br /&gt;
Die momentan im Unterricht genutzten Versionen von Unity sind '''2020.3.x''' und '''2019.4.x'''. &lt;br /&gt;
Innerhalb der Stelle hinter dem zweiten Punkt in der Versionsnummer von Unity sollten Updates des Unity Editors für gewöhnlich kein Problem sein. Projekte die in 2019.4.12 angefangen wurden sollten problemlos unter 2019.4.18 laufen. Es empfiehlt sich nicht, alte Projekte mit grösseren Versionsunterschieden in neueren Versionen von Unity zu öffnen.&lt;br /&gt;
&lt;br /&gt;
==Terminologie im Unity Editor==&lt;br /&gt;
[[Datei:Unity_Interface.jpg|1024px]]&lt;br /&gt;
&lt;br /&gt;
==Begriffe==&lt;br /&gt;
* '''Projekt''' - ein Ordner auf dem Computer in dem sich eine ganze Reihe weiterer Ordner befinden. Es gibt nicht eine einzelne Projektdatei, sondern eine ganze Struktur an Dateien und Ordnern aus denen der Unity Editor das Projekt erstellt und manipulierbar macht. Deswegen lohnt es sich, Unity Projekte über den Unity Hub zu verwalten. Der Ablageort eines Projektes auf der Festplatte kann sich verschieben, solange die in ihm enthaltene Verzeichnisstruktur gewahrt bleibt.&lt;br /&gt;
* '''Szene''' - eine Datei im Asset Folder von Unity, in der eine bestimmte Konfiguration von GameObjects und Verknüpfungen zwischen ihnen gespeichert ist.&lt;br /&gt;
* '''GameObject''' - ein GameObject ist eine Datenstruktur innerhalb einer Szene in Unity. Alle GameObjects, unabhängig davon ob sie eine visuelle Repräsentation haben, sind in der Hierarchy ausgeführt. Scripte können für gewöhnlich nur ausgeführt werden, wenn sie als Component eines gameObjects in der Szene vorhanden sind.&lt;br /&gt;
* '''Script''' - unter einem Script verstehen wir eine mit Visual Studio in C# geschriebene Datei, die wir im Editor als Component auf GameObjects legen können, damit das Script ausgeführt wird. Scripts können auf mehrere GameObjects gleichzeitig gelegt werden, oder auch mehrmals auf dasselbe GameObject und laufen als eigenständige Instanzen jeweils so oft, wie sie in der Szene vorkommen.&lt;br /&gt;
* '''Component''' - ein Script als Teil eines GameObjects, dessen Variablen ich sowohl über den Inspector im Unity Editor, als auch über ein eigenes Script verändern kann.&lt;br /&gt;
* '''Asset Folder''' - ein Ordner in der Unity Projektstruktur, in dem alle für das Projekt benötigten Scripte, Audio-, Bild-, Video-, 3D und Textdateien abgelegt werden. Diese Dateien werden oft auch Assets genannt. Unity scannt diesen Ordner jedesmal, wenn der Unity-Editor in Windows in den Focus tritt und importiert sämtliche im Ordner befindlichen Dateien automatisch in das Projekt.&lt;br /&gt;
* '''Build''' - ein unabhängig vom Editor ausführbares programm erstellen nennt man auch einen Build machen. Da Unity sämtliche Dateien im Asset-Folder direkt ins Projekt importieren möchte, empfiehlt es sich, diese von Unity erstellten Dateien in einem eigenen Ordner ausserhalb des Asset-Folders aber innerhalb des Projektordners zu speichern.&lt;br /&gt;
&lt;br /&gt;
==Eingabe und Ausgabe in Unity==&lt;br /&gt;
Interaktion in Unity Projekten entsteht erst, wenn die Eingabe von Nutzer*innen mit Veränderungen in der Gestaltung der Unity Szene verknüpft wird.&lt;br /&gt;
*[[Input in Unity]]&lt;br /&gt;
* [[Output in Unity]]&lt;br /&gt;
&lt;br /&gt;
==Mein Build funktioniert nicht!==&lt;br /&gt;
&lt;br /&gt;
* Android builds auf externen Festplatten gehen oft nicht. In dem Fall das Projekt auf die Festplatte des Computers kopieren, auf dem der build ist&lt;br /&gt;
* keine umlaute und leerzeichen in dateinamen und ordnern verwenden&lt;br /&gt;
* Zu lange Ordnerstrukturen vermeiden (z.B. C:\Users\Ein Name mit Zuname\Dokumente\Unity Test\2021\Oktober\Nur rumprobieren\MeinProjekt Version 12)&lt;br /&gt;
* Manche Plugins und Add-ons sind Hardwarespezifisch (z.B. Kinect Addon und NVidia Grafikkarten)&lt;br /&gt;
&lt;br /&gt;
== Konzepte und Tutorials ==&lt;br /&gt;
* [[Algorithms#Unity|Basic Algorithms]]&lt;br /&gt;
* [[Moving_Objects_in_Unity|Moving Objects in Unity]]&lt;br /&gt;
* [[UI in Unity]]&lt;br /&gt;
* [[OSC_in_Unity| OSC in Unity]]&lt;br /&gt;
* [[Raycasts]] in Unity&lt;br /&gt;
&lt;br /&gt;
== Pages related to Unity that need Context and/or Love ==&lt;br /&gt;
* [[Mqtt_to_Unity_via_shiftr.io| MQTT, Unity and shiftr.io]]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=Hauptseite&amp;diff=2028</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=Hauptseite&amp;diff=2028"/>
		<updated>2021-04-21T17:26:28Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
Willkommen auf dem Spiel und Objekt Wiki!&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf diesen Seiten legen wir Referenzen, Projektdokumentationen, Literaturhinweise, Kursmitschriften und Best Practices ab.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Theorie =&lt;br /&gt;
&lt;br /&gt;
== Glossare, Begriffe und Konzepte ==&lt;br /&gt;
* [[GlossarCG|Begriffe der Computergrafik]]&lt;br /&gt;
* [[GlossarSensorActuator|Sensoren und Aktuatoren]]&lt;br /&gt;
* [[Algorithms|Common Algorithms]]&lt;br /&gt;
* [[Glossar Code|Code Glossar]]&lt;br /&gt;
* [[Glossar Elektronik|Elektronik Glossar]]&lt;br /&gt;
* [[Netzwerk]]&lt;br /&gt;
* [[Interaktionstaxonomie AR]]&lt;br /&gt;
* [[Bibliothek|Literatur Bibliothek]]&lt;br /&gt;
** obiges sollte in die anderen Bereiche eingepflegt werden...&lt;br /&gt;
* [[Shopping]]&lt;br /&gt;
&lt;br /&gt;
== Recherchen ==&lt;br /&gt;
*[[BioArt]]&lt;br /&gt;
*[[Feminismus]]&lt;br /&gt;
*[[VideoAsSculpture]]&lt;br /&gt;
*[[SpieleDesign]]&lt;br /&gt;
*[[NoScreens]]&lt;br /&gt;
*[[DesignFiction]]&lt;br /&gt;
*[[NetworkedArt|Networked Theatre, Performance, Art, Culture...]]&lt;br /&gt;
*[[Donna Haraway]]&lt;br /&gt;
&lt;br /&gt;
== Kurse ==&lt;br /&gt;
&lt;br /&gt;
=== Spiel &amp;amp;&amp;amp; Objekt ===&lt;br /&gt;
*[[SpieleDesign|Spiel und Theater]] &lt;br /&gt;
*[[PartizipationÜbungen|Übungen Partizipation]]&lt;br /&gt;
*[[NeueMedienGesellschaft|Neue Medien und Gesellschaft]] &lt;br /&gt;
*[[Vernetzte Räume]] (SS2020)&lt;br /&gt;
*[[From Space to Space]] (SS2020)&lt;br /&gt;
*[[Least Likely]] (WS20/21)&lt;br /&gt;
*[[Soft Soft]] (WS20/21)&lt;br /&gt;
*[[Cyber+Technofeminism]] (WS20/21)&lt;br /&gt;
*[[Everything is Talkative]] (SS2021)&lt;br /&gt;
&lt;br /&gt;
=== Zeitgenössische Puppenspielkunst HfS ===&lt;br /&gt;
*[[Material Adventures]]&lt;br /&gt;
&lt;br /&gt;
=== Kooperation Uni Bremen ===&lt;br /&gt;
*[[OeffentlichkeitTheorie| Öffentlichkeit bei Habermas und Luhmann]]&lt;br /&gt;
&lt;br /&gt;
== Prozess und Dokumentation ==&lt;br /&gt;
*[[Schreiben]]&lt;br /&gt;
*[[Capturing Process]]&lt;br /&gt;
*[[Websites]]&lt;br /&gt;
&lt;br /&gt;
= Praxis =&lt;br /&gt;
&lt;br /&gt;
== Technik und Werkzeuge == &lt;br /&gt;
*[[Spiel&amp;amp;&amp;amp;Objekt Gadgets]]&lt;br /&gt;
&lt;br /&gt;
=== Arduino ===&lt;br /&gt;
*[[Arduino| Übersicht Arduino]] - diese Seite ist nur eine Kopie von Inhalten anderer Seiten, hauptsächlich [[Common Algorithms]]&lt;br /&gt;
*[[Bewässerungsanlage mit Arduino Uno und DIY-Feuchtigkeitssensor]]&lt;br /&gt;
*[[Sensors]]&lt;br /&gt;
*[[Actuators]]&lt;br /&gt;
*[[Voltage Divider]]&lt;br /&gt;
&lt;br /&gt;
=== p5.js (Javascript) ===&lt;br /&gt;
*[[p5 Overview]]&lt;br /&gt;
&lt;br /&gt;
=== Unity ===&lt;br /&gt;
*[[Unity]]&lt;br /&gt;
*[[Online_Multiplayer]]&lt;br /&gt;
*[[BasicMultiplayerFramework|Virtuelle Multiuser Räume]]&lt;br /&gt;
&lt;br /&gt;
=== KITS ===&lt;br /&gt;
*[[S&amp;amp;&amp;amp;O KIT]] (brought to you by the [[Labor für Digitalität]])&lt;br /&gt;
*[[world meets computer KIT]] (from the course [[Least Likely]] Scenario)&lt;br /&gt;
*[[softsoft KIT]] (from the course [[Soft Soft]])&lt;br /&gt;
&lt;br /&gt;
===ESP32,ESP8266 mit micropython===&lt;br /&gt;
*[[arduino vs. micropython]]&lt;br /&gt;
*[[micropython install]]&lt;br /&gt;
*[[Empfehlungen micropython]]&lt;br /&gt;
*[[uPyCraft]]&lt;br /&gt;
*[[DMX_MQTT_CONTROLLER]]&lt;br /&gt;
&lt;br /&gt;
===Miscellaneous===&lt;br /&gt;
*[[Multiple_Keyboards_with_RaspberryPi_and_OSC|Mehrere Keyboards/RFID Reader an ein RaspberryPi, mit OSC ins Netzwerk]]&lt;br /&gt;
*[[Raspberry Pi - Helfende Befehle]]&lt;br /&gt;
&lt;br /&gt;
== Video Technik ==&lt;br /&gt;
''Alles, was dir deine Eltern nicht zum Thema '''Videoübertragung''' erzählt haben.'' &lt;br /&gt;
Oft ist ein PC als Schnittstelle zwischer Kamera und Bildschirm/Projektor sinnvoll oder nötig. Doch es gibt auch Fälle, in denen eine unkomplizierte, direkte Verbindung einfacher und besser ist.&lt;br /&gt;
&lt;br /&gt;
=== Verbindung Kamera&amp;lt;-&amp;gt;Ausgabegerät ===&lt;br /&gt;
*[[NX500|NX500 &amp;amp;rArr; Bildschirm oder Projektor]]&lt;br /&gt;
&lt;br /&gt;
=== PC als Schnittstelle ===&lt;br /&gt;
*[[Der Videomischer]]&lt;br /&gt;
*[[Blackmagic Intensity|Blackmagic Intensity &amp;amp;rArr; PC]]&lt;br /&gt;
&lt;br /&gt;
== Netzwerkommunikation ==&lt;br /&gt;
*[[Ubiquiti WiFi|Stabiles WiFi auf der Bühne]]&lt;br /&gt;
*[[AsusRP-N53|Access Point mit dem Asus RP-N53]]&lt;br /&gt;
*[[Asus RT-AC68U|WLan mit dem Asus RT-AC68U]]&lt;br /&gt;
*[[Mqtt to Unity via shiftr.io | How to send Data from ESP to Unity with Mqtt protocol]]&lt;br /&gt;
*[[MQTT implementation in Basic Multiplayer via webGL Client | Shiftr.io/MQTT implementation in Basic Multiplayer via webGL Client]]&lt;br /&gt;
&lt;br /&gt;
== RFID ==&lt;br /&gt;
*[[User Login|Einloggen an einer Station mit einem Avatar]]&lt;br /&gt;
&lt;br /&gt;
== XY Plotter ==&lt;br /&gt;
The following code connects a xy-plotter to unity and also simulates the movement of the plotter in the game view. A simple white plane represents the scale of the plotter and a white cube its movement.&lt;br /&gt;
The movement is controlled by the arrow keys.&lt;br /&gt;
&lt;br /&gt;
GitHub [https://github.com/HfSDigital/XY-Plotter-Unity]&lt;br /&gt;
&lt;br /&gt;
==Kommunikation==&lt;br /&gt;
&lt;br /&gt;
===OSC===&lt;br /&gt;
*[[OSC what?]]&lt;br /&gt;
*[[OSC in Unity]]&lt;br /&gt;
&lt;br /&gt;
===MQTT===&lt;br /&gt;
*[[MQTT what?]]&lt;br /&gt;
*[[MQTT in Unity]]&lt;br /&gt;
*[[Build your own MQTT Broker]]&lt;br /&gt;
&lt;br /&gt;
=Projekte=&lt;br /&gt;
== Projekte Spiel und Objekt ==&lt;br /&gt;
*[[Be Bernd]]&lt;br /&gt;
*[[Wir Alle Spielen Theater]]&lt;br /&gt;
*[[Altruistic Modification]]&lt;br /&gt;
*[[Archäologischer Park- Die Villa]]&lt;br /&gt;
*[[Futopolis]]&lt;br /&gt;
*[[See Not]]&lt;br /&gt;
*[[Kalte Ecken im Koffer]]&lt;br /&gt;
&lt;br /&gt;
==Hack your &amp;quot;Theater&amp;quot; - How To==&lt;br /&gt;
 &lt;br /&gt;
*[[for Theaterleitung]]&lt;br /&gt;
*[[for Künstler*innen]]&lt;br /&gt;
&lt;br /&gt;
= Chancen Unmöglichkeiten =&lt;br /&gt;
FK: ich würde vorschlagen, so eine Liste nicht im Wiki zu machen. Dafür ist Discord besser geeignet.&lt;br /&gt;
*[[Residencies &amp;amp; Camps]]&lt;br /&gt;
*[[Festivals &amp;amp; Konferenzen mit CfPs]]&lt;br /&gt;
&lt;br /&gt;
=In Arbeit=&lt;br /&gt;
*[[OSC Kommunikation in Processing]]&lt;br /&gt;
*[[software architecture in theatre]]&lt;br /&gt;
*[[Verbindung Arduino / Unity - Research Diary]]&lt;br /&gt;
*[[TFT LCD Shield|2.6&amp;quot;/2.8&amp;quot; TFT LCD Shield mit Touch]]&lt;br /&gt;
&lt;br /&gt;
= Wiki Help =&lt;br /&gt;
*[[how to structure documentation well]]&lt;br /&gt;
*[[cheatsheet]]&lt;br /&gt;
*[https://www.mediawiki.org/wiki/Help:Formatting Hilfe: Formatierung]&lt;br /&gt;
*[https://www.mediawiki.org/wiki/Help:Links Hilfe: Links]&lt;br /&gt;
*[[ignore wiki syntax]]&lt;br /&gt;
*[[code syntax highlighting]]&lt;br /&gt;
*[[text scroll box]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=Unity&amp;diff=2027</id>
		<title>Unity</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=Unity&amp;diff=2027"/>
		<updated>2021-04-21T17:24:09Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* Begriffe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Was ist Unity?==&lt;br /&gt;
Unity ist ein Programm, mit dessen Hilfe man eigene interaktive Applikationen und Visualisierungen herstellen kann. In Unity können wir eigene virtuelle Räume mit Hilfe des Unity Editors gestalten und mit eigenen Scripten, die in der Programmiersprache C# geschrieben werden, eigene Interaktionen in diesen Räumen festlegen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unity wird oft auch als Game-Engine beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Für welche Geräte kann ich Unity nutzen?==&lt;br /&gt;
Wir benutzen den Unity Editor unter Windows 10, er läuft aber auch unter Mac OS.&amp;lt;br&amp;gt;&lt;br /&gt;
Im Unterricht nutzen wir den Unity Editor um Programme zu gestalten, die auf Windows, Mac OS, Android und WebGL laufen können. Man kann Unity zwar dafür verwenden, Programme für iOS zu gestalten, unser Studiengang deckt diese prozesse allerdings nicht ab.&lt;br /&gt;
&lt;br /&gt;
==Welche Version von Unity nutzen wir?==&lt;br /&gt;
Wir verwenden für die Verwaltung unserer Projekte und Unity Versionen das programm '''Unity Hub'''. Damit ist es möglich, mehrere Versionen von Unity gleichzeitig installiert zu haben und jedes Projekt mit unterschiedlichen Versionen des Unity Editors zu bearbeiten.&lt;br /&gt;
Die momentan im Unterricht genutzten Versionen von Unity sind '''2020.3.x''' und '''2019.4.x'''. &lt;br /&gt;
Innerhalb der Stelle hinter dem zweiten Punkt in der Versionsnummer von Unity sollten Updates des Unity Editors für gewöhnlich kein Problem sein. Projekte die in 2019.4.12 angefangen wurden sollten problemlos unter 2019.4.18 laufen. Es empfiehlt sich nicht, alte Projekte mit grösseren Versionsunterschieden in neueren Versionen von Unity zu öffnen.&lt;br /&gt;
&lt;br /&gt;
==Terminologie im Unity Editor==&lt;br /&gt;
[[Datei:Unity_Interface.jpg|1024px]]&lt;br /&gt;
&lt;br /&gt;
==Begriffe==&lt;br /&gt;
* '''Projekt''' - ein Ordner auf dem Computer in dem sich eine ganze Reihe weiterer Ordner befinden. Es gibt nicht eine einzelne Projektdatei, sondern eine ganze Struktur an Dateien und Ordnern aus denen der Unity Editor das Projekt erstellt und manipulierbar macht. Deswegen lohnt es sich, Unity Projekte über den Unity Hub zu verwalten. Der Ablageort eines Projektes auf der Festplatte kann sich verschieben, solange die in ihm enthaltene Verzeichnisstruktur gewahrt bleibt.&lt;br /&gt;
* '''Szene''' - eine Datei im Asset Folder von Unity, in der eine bestimmte Konfiguration von GameObjects und Verknüpfungen zwischen ihnen gespeichert ist.&lt;br /&gt;
* '''GameObject''' - ein GameObject ist eine Datenstruktur innerhalb einer Szene in Unity. Alle GameObjects, unabhängig davon ob sie eine visuelle Repräsentation haben, sind in der Hierarchy ausgeführt. Scripte können für gewöhnlich nur ausgeführt werden, wenn sie als Component eines gameObjects in der Szene vorhanden sind.&lt;br /&gt;
* '''Script''' - unter einem Script verstehen wir eine mit Visual Studio in C# geschriebene Datei, die wir im Editor als Component auf GameObjects legen können, damit das Script ausgeführt wird. Scripts können auf mehrere GameObjects gleichzeitig gelegt werden, oder auch mehrmals auf dasselbe GameObject und laufen als eigenständige Instanzen jeweils so oft, wie sie in der Szene vorkommen.&lt;br /&gt;
* '''Component''' - ein Script als Teil eines GameObjects, dessen Variablen ich sowohl über den Inspector im Unity Editor, als auch über ein eigenes Script verändern kann.&lt;br /&gt;
* '''Asset Folder''' - ein Ordner in der Unity Projektstruktur, in dem alle für das Projekt benötigten Scripte, Audio-, Bild-, Video-, 3D und Textdateien abgelegt werden. Diese Dateien werden oft auch Assets genannt. Unity scannt diesen Ordner jedesmal, wenn der Unity-Editor in Windows in den Focus tritt und importiert sämtliche im Ordner befindlichen Dateien automatisch in das Projekt.&lt;br /&gt;
* '''Build''' - ein unabhängig vom Editor ausführbares programm erstellen nennt man auch einen Build machen. Da Unity sämtliche Dateien im Asset-Folder direkt ins Projekt importieren möchte, empfiehlt es sich, diese von Unity erstellten Dateien in einem eigenen Ordner ausserhalb des Asset-Folders aber innerhalb des Projektordners zu speichern.&lt;br /&gt;
&lt;br /&gt;
==Eingabe und Ausgabe in Unity==&lt;br /&gt;
Interaktion in Unity Projekten entsteht erst, wenn die Eingabe von Nutzer*innen mit Veränderungen in der Gestaltung der Unity Szene verknüpft wird.&lt;br /&gt;
*[[Input in Unity]]&lt;br /&gt;
* [[Output in Unity]]&lt;br /&gt;
&lt;br /&gt;
== Konzepte und Tutorials ==&lt;br /&gt;
* [[Algorithms#Unity|Basic Algorithms]]&lt;br /&gt;
* [[Moving_Objects_in_Unity|Moving Objects in Unity]]&lt;br /&gt;
* [[UI in Unity]]&lt;br /&gt;
* [[OSC_in_Unity| OSC in Unity]]&lt;br /&gt;
* [[Raycasts]] in Unity&lt;br /&gt;
&lt;br /&gt;
== Pages related to Unity that need Context and/or Love ==&lt;br /&gt;
* [[Mqtt_to_Unity_via_shiftr.io| MQTT, Unity and shiftr.io]]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=Unity&amp;diff=2026</id>
		<title>Unity</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=Unity&amp;diff=2026"/>
		<updated>2021-04-21T17:23:41Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* Begriffe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Was ist Unity?==&lt;br /&gt;
Unity ist ein Programm, mit dessen Hilfe man eigene interaktive Applikationen und Visualisierungen herstellen kann. In Unity können wir eigene virtuelle Räume mit Hilfe des Unity Editors gestalten und mit eigenen Scripten, die in der Programmiersprache C# geschrieben werden, eigene Interaktionen in diesen Räumen festlegen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unity wird oft auch als Game-Engine beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Für welche Geräte kann ich Unity nutzen?==&lt;br /&gt;
Wir benutzen den Unity Editor unter Windows 10, er läuft aber auch unter Mac OS.&amp;lt;br&amp;gt;&lt;br /&gt;
Im Unterricht nutzen wir den Unity Editor um Programme zu gestalten, die auf Windows, Mac OS, Android und WebGL laufen können. Man kann Unity zwar dafür verwenden, Programme für iOS zu gestalten, unser Studiengang deckt diese prozesse allerdings nicht ab.&lt;br /&gt;
&lt;br /&gt;
==Welche Version von Unity nutzen wir?==&lt;br /&gt;
Wir verwenden für die Verwaltung unserer Projekte und Unity Versionen das programm '''Unity Hub'''. Damit ist es möglich, mehrere Versionen von Unity gleichzeitig installiert zu haben und jedes Projekt mit unterschiedlichen Versionen des Unity Editors zu bearbeiten.&lt;br /&gt;
Die momentan im Unterricht genutzten Versionen von Unity sind '''2020.3.x''' und '''2019.4.x'''. &lt;br /&gt;
Innerhalb der Stelle hinter dem zweiten Punkt in der Versionsnummer von Unity sollten Updates des Unity Editors für gewöhnlich kein Problem sein. Projekte die in 2019.4.12 angefangen wurden sollten problemlos unter 2019.4.18 laufen. Es empfiehlt sich nicht, alte Projekte mit grösseren Versionsunterschieden in neueren Versionen von Unity zu öffnen.&lt;br /&gt;
&lt;br /&gt;
==Terminologie im Unity Editor==&lt;br /&gt;
[[Datei:Unity_Interface.jpg|1024px]]&lt;br /&gt;
&lt;br /&gt;
==Begriffe==&lt;br /&gt;
* '''Projekt''' - ein Ordner auf dem Computer in dem sich eine ganze Reihe weiterer Ordner befinden. Es gibt nicht eine einzelne Projektdatei, sondern eine ganze Struktur an Dateien und Ordnern aus denen der Unity Editor das Projekt erstellt und manipulierbar macht. Deswegen lohnt es sich, Unity Projekte über den Unity Hub zu verwalten. Der Ablageort eines Projektes auf der Festplatte kann sich verschieben, solange die in ihm enthaltene Verzeichnisstruktur gewahrt bleibt.&lt;br /&gt;
* '''Szene''' - eine Datei im Asset Folder von Unity, in der eine bestimmte Konfiguration von GameObjects und Verknüpfungen zwischen ihnen gespeichert ist.&lt;br /&gt;
* '''GameObject''' - ein GameObject ist eine Datenstruktur innerhalb einer Szene in Unity. Alle GameObjects, unabhängig davon ob sie eine visuelle Repräsentation haben, sind in der Hierarchy ausgeführt. Scripte können für gewöhnlich nur ausgeführt werden, wenn sie als Component eines gameObjects in der Szene vorhanden sind.&lt;br /&gt;
* '''Script''' - unter einem Script verstehen wir eine mit Visual Studio in C# geschriebene Datei, die wir im Editor als Component auf GameObjects legen können, damit das Script ausgeführt wird. Scripts können auf mehrere GameObjects gleichzeitig gelegt werden, oder auch mehrmals auf dasselbe GameObject und laufen als eigenständige Instanzen jeweils so oft, wie sie in der Szene vorkommen.&lt;br /&gt;
* '''Component''' - ein Script als Teil eines GameObjects, dessen Variablen ich sowohl über den Inspector im Unity Editor, als auch über ein eigenes Script verändern kann.&lt;br /&gt;
* '''Asset Folder''' - ein Ordner in der Unity Projektstruktur, in dem alle für das Projekt benötigten Scripte, Audio-, Bild-, Video-, 3D und Textdateien abgelegt werden. Unity scannt diesen Ordner jedesmal, wenn der Unity-Editor in Windows in den Focus tritt und importiert sämtliche im Ordner befindlichen Dateien automatisch in das Projekt.&lt;br /&gt;
* '''Build''' - ein unabhängig vom Editor ausführbares programm erstellen nennt man auch einen Build machen. Da Unity sämtliche Dateien im Asset-Folder direkt ins Projekt importieren möchte, empfiehlt es sich, diese von Unity erstellten Dateien in einem eigenen Ordner ausserhalb des Asset-Folders aber innerhalb des Projektordners zu speichern.&lt;br /&gt;
&lt;br /&gt;
==Eingabe und Ausgabe in Unity==&lt;br /&gt;
Interaktion in Unity Projekten entsteht erst, wenn die Eingabe von Nutzer*innen mit Veränderungen in der Gestaltung der Unity Szene verknüpft wird.&lt;br /&gt;
*[[Input in Unity]]&lt;br /&gt;
* [[Output in Unity]]&lt;br /&gt;
&lt;br /&gt;
== Konzepte und Tutorials ==&lt;br /&gt;
* [[Algorithms#Unity|Basic Algorithms]]&lt;br /&gt;
* [[Moving_Objects_in_Unity|Moving Objects in Unity]]&lt;br /&gt;
* [[UI in Unity]]&lt;br /&gt;
* [[OSC_in_Unity| OSC in Unity]]&lt;br /&gt;
* [[Raycasts]] in Unity&lt;br /&gt;
&lt;br /&gt;
== Pages related to Unity that need Context and/or Love ==&lt;br /&gt;
* [[Mqtt_to_Unity_via_shiftr.io| MQTT, Unity and shiftr.io]]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=Unity&amp;diff=2025</id>
		<title>Unity</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=Unity&amp;diff=2025"/>
		<updated>2021-04-21T17:23:08Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* Begriffe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Was ist Unity?==&lt;br /&gt;
Unity ist ein Programm, mit dessen Hilfe man eigene interaktive Applikationen und Visualisierungen herstellen kann. In Unity können wir eigene virtuelle Räume mit Hilfe des Unity Editors gestalten und mit eigenen Scripten, die in der Programmiersprache C# geschrieben werden, eigene Interaktionen in diesen Räumen festlegen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unity wird oft auch als Game-Engine beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Für welche Geräte kann ich Unity nutzen?==&lt;br /&gt;
Wir benutzen den Unity Editor unter Windows 10, er läuft aber auch unter Mac OS.&amp;lt;br&amp;gt;&lt;br /&gt;
Im Unterricht nutzen wir den Unity Editor um Programme zu gestalten, die auf Windows, Mac OS, Android und WebGL laufen können. Man kann Unity zwar dafür verwenden, Programme für iOS zu gestalten, unser Studiengang deckt diese prozesse allerdings nicht ab.&lt;br /&gt;
&lt;br /&gt;
==Welche Version von Unity nutzen wir?==&lt;br /&gt;
Wir verwenden für die Verwaltung unserer Projekte und Unity Versionen das programm '''Unity Hub'''. Damit ist es möglich, mehrere Versionen von Unity gleichzeitig installiert zu haben und jedes Projekt mit unterschiedlichen Versionen des Unity Editors zu bearbeiten.&lt;br /&gt;
Die momentan im Unterricht genutzten Versionen von Unity sind '''2020.3.x''' und '''2019.4.x'''. &lt;br /&gt;
Innerhalb der Stelle hinter dem zweiten Punkt in der Versionsnummer von Unity sollten Updates des Unity Editors für gewöhnlich kein Problem sein. Projekte die in 2019.4.12 angefangen wurden sollten problemlos unter 2019.4.18 laufen. Es empfiehlt sich nicht, alte Projekte mit grösseren Versionsunterschieden in neueren Versionen von Unity zu öffnen.&lt;br /&gt;
&lt;br /&gt;
==Terminologie im Unity Editor==&lt;br /&gt;
[[Datei:Unity_Interface.jpg|1024px]]&lt;br /&gt;
&lt;br /&gt;
==Begriffe==&lt;br /&gt;
* '''Projekt''' - ein Ordner auf dem Computer in dem sich eine ganze Reihe weiterer Ordner befinden. Es gibt nicht eine einzelne Projektdatei, sondern eine ganze Struktur an Dateien und Ordnern aus denen der Unity Editor das Projekt erstellt und manipulierbar macht. Deswegen lohnt es sich, Unity Projekte über den Unity Hub zu verwalten. Der Ablageort eines Projektes auf der Festplatte kann sich verschieben, solange die in ihm enthaltene Verzeichnisstruktur gewahrt bleibt.&lt;br /&gt;
* '''Szene''' - eine Datei im Asset Folder von Unity, in der eine bestimmte Konfiguration von GameObjects und Verknüpfungen zwischen ihnen gespeichert ist.&lt;br /&gt;
* '''GameObject''' - ein GameObject ist eine Datenstruktur innerhalb einer Szene in Unity. Alle GameObjects, unabhängig davon ob sie eine visuelle Repräsentation haben, sind in der Hierarchy ausgeführt. Scripte können für gewöhnlich nur ausgeführt werden, wenn sie als Component eines gameObjects in der Szene vorhanden sind.&lt;br /&gt;
* '''Script''' - unter einem Script verstehen wir eine mit Visual Studio in C# geschriebene Datei, die wir im Editor als Component auf GameObjects legen können, damit das Script ausgeführt wird. Scripts können auf mehrere GameObjects gleichzeitig gelegt werden, oder auch mehrmals auf dasselbe GameObject und laufen als eigenständige Instanzen jeweils so oft, wie sie in der Szene vorkommen.&lt;br /&gt;
* '''Component''' - ein Script als Teil eines GameObjects, dessen Variablen ich sowohl über den Inspector im Unity Editor, als auch über ein eigenes Script verändern kann.&lt;br /&gt;
* '''Asset Folder''' - ein Ordner in der Unity Projektstruktur, in dem alle für das Projekt benötigten Scripte, Audio-, Video-, 3D und Textdateien abgelegt werden. Unity scannt diesen Ordner jedesmal, wenn der Unity-Editor in Windows in den Focus tritt und importiert sämtliche im Ordner befindlichen Dateien automatisch in das Projekt.&lt;br /&gt;
* '''Build''' - ein unabhängig vom Editor ausführbares programm erstellen nennt man auch einen Build machen. Da Unity sämtliche Dateien im Asset-Folder direkt ins Projekt importieren möchte, empfiehlt es sich, diese von Unity erstellten Dateien in einem eigenen Ordner ausserhalb des Asset-Folders aber innerhalb des Projektordners zu speichern.&lt;br /&gt;
&lt;br /&gt;
==Eingabe und Ausgabe in Unity==&lt;br /&gt;
Interaktion in Unity Projekten entsteht erst, wenn die Eingabe von Nutzer*innen mit Veränderungen in der Gestaltung der Unity Szene verknüpft wird.&lt;br /&gt;
*[[Input in Unity]]&lt;br /&gt;
* [[Output in Unity]]&lt;br /&gt;
&lt;br /&gt;
== Konzepte und Tutorials ==&lt;br /&gt;
* [[Algorithms#Unity|Basic Algorithms]]&lt;br /&gt;
* [[Moving_Objects_in_Unity|Moving Objects in Unity]]&lt;br /&gt;
* [[UI in Unity]]&lt;br /&gt;
* [[OSC_in_Unity| OSC in Unity]]&lt;br /&gt;
* [[Raycasts]] in Unity&lt;br /&gt;
&lt;br /&gt;
== Pages related to Unity that need Context and/or Love ==&lt;br /&gt;
* [[Mqtt_to_Unity_via_shiftr.io| MQTT, Unity and shiftr.io]]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=Unity&amp;diff=2024</id>
		<title>Unity</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=Unity&amp;diff=2024"/>
		<updated>2021-04-21T17:22:47Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* Begriffe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Was ist Unity?==&lt;br /&gt;
Unity ist ein Programm, mit dessen Hilfe man eigene interaktive Applikationen und Visualisierungen herstellen kann. In Unity können wir eigene virtuelle Räume mit Hilfe des Unity Editors gestalten und mit eigenen Scripten, die in der Programmiersprache C# geschrieben werden, eigene Interaktionen in diesen Räumen festlegen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unity wird oft auch als Game-Engine beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Für welche Geräte kann ich Unity nutzen?==&lt;br /&gt;
Wir benutzen den Unity Editor unter Windows 10, er läuft aber auch unter Mac OS.&amp;lt;br&amp;gt;&lt;br /&gt;
Im Unterricht nutzen wir den Unity Editor um Programme zu gestalten, die auf Windows, Mac OS, Android und WebGL laufen können. Man kann Unity zwar dafür verwenden, Programme für iOS zu gestalten, unser Studiengang deckt diese prozesse allerdings nicht ab.&lt;br /&gt;
&lt;br /&gt;
==Welche Version von Unity nutzen wir?==&lt;br /&gt;
Wir verwenden für die Verwaltung unserer Projekte und Unity Versionen das programm '''Unity Hub'''. Damit ist es möglich, mehrere Versionen von Unity gleichzeitig installiert zu haben und jedes Projekt mit unterschiedlichen Versionen des Unity Editors zu bearbeiten.&lt;br /&gt;
Die momentan im Unterricht genutzten Versionen von Unity sind '''2020.3.x''' und '''2019.4.x'''. &lt;br /&gt;
Innerhalb der Stelle hinter dem zweiten Punkt in der Versionsnummer von Unity sollten Updates des Unity Editors für gewöhnlich kein Problem sein. Projekte die in 2019.4.12 angefangen wurden sollten problemlos unter 2019.4.18 laufen. Es empfiehlt sich nicht, alte Projekte mit grösseren Versionsunterschieden in neueren Versionen von Unity zu öffnen.&lt;br /&gt;
&lt;br /&gt;
==Terminologie im Unity Editor==&lt;br /&gt;
[[Datei:Unity_Interface.jpg|1024px]]&lt;br /&gt;
&lt;br /&gt;
==Begriffe==&lt;br /&gt;
* '''Projekt''' - ein Ordner auf dem Computer in dem sich eine ganze Reihe weiterer Ordner befinden. Es gibt nicht eine einzelne Projektdatei, sondern eine ganze Struktur an Dateien und Ordnern aus denen der Unity Editor das Projekt erstellt und manipulierbar macht. Deswegen lohnt es sich, Unity Projekte über den Unity Hub zu verwalten. Der Ablageort eines Projektes auf der Festplatte kann sich verschieben, solange die in ihm enthaltene Verzeichnisstruktur gewahrt bleibt.&lt;br /&gt;
* '''Szene''' - eine Datei im Asset Folder von Unity, in der eine bestimmte Konfiguration von GameObjects und Verknüpfungen zwischen ihnen gespeichert ist.&lt;br /&gt;
* '''GameObject''' - ein GameObject ist eine Datenstruktur innerhalb einer Szene in Unity. Alle GameObjects, unabhängig davon ob sie eine visuelle Repräsentation haben, sind in der Hierarchy ausgeführt. Scripte können für gewöhnlich nur ausgeführt werden, wenn sie als Component eines gameObjects in der Szene vorhanden sind.&lt;br /&gt;
* '''Script''' - unter einem Script verstehen wir eine mit Visual Studio in C# geschriebene Datei, die wir im Editor als Component auf GameObjects legen können, damit das Script ausgeführt wird. Scripts können auf mehrere GameObjects gleichzeitig gelegt werden, oder auch mehrmals auf dasselbe GameObject und laufen als eigenständige Instanzen jeweils so oft, wie sie in der Szene vorkommen.&lt;br /&gt;
* '''Component''' - ein Script als Teil eines GameObjects, dessen Variablen ich sowohl über den Inspector im Unity Editor, als auch über ein eigenes Script verändern kann.&lt;br /&gt;
* '''Asset Folder''' - ein Ordner in der Unity Projektstruktur, in dem alle für das Projekt benötigten Scripte, Audio-, Video- und Textdateien abgelegt werden. Unity scannt diesen Ordner jedesmal, wenn der Unity-Editor in Windows in den Focus tritt und importiert sämtliche im Ordner befindlichen Dateien automatisch in das Projekt.&lt;br /&gt;
* '''Build''' - ein unabhängig vom Editor ausführbares programm erstellen nennt man auch einen Build machen. Da Unity sämtliche Dateien im Asset-Folder direkt ins Projekt importieren möchte, empfiehlt es sich, diese von Unity erstellten Dateien in einem eigenen Ordner ausserhalb des Asset-Folders aber innerhalb des Projektordners zu speichern.&lt;br /&gt;
&lt;br /&gt;
==Eingabe und Ausgabe in Unity==&lt;br /&gt;
Interaktion in Unity Projekten entsteht erst, wenn die Eingabe von Nutzer*innen mit Veränderungen in der Gestaltung der Unity Szene verknüpft wird.&lt;br /&gt;
*[[Input in Unity]]&lt;br /&gt;
* [[Output in Unity]]&lt;br /&gt;
&lt;br /&gt;
== Konzepte und Tutorials ==&lt;br /&gt;
* [[Algorithms#Unity|Basic Algorithms]]&lt;br /&gt;
* [[Moving_Objects_in_Unity|Moving Objects in Unity]]&lt;br /&gt;
* [[UI in Unity]]&lt;br /&gt;
* [[OSC_in_Unity| OSC in Unity]]&lt;br /&gt;
* [[Raycasts]] in Unity&lt;br /&gt;
&lt;br /&gt;
== Pages related to Unity that need Context and/or Love ==&lt;br /&gt;
* [[Mqtt_to_Unity_via_shiftr.io| MQTT, Unity and shiftr.io]]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=UI_in_Unity&amp;diff=2023</id>
		<title>UI in Unity</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=UI_in_Unity&amp;diff=2023"/>
		<updated>2021-04-21T17:06:06Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* UI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= UI =&lt;br /&gt;
'''UI''' steht generell als Kurzform von '''User Interface'''. Im Kontext von Unity bezeichnet der Begriff '''UI''' allerdings eine von Unity spezifisch vorgegebene Interaktionsstruktur, die mit Buttons, Textfeldern und ähnlichem arbeitet, und sich im Code von den [[Input in Unity| meisten anderen Eingabemöglichkeiten unterscheidet]].&lt;br /&gt;
Der Hauptunterschied besteht im von Unity vorgegebenen Interaktionsmodus durch UI Elemente und die Unterschiede in der Art der Darstellung auf dem Bildschirm.&lt;br /&gt;
&lt;br /&gt;
== UI Elemente hinzufügen ==&lt;br /&gt;
Unity UI Elemente sind GameObjects die man in der Hierarchy über den Unterpunkt UI erstellen kann.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:create-ui-menu-unity.png | 400px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Es stehen eine Reihe von Elementen zur Auswahl. Wir werden uns auf dieser Seite hauptsächlich mit den Elementen Button (TextMeshPro) und Text (TextMeshpro) beschäftigen. &lt;br /&gt;
=== Kurze Erklärung zu TextMeshPro ===&lt;br /&gt;
Unity ist in den letzten zehn Jahren enorm schnell gewachsen und hat oft Code-Elemente, die von Menschen ausserhalb der Firma erstellt wurden über Zeit in den eigenen Code übernommen. TextMeshPro ist so ein Fall, in dem besserer Code zur Darstellung von texten in unity eingeflossen ist. Unity muss allerdings nun den von ihnen selbst erstellten sowie den zugekauften Code weiter anbieten, was dazu führt, dass man als Nutzer*in die Auswahl aht, für welche dier beiden zur Verfügung gestellten Varianten man sich entscheiden möchte.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Wir wollen uns im Zweifel immer für TextMeshPro entscheiden''', da der Text schöner dargestellt wird.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn ihr das erste Mal aus der Hierarchy ein GameObject mit dem Zusatz (TextMeshPro) erstellt, ploppt folgender Dialog auf, bei dem ihr auf beide Knöpfe klicken könnt:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:tmp-import.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Das Canvas Konzept ===&lt;br /&gt;
Alle in Unity genutzten UI Elemente werden einem sogenannten '''Canvas''' Objekt zugeordnet, einer Art Leinwand, die über der Szenen auf den Bildschirm gespannt ist. Wenn wir in der Hierarchy einen neuen Button erstellen, erstellt Unity auch gleich ein '''Canvas''' Object sowie ein '''EventSystem''' (über letzteres werde wir uns im Rahmen des Studiengangs nur peripher unterhalten).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-canvas-eventsystem-ui.png |400px]]&amp;lt;br&amp;gt;&lt;br /&gt;
UI Elemente werden relativ zu diesem Canvas positioniert und dargestellt (gerendert) und unterliegen dem Koordinatensystem, das durch den Canvas vorgegeben ist.  Für gewöhnlich sind sie daher '''unabhängig von der Position und Rotation der Kamera in der Szene''' immer am selben Ort auf dem Bildschirm. '''Deswegen müssen UI Elemente in der Hierarchy in Unity auch immer unter einem Canvas Objekt auftauchen.'''&amp;lt;br&amp;gt;&lt;br /&gt;
Das Koordinatensystem des Canvas Objekts wiederum orientiert sich an der [[Screen Resolution| Auflösung des Bildschirms]], wie in der Game View eingestellt.&amp;lt;br&amp;gt; &lt;br /&gt;
[[Datei:unity-gameview-resolution.png| 600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Da man sich der Auflösung der Endgeräte zu Beginn eines Projektes nicht immer sicher sein kann, und Unity von sich aus vorsieht, dass die Nutzer*innen ihre Auflösung auch selbst einstellen können (kommt bei uns seltener vor), bietet uns Unity durch die Nutzung des Canvas Konzeptes an, dass wir verschiedene UI Elemente '''relativ zu den Ecken des Bildschirms''' positionieren können. Hierfür ändert Unity den uns bekannten [https://docs.unity3d.com/ScriptReference/Transform.html| '''Transform'''] Component in ein [https://docs.unity3d.com/ScriptReference/RectTransform.html| '''RectTransform'''] Component (der allerdings von Transform abgeleitet ist, so dass wir per Script weiterhin wie gewohnt auf transform.position zugreifen können):&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:recttransform.png|400px]]&amp;lt;br&amp;gt;&lt;br /&gt;
=== Unterschiede in Koordinaten ===&lt;br /&gt;
Wie ihr gut erkennen könnt, sind die Zahlen, die in diesem Component die Position des GameObjects beschreiben deutlich anders, als die von uns bisher genutzten. Während wir bei unseren bisherigen Übungen für gewöhnlich Koordinaten zwischen 1 und 10 oder -1 und -10 für die x, y und z Werte genutzt haben, stehen hier plötzlich zahlen in der Grösse von 100 und 1000. Das hat damit zu tun, dass die Koordinaten bei Rect Transform als Bildschirmkoordinaten interpretiert werden, wobei eine Koordinate von 1 genau einen Pixel beschreibt. Zum Vergleich: in unserer Unity Szene beschreibt eine Koordinate von 1 für gewöhnlich die Distanz von einem Meter.&amp;lt;br&amp;gt;&lt;br /&gt;
=== Darstellung in Scene View und Game View ===&lt;br /&gt;
Wenn wir zwischen der Unity Scene View und der Game View hin und her schalten, stellen wir fest, dass unser Button in der Game View zwar an einem sinnvollen Punkt dargestellt wird, in unserer Scene View Allerdings nichts von ihm zu sehen ist. Stattdessen sehen wir eine seltsame Linie mit Ecke:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:ui-scene-vs-gameview.png|800px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Der Grund dafür ist, dass die Unity Scene View immer alle Dinge in Unity Koordinaten darstellt (1 Unity Koordinate interpretieren wir für gewöhnlich als 1 Meter), wohingegen in der Game View die Besonderheiten des Canvas-Konzeptes bereits in Betracht gezogen werden, und die UI Elemente unabhängig von der Kamera auf dem Bildschirm platziert werden.&amp;lt;br&amp;gt;&lt;br /&gt;
'''UI Elemente sind also am Einfachsten in der Game View sichtbar und es empfiehlt sich, ihre positionierung auch dort zu überprüfen.'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Trotzdem können UI Elemente auch in der Scene View angeschaut und manipuliert werden. Die oben angesprochene weisse Linie beschreibt den Umfang des Canvas Objektes in Unity 3D-Koordinaten. Im Canvas Objekt selbst könnt ihr unter ''width'' und ''height'' nachschauen, wie gross dieser Umfang ist. Wenn ihr gaaaaaaaanz weit herauszoomt, könnt ihr dann auch euren Button sehen. Eine einfachere Version, um eine übersicht über die UI Elemente in der Scene View zu bekommen ist, '''das Canvas GameObjekt doppelklicken'''.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-doubleclick-canvas.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Ihr könnt selbstverständlich wie gewohnt, auch UI Elemente in der Scene View anklicken und verschieben. Wichtig hierbei ist nur zu wissen, dass der Canvas diese Elemente nicht perspektivisch darstellt und sich an der Darstellung der UI Elemente somit auch bei Verschiebung in der Z-Achse nichts ändert.&lt;br /&gt;
&lt;br /&gt;
=== Relatives Ausrichten der UI Elemente ===&lt;br /&gt;
Durch klicken auf das Piktogramm links bei RectTransform können wir bestimmen, wie Unity die relative Position unseres UI Elements bestimmen soll:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-ui-anchors.png|400px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Gerade bewegt Unity unseren Button von der Mitte des Screens aus gesehen 687 Pixel nach links und 369.5 Pixel nach unten.&lt;br /&gt;
Mehr informationen hierzu findet ihr in der [https://docs.unity3d.com/Packages/com.unity.ugui@1.0/manual/UIBasicLayout.html| Unity Gebrauchsanweisung für UI Elemente].&lt;br /&gt;
&lt;br /&gt;
Nachdem wir einen '''Button (TextMeshPro)''' in Unity hinzugefügt haben, sollte unsere Szene ungefähr so aussehen:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:unity-scene-with-button.png|800px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Textfelder ==&lt;br /&gt;
Nicht immer werden UI Elemente dafür genutzt, dass sie manipuliert werden können. Oft sollen sie auch einfach nur etwas darstellen oder anzeigen. Ein Beispiel dafür ist '''Text (TextMeshPro)''':&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-ui-create-text-tmp.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Textfeld generiert genauso einen Canvas (falls noch keiner da ist) oder ordnet sich automatisch einem bestehenden Canvas unter (falls schon ein anderes UI Element in der Szene ist).&lt;br /&gt;
&lt;br /&gt;
=== Text in einem Textfeld per Script definieren ===&lt;br /&gt;
Der Unity Editor erlaubt euch, den Text den ihr im Textfeld seht direkt im Editor einzugeben. Für Nutzer*innen eures Programms ist der Text allerdings nicht editierbar. Jedoch könnt ihr den Text selbstverständlich per Script jederzeit ändern.&amp;lt;br&amp;gt;&lt;br /&gt;
Dafür erstellen wir hier als Beispiel ein neues Script, dass den Text in unserem neu generierten Textfeld verändert. Wir wollen es TextChange.cs nennen:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-new-script-textChange.png|400px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um von unserem Script aus auf das '''Text (TextMeshPro)''' GameObject zugreifen zu können und dort den angezeigten Text zu verändern, müssen wir eine Verbindung zu unserem Script in Form einer Variable schaffen. Dazu brauchen wir, [[Algorithms#Auf_eine_Variable_in_einem_anderen_Script_zugreifen| wie immer]], den Typ des Scripts auf das wir zugreifen wollen. Im Falle eines '''Text (TextMeshPro)''' stellt sich der Typ allerdings als etwas komplizierter dar, weil es Text in Unity in unterschiedlichen Formen gibt: einmal für UI und einmal für die 3D Repräsentation in unserer Szene! Indiesem Fall wollen wir auf die UI-Version des Typs Text (TextMeshPro) zugreifen. Der Typ unseres Textfeldes ist in diesem Fall TextMeshProUGUI (UGUI steht kurz für Unity Graphical User Interface). Damit wir direkt Zugriff auf diesen Typ bekommen, sollten wir die Library TMPro in unserem Script mit laden. Das sieht dann so aus:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:visual-studio-using-tmpro.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wir können nun im Unity Editor unser Script in ein neues, leeres GameObject ziehen, das wir TextManipulation nennen können:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-ui-textmanipulation-gameobject.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Und dort dann die Verbindung mit unserem Text(TMP) GameObject und dem zugehörigen TextMeshProUGUI Component herstellen:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-ui-connect Text-tmp-to-textmanipulation.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nun können wir in unserem TextChange.cs Script auf die Variable '''text'''in der verbundenen TextMeshProUGUI-Komponente zugreifen und sie verändern, in dem wir beispielsweise unsere Start Funktion folgendermassen umschreiben:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 void Start()&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
   meinTextFeld.text=&amp;quot;Hallo Welt!&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
oder in unserer Update Funktion folgendes Schreiben:&lt;br /&gt;
&lt;br /&gt;
 void Update()&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
   meinTextFeld.text+=&amp;quot;mi&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Einen Button abfragen ==&lt;br /&gt;
Prinzipiell erstellen wir in unseren Szenen Buttons als UI-Elemente, weil wir im Code darauf reagieren wollen, dass jemensch den Button geklickt hat. Hier hilft uns Unity durch bereits vorprogrammierte Strukturen, die es uns sehr einfach ermöglichen, eine Funktion aufzurufen, wenn ein bestimmter Button geklickt wurde.&lt;br /&gt;
&lt;br /&gt;
=== Beispielscript ===&lt;br /&gt;
Wir können also ein Beispielscript erstellen, nennen wir es KnopfGeklickt.cs (Grossschreibung bei neuen Scripten beachten!). Und diesem Script können wir eine einfache Funktion hinzufügen - in diesem Beispiel die Funktion ButtonWurdeGeklickt(), die uns in der Konsole etwas ausgibt:&lt;br /&gt;
 &lt;br /&gt;
 public void ButtonWurdeGeklickt(){&lt;br /&gt;
 &lt;br /&gt;
   Debug.Log(&amp;quot;Yay!&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Das '''public''' bei public void ist in diesem Fall sehr wichtig, da wir diese Funktion ausserhalb des eigenen GameObjects aufrufen wollen!&lt;br /&gt;
&lt;br /&gt;
=== Button mit Beispielscript verbinden ===&lt;br /&gt;
Nachdem wir unser Script als Component auf ein leeres Gameobject hinzugefügt haben, können wir daraufhin im Inspector den Button mit unserer Funktion direkt verbinden. Dazu fügen wir beim Button im Feld OnClick eine neue Verbindung zu unserer Funktion hinzu:&amp;lt;br&amp;gt;&lt;br /&gt;
Ausgangspunkt ist unsere Hierarchy mit unserem GameObject (ich habe es KlickKonsequenz genannt) und unserem neuen Script als Component:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-klickkonsequenz-setup.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
In Folgenden Schritten können wir die oben genannte Funktion in unserem Script ausführen lassen, wenn der Button gedrückt wurde:&lt;br /&gt;
* Neue Verbindung bei Button herstellen:&amp;lt;br&amp;gt; [[Datei:unity-btn-add-connection.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
* Unser GameObject zuweisen:&amp;lt;br&amp;gt; [[Datei:unity-btn-drag-gameobject-to-connect.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
* Unsere neu geschriebene Funktion auswählen:&amp;lt;br&amp;gt; [[Datei:unity-btn-select-function.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn alles funktioniert hat ist das Resultat in der Console ablesbar:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-btn-yay.png]]&lt;br /&gt;
&lt;br /&gt;
== Mehrere Buttons mit einem Script verbinden ==&lt;br /&gt;
Im Folgenden Beispiel wollen wir mit zwei Buttons arbeiten, und unser KnopfGeklickt.cs Script so erweitern, dass wir im Script unterscheiden können, welcher der beiden Knöpfe gedrückt wurde. Hierzu benutzen wir ein Kozpet, dass in Unity in diesem Kontext mit '''static paramaters''' bezeichnet wird.&lt;br /&gt;
&lt;br /&gt;
=== Hinzufügen eines Parameters in unsere Scriptfunktion ===&lt;br /&gt;
Wir ändern die Funktion in unserem Script, so dass wir einen Parameter unserer Wahl hinzufügen, und dadurch eine Entscheidung über unsere Ausgabe treffen können. Dieser Parameter wird später bei der Verbindung zu den Buttons mit einem Wert gefüllt, den wir im Inspector bei den jeweiligen Buttons einstellen können. Als Beispiel wähle ich hier einen '''int''' Parameter und nenne ihn &amp;quot;welcherButton&amp;quot;:&amp;lt;br&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
 public void ButtonWurdeGeklickt(int welcherButton)&lt;br /&gt;
 {&lt;br /&gt;
  &lt;br /&gt;
   if (welcherButton==1){&lt;br /&gt;
     Debug.Log(&amp;quot;Button 1 gedrückt!&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   if (welcherButton==2){&lt;br /&gt;
     Debug.Log(&amp;quot;Button 2 gedrückt!&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Damit ich zwischen zwei Buttons unterscheiden kann, brauche ich ja auch zwei Buttons. Ich habe dafür meinen ersten Button kopiert und leicht verschoben, dann beiden einen Namen gegeben, damit ich sie für mich besser unterscheiden kann. Meine Hierarchy sieht dementsprechend so aus:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-btn-two-btns.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Ich habe nun zwei Buttons, beide in der Hierarchy unter demselben Canvas GameObject, allerdings der Übersicht halber unterschiedlich benannt. Das sich mein Script geändert hat, muss ich die Funktion bei OnCLick wieder neu Verbinden.Beim Verbinden mit meiner abgeänderten Funktion entsteht nun ein neues Feld, in den ich manuell den Wert des Parameters eingeben kann, der an meine Funktion übergeben wird, wenn der Button gedrückt wird:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-btn-static-parameter.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese statischen Parameter müssen nun '''für jeden Button einzeln''' auf eine Zahl gesetzt werden, die ich dann im oben genannten Script abfragen kann. Für ''Button Eins'' setze ich die Zahl auf 1, für ''Button Zwei'' setze ich sie auf zwei. So kann ich mit einem einzelnen Script unterscheiden, welcher Knopf im User Interface gedrückt wurde.&lt;br /&gt;
&lt;br /&gt;
== Textfelder ==&lt;br /&gt;
Nachdem wir die Verbindung von UI Elementen mit unseren Scripten und den Umgang mit statischen parametern angeschaut haben, stellt sich nun die Frage: Was tun, wenn wir die Eingabe von Nutzer*innen in textfelder direkt in Code weiterverarbeiten wollen?&amp;lt;br&amp;gt;&lt;br /&gt;
Hierzu erstellen wir zunächst ein neues InputField (TextMeshPro) in unserer Hierarchy. Wir ihr sehen könnt wird es direkt dem bereits bestehenden Canvas GameObject in der Hierarchy untergeordnet:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-new-inputfield.png|400px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Dieses Inputfield hat nun mehrere Möglichkeiten, die Texteingabe von Nutzer*innen an den von uns geschriebenen Code weiterzuleiten:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-textinput-functionlist.png|400px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Die Funktionszuschreibungen funktionieren hier genauso wie bei den Buttons weiter oben, jedoch können wir zu verschiedenen Zuständen, die es beim InputField geben kann auch verschiedene Funktionen zuordnen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Durch Textfelder Funktionen rufen ===&lt;br /&gt;
Um das auszuprobieren, können wir ein neues Script erstellen, dass ich beispielhalber TextEingabeLesen.cs nennen möchte. In diesem Script können wir eine Funktion hinzufügen, von der wir wollen, dass sie aufgerufen wird, wenn jemand etwas in unser InputField geschrieben und die Eingabe bestätigt hat. Die Funktion könnte ungefähr so aussehen:&lt;br /&gt;
&lt;br /&gt;
 public void TextEingegeben(){&lt;br /&gt;
 &lt;br /&gt;
   Debug.Log(&amp;quot;Yay!&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Da ich mich zunächst vergewissern möchte, dass ich alles richtig verbunden habe, macht diese Funktion zunächst nicht besonders viel. Sie ist aber ein erster Schritt, mit dem ich überprüfen kann, ob die Funktion tatsächlich im richtigen Moment gerufen wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Schritte stehen also nun an:&lt;br /&gt;
* Ein neues, leeres GameObject muss der Hierarchy hinzugefügt werden, vielleicht nennen wir es &amp;quot;TextVerarbeitung&amp;quot;&lt;br /&gt;
* Unser neu geschriebenes Script mit dem Namen TextEingabeLesen.cs muss als Component zum neuen GameObject TextVerarbeitung hinzugefügt werden.&lt;br /&gt;
* In unserem InputField GameObject, muss ich eine neue Verbindung bei '''OnEndEdit''' zu TextVerarbeitung hinzufügen:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-connect-script-to-inputfield.png|600px]]&lt;br /&gt;
* Als Funktion soll die Funktion TextEingeben ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Wenn alles verbunden ist, könnt ihr die Eingabe testen: In der Game View und im Play Modus könnt ihr auf das Textfeld klicken, einen Text eingeben und dann die Enter-Taste drücken. In der Konsole sollte dann &amp;quot;Yay!&amp;quot;erscheinen.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Unity-btn-yay.png]]&lt;br /&gt;
&lt;br /&gt;
=== Übungen ===&lt;br /&gt;
* Könnt ihr die Szene so verändern, dass &amp;quot;Yay!&amp;quot; jedesmal erscheint wenn ein Buchstabe ins Textfeld eingegeben wird?&lt;br /&gt;
* Könnt ihr euer Script so umschreiben, dass in der Console &amp;quot;...&amp;quot; ausgegeben wird, wenn jemand etwas tippt, und &amp;quot;Yay!&amp;quot; wenn die Eingabe beendet wurde?&lt;br /&gt;
&lt;br /&gt;
=== Dynamische Parameter ===&lt;br /&gt;
Ein einfaches Beispiel könnte den eingegebenen Text in der Console ausgeben. Wie aber stellt mir das InputField diesen eingegebenen text zur Verfügung? Die Antwort ist: über einen '''dynamic parameter'''. Wir können für unsere Funktion, ähnlich wie bei ''static parameter'' bei den Buttons, nun einen neuen Parameter vom Typ string definieren:&lt;br /&gt;
 &lt;br /&gt;
 public void TextEingegeben(string derText){&lt;br /&gt;
 &lt;br /&gt;
   Debug.Log(derText);&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Damit das InputFIeld GameObject weiss, dass es den eingegebenen Text an diese Funktion übergeben soll, müssen wir die Funktion folgendermassen verbinden:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-inputfield-dynamic-string.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Wie ihr sehen könnt, gibt es unsere Funktion TextEingegeben in der Liste gleich zweimal: einmal unter der Kategorie '''Dynamic string''' und einmal unter der Kategorie '''Static Parameters'''. In diesem Fall wollen wir unsere Funktion aus der oberen Liste auswählen, damit Unity den eingegebenen Text direkt an den Parameter unserer Funktion weitergeben kann!&lt;br /&gt;
&lt;br /&gt;
===Übungen===&lt;br /&gt;
* Kannst du eine Unity Szene machen, in der sich ein Würfel immer einen Meter vorwärts bewegt, wenn jemand das Wort &amp;quot;liebe&amp;quot; in ein Textfeld eingibt?&lt;br /&gt;
* Kannst du eine Unity Szene machen, in der derselbe Würfel einen Namen bekommt, der durch ein zweites Textfeld festgelegt wird?&lt;br /&gt;
* Kannst du eine Eingabe aus einem textfeld in einem 3D-Text (TextMeshPro) erscheinen lassen?&lt;br /&gt;
&lt;br /&gt;
==Übungen zu UI und Unity==&lt;br /&gt;
* Kannst du ein Quiz-Programm schreiben, dass die 10 Fragen hintereinander stellt, und am Ende eine Auswertung auf dem Screen ausgibt?&lt;br /&gt;
* Kannst du einige der Fragen über ein UI Element Slider von 1-10 beantworten lassen?&lt;br /&gt;
* Kannst du über [[OSC in Unity]] die Antworten dieser Fragen auf einem anderen Computer visualisieren?&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=Output_in_Unity&amp;diff=2022</id>
		<title>Output in Unity</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=Output_in_Unity&amp;diff=2022"/>
		<updated>2021-04-21T17:05:37Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Playing Audio, etc...&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=Output_in_Unity&amp;diff=2021</id>
		<title>Output in Unity</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=Output_in_Unity&amp;diff=2021"/>
		<updated>2021-04-21T17:04:28Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: Die Seite wurde neu angelegt: „tbd“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;tbd&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=Unity&amp;diff=2020</id>
		<title>Unity</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=Unity&amp;diff=2020"/>
		<updated>2021-04-21T17:04:18Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* Eingabe und Ausgabe in Unity */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Was ist Unity?==&lt;br /&gt;
Unity ist ein Programm, mit dessen Hilfe man eigene interaktive Applikationen und Visualisierungen herstellen kann. In Unity können wir eigene virtuelle Räume mit Hilfe des Unity Editors gestalten und mit eigenen Scripten, die in der Programmiersprache C# geschrieben werden, eigene Interaktionen in diesen Räumen festlegen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unity wird oft auch als Game-Engine beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Für welche Geräte kann ich Unity nutzen?==&lt;br /&gt;
Wir benutzen den Unity Editor unter Windows 10, er läuft aber auch unter Mac OS.&amp;lt;br&amp;gt;&lt;br /&gt;
Im Unterricht nutzen wir den Unity Editor um Programme zu gestalten, die auf Windows, Mac OS, Android und WebGL laufen können. Man kann Unity zwar dafür verwenden, Programme für iOS zu gestalten, unser Studiengang deckt diese prozesse allerdings nicht ab.&lt;br /&gt;
&lt;br /&gt;
==Welche Version von Unity nutzen wir?==&lt;br /&gt;
Wir verwenden für die Verwaltung unserer Projekte und Unity Versionen das programm '''Unity Hub'''. Damit ist es möglich, mehrere Versionen von Unity gleichzeitig installiert zu haben und jedes Projekt mit unterschiedlichen Versionen des Unity Editors zu bearbeiten.&lt;br /&gt;
Die momentan im Unterricht genutzten Versionen von Unity sind '''2020.3.x''' und '''2019.4.x'''. &lt;br /&gt;
Innerhalb der Stelle hinter dem zweiten Punkt in der Versionsnummer von Unity sollten Updates des Unity Editors für gewöhnlich kein Problem sein. Projekte die in 2019.4.12 angefangen wurden sollten problemlos unter 2019.4.18 laufen. Es empfiehlt sich nicht, alte Projekte mit grösseren Versionsunterschieden in neueren Versionen von Unity zu öffnen.&lt;br /&gt;
&lt;br /&gt;
==Terminologie im Unity Editor==&lt;br /&gt;
[[Datei:Unity_Interface.jpg|1024px]]&lt;br /&gt;
&lt;br /&gt;
==Begriffe==&lt;br /&gt;
* '''Projekt''' - ein Ordner auf dem Computer in dem sich eine ganze Reihe weiterer Ordner befinden. Es gibt nicht eine einzelne Projektdatei, sondern eine ganze Struktur an Dateien und Ordnern aus denen der Unity Editor das Projekt erstellt und manipulierbar macht. Deswegen lohnt es sich, Unity Projekte über den Unity Hub zu verwalten. Der Ablageort eines Projektes auf der Festplatte kann sich verschieben, solange die in ihm enthaltene Verzeichnisstruktur gewahrt bleibt.&lt;br /&gt;
* '''Szene''' - eine Datei im Asset Folder von Unity, in der eine bestimmte Konfiguration von GameObjects und Verknüpfungen zwischen ihnen gespeichert ist.&lt;br /&gt;
* '''GameObject''' - ein GameObject ist eine Datenstruktur innerhalb einer Szene in Unity. Alle GameObjects, unabhängig davon ob sie eine visuelle Repräsentation haben, sind in der Hierarchy ausgeführt. Scripte können für gewöhnlich nur ausgeführt werden, wenn sie als Component eines gameObjects in der Szene vorhanden sind.&lt;br /&gt;
* '''Script''' - unter einem Script verstehen wir eine mit Visual Studio in C# geschriebene Datei, die wir im Editor als Component auf GameObjects legen können, damit das Script ausgeführt wird. Scripts können auf mehrere GameObjects gleichzeitig gelegt werden, oder auch mehrmals auf dasselbe GameObject und laufen als eigenständige Instanzen jeweils so oft, wie sie in der Szene vorkommen.&lt;br /&gt;
* '''Component''' - ein Script als Teil eines GameObjects, dessen Variablen ich sowohl über den Inspector im Unity Editor, als auch über ein eigenes Script verändern kann.&lt;br /&gt;
* '''Asset Folder''' - ein Ordner in der Unity Projektstruktur, in dem alle für das Projekt benötigten Dateien abgelegt werden. Unity scannt diesen Ordner jedesmal, wenn der Unity-Editor in Windows in den Focus tritt und importiert sämtliche im Ordner befindlichen Dateien automatisch in das Projekt.&lt;br /&gt;
* '''Build''' - ein unabhängig vom Editor ausführbares programm erstellen nennt man auch einen Build machen. Da Unity sämtliche Dateien im Asset-Folder direkt ins Projekt importieren möchte, empfiehlt es sich, diese von Unity erstellten Dateien in einem eigenen Ordner ausserhalb des Asset-Folders aber innerhalb des Projektordners zu speichern.&lt;br /&gt;
&lt;br /&gt;
==Eingabe und Ausgabe in Unity==&lt;br /&gt;
Interaktion in Unity Projekten entsteht erst, wenn die Eingabe von Nutzer*innen mit Veränderungen in der Gestaltung der Unity Szene verknüpft wird.&lt;br /&gt;
*[[Input in Unity]]&lt;br /&gt;
* [[Output in Unity]]&lt;br /&gt;
&lt;br /&gt;
== Konzepte und Tutorials ==&lt;br /&gt;
* [[Algorithms#Unity|Basic Algorithms]]&lt;br /&gt;
* [[Moving_Objects_in_Unity|Moving Objects in Unity]]&lt;br /&gt;
* [[UI in Unity]]&lt;br /&gt;
* [[OSC_in_Unity| OSC in Unity]]&lt;br /&gt;
* [[Raycasts]] in Unity&lt;br /&gt;
&lt;br /&gt;
== Pages related to Unity that need Context and/or Love ==&lt;br /&gt;
* [[Mqtt_to_Unity_via_shiftr.io| MQTT, Unity and shiftr.io]]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=Interaction_in_Unity&amp;diff=2019</id>
		<title>Interaction in Unity</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=Interaction_in_Unity&amp;diff=2019"/>
		<updated>2021-04-21T17:03:25Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: Fkirschner verschob die Seite Interaction in Unity nach Input in Unity&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#WEITERLEITUNG [[Input in Unity]]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=Input_in_Unity&amp;diff=2018</id>
		<title>Input in Unity</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=Input_in_Unity&amp;diff=2018"/>
		<updated>2021-04-21T17:03:25Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: Fkirschner verschob die Seite Interaction in Unity nach Input in Unity&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Interagieren in Unity =&lt;br /&gt;
Um den Nutzer*innen in den von uns gestalteten Unity Programmen die Möglichkeit zu geben zu interagieren, sollen hier einige generelle Interaktionsmodi aufgelistet und erklärt werden.&lt;br /&gt;
&lt;br /&gt;
== Keyboard Input ==&lt;br /&gt;
Um in einem Unity Script abzufragen, ob eine bestimmte Taste auf dem Keyboard gedrückt wurde, nutzen wir die Input Klasse. Unity Dokumentation [https://docs.unity3d.com/ScriptReference/Input.html| hier].&lt;br /&gt;
In Code verwenden wir folgende Abfrage meist in unserer Update() Funktion, da diese Funktion in jedem Frame aufgerufen wird, und wir den Zustand des Keyboards nicht versehentlich verpassen wollen:&lt;br /&gt;
&lt;br /&gt;
 if (Input.GetKeyUp(KeyCode.Y)){&lt;br /&gt;
 &lt;br /&gt;
    //do something when the key y has been released&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Mouse Input ==&lt;br /&gt;
=== Abfrage der Mausezeigerposition ===&lt;br /&gt;
&lt;br /&gt;
=== Klicken auf ein Objekt ===&lt;br /&gt;
&lt;br /&gt;
== Touch Input ==&lt;br /&gt;
&lt;br /&gt;
== Netzwerk Input ==&lt;br /&gt;
Auch durch Interaktionen von anderen Computern aus können in einem Unity Programm Dinge passieren. Eine genauere Beschreibung möglicher Netzwerkinteraktion steht auf der [[OSC in Unity]] Seite.&lt;br /&gt;
&lt;br /&gt;
== Position und Rotation des Devices ==&lt;br /&gt;
=== Position via GPS ===&lt;br /&gt;
=== Rotation via Gyroskop ===&lt;br /&gt;
=== Position und Rotation via ARCore ===&lt;br /&gt;
&lt;br /&gt;
== UI Interaktion ==&lt;br /&gt;
Die Interaktion durch sogenannte UI Elemente in Unity ist stärker strukturiert als die oben angegebenen Beispiele und bedarf einer längeren Kontextualisierung. Mehr Informationen zu UI Elementen gibt es auf der [[UI in Unity]] Seite.&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=Unity&amp;diff=2017</id>
		<title>Unity</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=Unity&amp;diff=2017"/>
		<updated>2021-04-21T17:02:06Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* Begriffe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Was ist Unity?==&lt;br /&gt;
Unity ist ein Programm, mit dessen Hilfe man eigene interaktive Applikationen und Visualisierungen herstellen kann. In Unity können wir eigene virtuelle Räume mit Hilfe des Unity Editors gestalten und mit eigenen Scripten, die in der Programmiersprache C# geschrieben werden, eigene Interaktionen in diesen Räumen festlegen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unity wird oft auch als Game-Engine beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Für welche Geräte kann ich Unity nutzen?==&lt;br /&gt;
Wir benutzen den Unity Editor unter Windows 10, er läuft aber auch unter Mac OS.&amp;lt;br&amp;gt;&lt;br /&gt;
Im Unterricht nutzen wir den Unity Editor um Programme zu gestalten, die auf Windows, Mac OS, Android und WebGL laufen können. Man kann Unity zwar dafür verwenden, Programme für iOS zu gestalten, unser Studiengang deckt diese prozesse allerdings nicht ab.&lt;br /&gt;
&lt;br /&gt;
==Welche Version von Unity nutzen wir?==&lt;br /&gt;
Wir verwenden für die Verwaltung unserer Projekte und Unity Versionen das programm '''Unity Hub'''. Damit ist es möglich, mehrere Versionen von Unity gleichzeitig installiert zu haben und jedes Projekt mit unterschiedlichen Versionen des Unity Editors zu bearbeiten.&lt;br /&gt;
Die momentan im Unterricht genutzten Versionen von Unity sind '''2020.3.x''' und '''2019.4.x'''. &lt;br /&gt;
Innerhalb der Stelle hinter dem zweiten Punkt in der Versionsnummer von Unity sollten Updates des Unity Editors für gewöhnlich kein Problem sein. Projekte die in 2019.4.12 angefangen wurden sollten problemlos unter 2019.4.18 laufen. Es empfiehlt sich nicht, alte Projekte mit grösseren Versionsunterschieden in neueren Versionen von Unity zu öffnen.&lt;br /&gt;
&lt;br /&gt;
==Terminologie im Unity Editor==&lt;br /&gt;
[[Datei:Unity_Interface.jpg|1024px]]&lt;br /&gt;
&lt;br /&gt;
==Begriffe==&lt;br /&gt;
* '''Projekt''' - ein Ordner auf dem Computer in dem sich eine ganze Reihe weiterer Ordner befinden. Es gibt nicht eine einzelne Projektdatei, sondern eine ganze Struktur an Dateien und Ordnern aus denen der Unity Editor das Projekt erstellt und manipulierbar macht. Deswegen lohnt es sich, Unity Projekte über den Unity Hub zu verwalten. Der Ablageort eines Projektes auf der Festplatte kann sich verschieben, solange die in ihm enthaltene Verzeichnisstruktur gewahrt bleibt.&lt;br /&gt;
* '''Szene''' - eine Datei im Asset Folder von Unity, in der eine bestimmte Konfiguration von GameObjects und Verknüpfungen zwischen ihnen gespeichert ist.&lt;br /&gt;
* '''GameObject''' - ein GameObject ist eine Datenstruktur innerhalb einer Szene in Unity. Alle GameObjects, unabhängig davon ob sie eine visuelle Repräsentation haben, sind in der Hierarchy ausgeführt. Scripte können für gewöhnlich nur ausgeführt werden, wenn sie als Component eines gameObjects in der Szene vorhanden sind.&lt;br /&gt;
* '''Script''' - unter einem Script verstehen wir eine mit Visual Studio in C# geschriebene Datei, die wir im Editor als Component auf GameObjects legen können, damit das Script ausgeführt wird. Scripts können auf mehrere GameObjects gleichzeitig gelegt werden, oder auch mehrmals auf dasselbe GameObject und laufen als eigenständige Instanzen jeweils so oft, wie sie in der Szene vorkommen.&lt;br /&gt;
* '''Component''' - ein Script als Teil eines GameObjects, dessen Variablen ich sowohl über den Inspector im Unity Editor, als auch über ein eigenes Script verändern kann.&lt;br /&gt;
* '''Asset Folder''' - ein Ordner in der Unity Projektstruktur, in dem alle für das Projekt benötigten Dateien abgelegt werden. Unity scannt diesen Ordner jedesmal, wenn der Unity-Editor in Windows in den Focus tritt und importiert sämtliche im Ordner befindlichen Dateien automatisch in das Projekt.&lt;br /&gt;
* '''Build''' - ein unabhängig vom Editor ausführbares programm erstellen nennt man auch einen Build machen. Da Unity sämtliche Dateien im Asset-Folder direkt ins Projekt importieren möchte, empfiehlt es sich, diese von Unity erstellten Dateien in einem eigenen Ordner ausserhalb des Asset-Folders aber innerhalb des Projektordners zu speichern.&lt;br /&gt;
&lt;br /&gt;
==Eingabe und Ausgabe in Unity==&lt;br /&gt;
Interaktion in Unity Projekten entsteht erst, wenn die Eingabe von Nutzer*innen mit Veränderungen in der Gestaltung der Unity Szene verknüpft wird.&lt;br /&gt;
&lt;br /&gt;
== Konzepte und Tutorials ==&lt;br /&gt;
* [[Algorithms#Unity|Basic Algorithms]]&lt;br /&gt;
* [[Moving_Objects_in_Unity|Moving Objects in Unity]]&lt;br /&gt;
* [[UI in Unity]]&lt;br /&gt;
* [[OSC_in_Unity| OSC in Unity]]&lt;br /&gt;
* [[Raycasts]] in Unity&lt;br /&gt;
&lt;br /&gt;
== Pages related to Unity that need Context and/or Love ==&lt;br /&gt;
* [[Mqtt_to_Unity_via_shiftr.io| MQTT, Unity and shiftr.io]]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=Unity&amp;diff=2016</id>
		<title>Unity</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=Unity&amp;diff=2016"/>
		<updated>2021-04-21T17:01:56Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* Begriffe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Was ist Unity?==&lt;br /&gt;
Unity ist ein Programm, mit dessen Hilfe man eigene interaktive Applikationen und Visualisierungen herstellen kann. In Unity können wir eigene virtuelle Räume mit Hilfe des Unity Editors gestalten und mit eigenen Scripten, die in der Programmiersprache C# geschrieben werden, eigene Interaktionen in diesen Räumen festlegen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unity wird oft auch als Game-Engine beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Für welche Geräte kann ich Unity nutzen?==&lt;br /&gt;
Wir benutzen den Unity Editor unter Windows 10, er läuft aber auch unter Mac OS.&amp;lt;br&amp;gt;&lt;br /&gt;
Im Unterricht nutzen wir den Unity Editor um Programme zu gestalten, die auf Windows, Mac OS, Android und WebGL laufen können. Man kann Unity zwar dafür verwenden, Programme für iOS zu gestalten, unser Studiengang deckt diese prozesse allerdings nicht ab.&lt;br /&gt;
&lt;br /&gt;
==Welche Version von Unity nutzen wir?==&lt;br /&gt;
Wir verwenden für die Verwaltung unserer Projekte und Unity Versionen das programm '''Unity Hub'''. Damit ist es möglich, mehrere Versionen von Unity gleichzeitig installiert zu haben und jedes Projekt mit unterschiedlichen Versionen des Unity Editors zu bearbeiten.&lt;br /&gt;
Die momentan im Unterricht genutzten Versionen von Unity sind '''2020.3.x''' und '''2019.4.x'''. &lt;br /&gt;
Innerhalb der Stelle hinter dem zweiten Punkt in der Versionsnummer von Unity sollten Updates des Unity Editors für gewöhnlich kein Problem sein. Projekte die in 2019.4.12 angefangen wurden sollten problemlos unter 2019.4.18 laufen. Es empfiehlt sich nicht, alte Projekte mit grösseren Versionsunterschieden in neueren Versionen von Unity zu öffnen.&lt;br /&gt;
&lt;br /&gt;
==Terminologie im Unity Editor==&lt;br /&gt;
[[Datei:Unity_Interface.jpg|1024px]]&lt;br /&gt;
&lt;br /&gt;
==Begriffe==&lt;br /&gt;
* '''Projekt''' - ein Ordner auf dem Computer in dem sich eine ganze Reihe weiterer Ordner befinden. Es gibt nicht eine einzelne Projektdatei, sondern eine ganze Struktur an Dateien und Ordnern aus denen der Unity Editor das Projekt erstellt und manipulierbar macht. Deswegen lohnt es sich, Unity Projekte über den Unity Hub zu verwalten. Der Ablageort eines Projektes auf der Festplatte kann sich verschieben, solange die in ihm enthaltene Verzeichnisstruktur gewahrt bleibt.&lt;br /&gt;
* '''Szene''' - eine Datei im Asset Folder von Unity, in der eine bestimmte Konfiguration von GameObjects und Verknüpfungen zwischen ihnen gespeichert ist.&lt;br /&gt;
* '''GameObject''' - ein GameObject ist eine Datenstruktur innerhalb einer Szene in Unity. Alle GameObjects, unabhängig davon ob sie eine visuelle Repräsentation haben, sind in der Hierarchy ausgeführt. Scripte können für gewöhnlich nur ausgeführt werden, wenn sie als Component eines gameObjects in der Szene vorhanden sind.&lt;br /&gt;
* '''Script''' - unter einem Script verstehen wir eine mit Visual Studio in C# geschriebene Datei, die wir im Editor als Component auf GameObjects legen können, damit das Script ausgeführt wird. Scripts können auf mehrere GameObjects gleichzeitig gelegt werden, oder auch mehrmals auf dasselbe GameObject und laufen als eigenständige Instanzen jeweils so oft, wie sie in der Szene vorkommen.&lt;br /&gt;
* '''Component''' - ein Script als Teil eines GameObjects, dessen Variablen ich sowohl über den Inspector im Unity Editor, als auch über ein eigenes Script verändern kann.&lt;br /&gt;
* '''Asset Folder''' - ein Ordner in der Unity Projektstruktur, in dem alle für das Projekt benötigten Dateien abgelegt werden. Unity scannt diesen Ordner jedesmal, wenn der Unity-Editor in Windows in den Focus tritt und importiert sämtliche im Ordner befindlichen Dateien automatisch in das Projekt.&lt;br /&gt;
* Build - ein unabhängig vom Editor ausführbares programm erstellen nennt man auch einen Build machen. Da Unity sämtliche Dateien im Asset-Folder direkt ins Projekt importieren möchte, empfiehlt es sich, diese von Unity erstellten Dateien in einem eigenen Ordner ausserhalb des Asset-Folders aber innerhalb des Projektordners zu speichern.&lt;br /&gt;
&lt;br /&gt;
==Eingabe und Ausgabe in Unity==&lt;br /&gt;
Interaktion in Unity Projekten entsteht erst, wenn die Eingabe von Nutzer*innen mit Veränderungen in der Gestaltung der Unity Szene verknüpft wird.&lt;br /&gt;
&lt;br /&gt;
== Konzepte und Tutorials ==&lt;br /&gt;
* [[Algorithms#Unity|Basic Algorithms]]&lt;br /&gt;
* [[Moving_Objects_in_Unity|Moving Objects in Unity]]&lt;br /&gt;
* [[UI in Unity]]&lt;br /&gt;
* [[OSC_in_Unity| OSC in Unity]]&lt;br /&gt;
* [[Raycasts]] in Unity&lt;br /&gt;
&lt;br /&gt;
== Pages related to Unity that need Context and/or Love ==&lt;br /&gt;
* [[Mqtt_to_Unity_via_shiftr.io| MQTT, Unity and shiftr.io]]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=Unity&amp;diff=2015</id>
		<title>Unity</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=Unity&amp;diff=2015"/>
		<updated>2021-04-21T17:01:47Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* Begriffe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Was ist Unity?==&lt;br /&gt;
Unity ist ein Programm, mit dessen Hilfe man eigene interaktive Applikationen und Visualisierungen herstellen kann. In Unity können wir eigene virtuelle Räume mit Hilfe des Unity Editors gestalten und mit eigenen Scripten, die in der Programmiersprache C# geschrieben werden, eigene Interaktionen in diesen Räumen festlegen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unity wird oft auch als Game-Engine beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Für welche Geräte kann ich Unity nutzen?==&lt;br /&gt;
Wir benutzen den Unity Editor unter Windows 10, er läuft aber auch unter Mac OS.&amp;lt;br&amp;gt;&lt;br /&gt;
Im Unterricht nutzen wir den Unity Editor um Programme zu gestalten, die auf Windows, Mac OS, Android und WebGL laufen können. Man kann Unity zwar dafür verwenden, Programme für iOS zu gestalten, unser Studiengang deckt diese prozesse allerdings nicht ab.&lt;br /&gt;
&lt;br /&gt;
==Welche Version von Unity nutzen wir?==&lt;br /&gt;
Wir verwenden für die Verwaltung unserer Projekte und Unity Versionen das programm '''Unity Hub'''. Damit ist es möglich, mehrere Versionen von Unity gleichzeitig installiert zu haben und jedes Projekt mit unterschiedlichen Versionen des Unity Editors zu bearbeiten.&lt;br /&gt;
Die momentan im Unterricht genutzten Versionen von Unity sind '''2020.3.x''' und '''2019.4.x'''. &lt;br /&gt;
Innerhalb der Stelle hinter dem zweiten Punkt in der Versionsnummer von Unity sollten Updates des Unity Editors für gewöhnlich kein Problem sein. Projekte die in 2019.4.12 angefangen wurden sollten problemlos unter 2019.4.18 laufen. Es empfiehlt sich nicht, alte Projekte mit grösseren Versionsunterschieden in neueren Versionen von Unity zu öffnen.&lt;br /&gt;
&lt;br /&gt;
==Terminologie im Unity Editor==&lt;br /&gt;
[[Datei:Unity_Interface.jpg|1024px]]&lt;br /&gt;
&lt;br /&gt;
==Begriffe==&lt;br /&gt;
* '''Projekt''' - ein Ordner auf dem Computer in dem sich eine ganze Reihe weiterer Ordner befinden. Es gibt nicht eine einzelne Projektdatei, sondern eine ganze Struktur an Dateien und Ordnern aus denen der Unity Editor das Projekt erstellt und manipulierbar macht. Deswegen lohnt es sich, Unity Projekte über den Unity Hub zu verwalten. Der Ablageort eines Projektes auf der Festplatte kann sich verschieben, solange die in ihm enthaltene Verzeichnisstruktur gewahrt bleibt.&lt;br /&gt;
* '''Szene''' - eine Datei im Asset Folder von Unity, in der eine bestimmte Konfiguration von GameObjects und Verknüpfungen zwischen ihnen gespeichert ist.&lt;br /&gt;
* '''GameObject''' - ein GameObject ist eine Datenstruktur innerhalb einer Szene in Unity. Alle GameObjects, unabhängig davon ob sie eine visuelle Repräsentation haben, sind in der Hierarchy ausgeführt. Scripte können für gewöhnlich nur ausgeführt werden, wenn sie als Component eines gameObjects in der Szene vorhanden sind.&lt;br /&gt;
* Script - unter einem Script verstehen wir eine mit Visual Studio in C# geschriebene Datei, die wir im Editor als Component auf GameObjects legen können, damit das Script ausgeführt wird. Scripts können auf mehrere GameObjects gleichzeitig gelegt werden, oder auch mehrmals auf dasselbe GameObject und laufen als eigenständige Instanzen jeweils so oft, wie sie in der Szene vorkommen.&lt;br /&gt;
* '''Component''' - ein Script als Teil eines GameObjects, dessen Variablen ich sowohl über den Inspector im Unity Editor, als auch über ein eigenes Script verändern kann.&lt;br /&gt;
* '''Asset Folder''' - ein Ordner in der Unity Projektstruktur, in dem alle für das Projekt benötigten Dateien abgelegt werden. Unity scannt diesen Ordner jedesmal, wenn der Unity-Editor in Windows in den Focus tritt und importiert sämtliche im Ordner befindlichen Dateien automatisch in das Projekt.&lt;br /&gt;
* Build - ein unabhängig vom Editor ausführbares programm erstellen nennt man auch einen Build machen. Da Unity sämtliche Dateien im Asset-Folder direkt ins Projekt importieren möchte, empfiehlt es sich, diese von Unity erstellten Dateien in einem eigenen Ordner ausserhalb des Asset-Folders aber innerhalb des Projektordners zu speichern.&lt;br /&gt;
&lt;br /&gt;
==Eingabe und Ausgabe in Unity==&lt;br /&gt;
Interaktion in Unity Projekten entsteht erst, wenn die Eingabe von Nutzer*innen mit Veränderungen in der Gestaltung der Unity Szene verknüpft wird.&lt;br /&gt;
&lt;br /&gt;
== Konzepte und Tutorials ==&lt;br /&gt;
* [[Algorithms#Unity|Basic Algorithms]]&lt;br /&gt;
* [[Moving_Objects_in_Unity|Moving Objects in Unity]]&lt;br /&gt;
* [[UI in Unity]]&lt;br /&gt;
* [[OSC_in_Unity| OSC in Unity]]&lt;br /&gt;
* [[Raycasts]] in Unity&lt;br /&gt;
&lt;br /&gt;
== Pages related to Unity that need Context and/or Love ==&lt;br /&gt;
* [[Mqtt_to_Unity_via_shiftr.io| MQTT, Unity and shiftr.io]]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=Unity&amp;diff=2014</id>
		<title>Unity</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=Unity&amp;diff=2014"/>
		<updated>2021-04-21T16:59:06Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* Terminologie im Unity Editor */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Was ist Unity?==&lt;br /&gt;
Unity ist ein Programm, mit dessen Hilfe man eigene interaktive Applikationen und Visualisierungen herstellen kann. In Unity können wir eigene virtuelle Räume mit Hilfe des Unity Editors gestalten und mit eigenen Scripten, die in der Programmiersprache C# geschrieben werden, eigene Interaktionen in diesen Räumen festlegen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unity wird oft auch als Game-Engine beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Für welche Geräte kann ich Unity nutzen?==&lt;br /&gt;
Wir benutzen den Unity Editor unter Windows 10, er läuft aber auch unter Mac OS.&amp;lt;br&amp;gt;&lt;br /&gt;
Im Unterricht nutzen wir den Unity Editor um Programme zu gestalten, die auf Windows, Mac OS, Android und WebGL laufen können. Man kann Unity zwar dafür verwenden, Programme für iOS zu gestalten, unser Studiengang deckt diese prozesse allerdings nicht ab.&lt;br /&gt;
&lt;br /&gt;
==Welche Version von Unity nutzen wir?==&lt;br /&gt;
Wir verwenden für die Verwaltung unserer Projekte und Unity Versionen das programm '''Unity Hub'''. Damit ist es möglich, mehrere Versionen von Unity gleichzeitig installiert zu haben und jedes Projekt mit unterschiedlichen Versionen des Unity Editors zu bearbeiten.&lt;br /&gt;
Die momentan im Unterricht genutzten Versionen von Unity sind '''2020.3.x''' und '''2019.4.x'''. &lt;br /&gt;
Innerhalb der Stelle hinter dem zweiten Punkt in der Versionsnummer von Unity sollten Updates des Unity Editors für gewöhnlich kein Problem sein. Projekte die in 2019.4.12 angefangen wurden sollten problemlos unter 2019.4.18 laufen. Es empfiehlt sich nicht, alte Projekte mit grösseren Versionsunterschieden in neueren Versionen von Unity zu öffnen.&lt;br /&gt;
&lt;br /&gt;
==Terminologie im Unity Editor==&lt;br /&gt;
[[Datei:Unity_Interface.jpg|1024px]]&lt;br /&gt;
&lt;br /&gt;
==Begriffe==&lt;br /&gt;
* Projekt - ein Ordner auf dem Computer in dem sich eine ganze Reihe weiterer Ordner befinden. Es gibt nicht eine einzelne Projektdatei, sondern eine ganze Struktur an Dateien und Ordnern aus denen der Unity Editor das Projekt erstellt und manipulierbar macht. Deswegen lohnt es sich, Unity Projekte über den Unity Hub zu verwalten. Der Ablageort eines Projektes auf der Festplatte kann sich verschieben, solange die in ihm enthaltene Verzeichnisstruktur gewahrt bleibt.&lt;br /&gt;
* Szene - eine Datei im Asset Folder von Unity, in der eine bestimmte Konfiguration von GameObjects und Verknüpfungen zwischen ihnen gespeichert ist.&lt;br /&gt;
* GameObject - ein GameObject ist eine Datenstruktur innerhalb einer Szene in Unity. Alle GameObjects, unabhängig davon ob sie eine visuelle Repräsentation haben, sind in der Hierarchy ausgeführt. Scripte können für gewöhnlich nur ausgeführt werden, wenn sie als Component eines gameObjects in der Szene vorhanden sind.&lt;br /&gt;
* Component - ein Script als Teil eines GameObjects, dessen Variablen ich sowohl über den Inspector im Unity Editor, als auch über ein eigenes Script verändern kann.&lt;br /&gt;
* Asset Folder - ein Ordner in der Unity Projektstruktur, in dem alle für das Projekt benötigten Dateien abgelegt werden. Unity scannt diesen Ordner jedesmal, wenn der Unity-Editor in Windows in den Focus tritt und importiert sämtliche im Ordner befindlichen Dateien automatisch in das Projekt.&lt;br /&gt;
* Build - ein unabhängig vom Editor ausführbares programm erstellen nennt man auch einen Build machen. Da Unity sämtliche Dateien im Asset-Folder direkt ins Projekt importieren möchte, empfiehlt es sich, diese von Unity erstellten Dateien in einem eigenen Ordner ausserhalb des Asset-Folders aber innerhalb des Projektordners zu speichern.&lt;br /&gt;
&lt;br /&gt;
==Eingabe und Ausgabe in Unity==&lt;br /&gt;
Interaktion in Unity Projekten entsteht erst, wenn die Eingabe von Nutzer*innen mit Veränderungen in der Gestaltung der Unity Szene verknüpft wird.&lt;br /&gt;
&lt;br /&gt;
== Konzepte und Tutorials ==&lt;br /&gt;
* [[Algorithms#Unity|Basic Algorithms]]&lt;br /&gt;
* [[Moving_Objects_in_Unity|Moving Objects in Unity]]&lt;br /&gt;
* [[UI in Unity]]&lt;br /&gt;
* [[OSC_in_Unity| OSC in Unity]]&lt;br /&gt;
* [[Raycasts]] in Unity&lt;br /&gt;
&lt;br /&gt;
== Pages related to Unity that need Context and/or Love ==&lt;br /&gt;
* [[Mqtt_to_Unity_via_shiftr.io| MQTT, Unity and shiftr.io]]&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=Input_in_Unity&amp;diff=2013</id>
		<title>Input in Unity</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=Input_in_Unity&amp;diff=2013"/>
		<updated>2021-04-21T16:42:03Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* Keyboard Input */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Interagieren in Unity =&lt;br /&gt;
Um den Nutzer*innen in den von uns gestalteten Unity Programmen die Möglichkeit zu geben zu interagieren, sollen hier einige generelle Interaktionsmodi aufgelistet und erklärt werden.&lt;br /&gt;
&lt;br /&gt;
== Keyboard Input ==&lt;br /&gt;
Um in einem Unity Script abzufragen, ob eine bestimmte Taste auf dem Keyboard gedrückt wurde, nutzen wir die Input Klasse. Unity Dokumentation [https://docs.unity3d.com/ScriptReference/Input.html| hier].&lt;br /&gt;
In Code verwenden wir folgende Abfrage meist in unserer Update() Funktion, da diese Funktion in jedem Frame aufgerufen wird, und wir den Zustand des Keyboards nicht versehentlich verpassen wollen:&lt;br /&gt;
&lt;br /&gt;
 if (Input.GetKeyUp(KeyCode.Y)){&lt;br /&gt;
 &lt;br /&gt;
    //do something when the key y has been released&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Mouse Input ==&lt;br /&gt;
=== Abfrage der Mausezeigerposition ===&lt;br /&gt;
&lt;br /&gt;
=== Klicken auf ein Objekt ===&lt;br /&gt;
&lt;br /&gt;
== Touch Input ==&lt;br /&gt;
&lt;br /&gt;
== Netzwerk Input ==&lt;br /&gt;
Auch durch Interaktionen von anderen Computern aus können in einem Unity Programm Dinge passieren. Eine genauere Beschreibung möglicher Netzwerkinteraktion steht auf der [[OSC in Unity]] Seite.&lt;br /&gt;
&lt;br /&gt;
== Position und Rotation des Devices ==&lt;br /&gt;
=== Position via GPS ===&lt;br /&gt;
=== Rotation via Gyroskop ===&lt;br /&gt;
=== Position und Rotation via ARCore ===&lt;br /&gt;
&lt;br /&gt;
== UI Interaktion ==&lt;br /&gt;
Die Interaktion durch sogenannte UI Elemente in Unity ist stärker strukturiert als die oben angegebenen Beispiele und bedarf einer längeren Kontextualisierung. Mehr Informationen zu UI Elementen gibt es auf der [[UI in Unity]] Seite.&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=Raycasts&amp;diff=2012</id>
		<title>Raycasts</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=Raycasts&amp;diff=2012"/>
		<updated>2021-04-21T16:37:29Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Raycasts dienen dazu, eine unsichtbare Linie(ray) von einem bestimmten Punkt auf dem Bildschirm in die virtuelle Welt zu projezieren (cast). Sie sind notwendig um in Code herauszufinden, ob jemand auf ein Objekt in der 3D Welt geklickt hat. In VR sind sie nützlich, um den Kopfbewegungen der Benutzerin zu folgen. &lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele &amp;amp; Tutorials == &lt;br /&gt;
Anwendung und Tutorial von Raycasts zum Auswählen von Objekten[https://www.youtube.com/watch?v=_yf5vzZ2sYE]&lt;br /&gt;
&lt;br /&gt;
Anwendung und Tutorial von Raycasts für Shooter[https://www.youtube.com/watch?v=THnivyG0Mvo]&lt;br /&gt;
&lt;br /&gt;
Für das Spiel [[Be Bernd]] wurden Raycasts benutzt, um in der VR Objekte auszuwählen und interagierbar zu machen.&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot; line start=&amp;quot;2&amp;quot; highlight=&amp;quot;4-6&amp;quot;&amp;gt;&lt;br /&gt;
// Dies ist der Code, um einen Raycast in die AR zu bringen und zu testen, ob er ein Game Object trifft&lt;br /&gt;
using System.Collections;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using UnityEngine;&lt;br /&gt;
using UnityEngine.UI;&lt;br /&gt;
//Bis hierhin werden die libraries, auf die Unity zurückgreift, benannt&lt;br /&gt;
public class hit : MonoBehaviour&lt;br /&gt;
//Der Name des Scripts ist hit, daher das hit hinter public class.&lt;br /&gt;
    public Text textDebug ;&lt;br /&gt;
    public Gameobject rayTest;&lt;br /&gt;
&lt;br /&gt;
// Weil Testing in AR schwierig ist und jedes Mal einen neuen Build erfordert, wird hier ein Debug Textfeld angelegt, das im Editor noch verknüpft werden muss&lt;br /&gt;
    // Update is called once per frame&lt;br /&gt;
    void Update()&lt;br /&gt;
    { if (Input.touchCount &amp;gt;0)&lt;br /&gt;
// .touchCount ist die genaueste Methode, um die folgende Funktionen abzurufen, da es auf jede zusätzliche Berührung reagiert. &lt;br /&gt;
        { textDebug.text = &amp;quot;TOUCHED&amp;quot;;&lt;br /&gt;
// Debugging in &lt;br /&gt;
            PerformRaycast();&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            textDebug.text = &amp;quot;NO TOUCH&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        if (Input.touchCount &amp;gt;0 &amp;amp;&amp;amp; Input.GetTouch(0).phase==TouchPhase.Began)&lt;br /&gt;
//Input.GetTouch(0).phase==TouchPhase.Began veranlasst einen einen neuen Raycast bei jeder neuen Berührung. &lt;br /&gt;
        {&lt;br /&gt;
            textDebug.text = &amp;quot;RAYCAST&amp;quot;;&lt;br /&gt;
            PerformRaycast();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    void PerformRaycast()&lt;br /&gt;
    {&lt;br /&gt;
        Vector3 ray = playerCamera.ScreenToWorldPoint(Input.GetTouch(0).position);&lt;br /&gt;
// Hiermit wird ein Vektor3 Variable erstellt, welche den berührten Punkt auf dem Tablet in die physische Welt überträgt. &lt;br /&gt;
        Ray myRay = playerCamera.ScreenPointToRay(Input.GetTouch(0).position);&lt;br /&gt;
//Erstellt einen Rayast vom berühreten Screenpunkt aus&lt;br /&gt;
        RaycastHit hit;&lt;br /&gt;
// Wird ein Objekt vom Raycast berührt, wird ein RaycastHit Object hit erstellt&lt;br /&gt;
        &lt;br /&gt;
        touchedObjectText.text = ray.ToString();&lt;br /&gt;
// Der Name des gehitteten Objects wird in einen String verwandelt&lt;br /&gt;
        &lt;br /&gt;
        rayTest.transform.position = myRay.origin;&lt;br /&gt;
        rayTest.transform.LookAt(myRay.direction);&lt;br /&gt;
//Hier wird ein Testobjekt erstellt, dass dem gesetzten Raycast entspricht- also eine Krücke, um zu sehen, wo der nicht sichtbare Raycast ist&lt;br /&gt;
&lt;br /&gt;
        if (Physics.Raycast(myRay.origin, myRay.direction, out hit, Mathf.Infinity))&lt;br /&gt;
// Hier handelt es sich um einen boolean, der true ist, wenn er ein Game Object hittet. Weitere Details: [https://docs.unity3d.com/ScriptReference/Physics.Raycast.html]&lt;br /&gt;
        {&lt;br /&gt;
            touchedObjectText.text = &amp;quot;HIT!&amp;quot;;&lt;br /&gt;
            Debug.DrawRay(ray, transform.TransformDirection(Vector3.forward) * hit.distance, Color.yellow);&lt;br /&gt;
            hitGameObject = hit.collider.gameObject;&lt;br /&gt;
            touchedObjectText.text =hitGameObject.name.ToString();    &lt;br /&gt;
        }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=UI_in_Unity&amp;diff=2011</id>
		<title>UI in Unity</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=UI_in_Unity&amp;diff=2011"/>
		<updated>2021-04-21T16:33:41Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* Übungen zu UI und Unity */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= UI =&lt;br /&gt;
'''UI''' steht generell als Kurzform von '''User Interface'''. Im Kontext von Unity bezeichnet der Begriff '''UI''' allerdings eine von Unity spezifisch vorgegebene Interaktionsstruktur, die mit Buttons, Textfeldern und ähnlichem arbeitet, und sich im Code von den [[Interaction in Unity| meisten anderen Interaktionen unterscheidet]].&lt;br /&gt;
Der Hauptunterschied besteht im von Unity vorgegebenen Interaktionsmodus durch UI Elemente und die Unterschiede in der Art der Darstellung auf dem Bildschirm.&lt;br /&gt;
&lt;br /&gt;
== UI Elemente hinzufügen ==&lt;br /&gt;
Unity UI Elemente sind GameObjects die man in der Hierarchy über den Unterpunkt UI erstellen kann.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:create-ui-menu-unity.png | 400px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Es stehen eine Reihe von Elementen zur Auswahl. Wir werden uns auf dieser Seite hauptsächlich mit den Elementen Button (TextMeshPro) und Text (TextMeshpro) beschäftigen. &lt;br /&gt;
=== Kurze Erklärung zu TextMeshPro ===&lt;br /&gt;
Unity ist in den letzten zehn Jahren enorm schnell gewachsen und hat oft Code-Elemente, die von Menschen ausserhalb der Firma erstellt wurden über Zeit in den eigenen Code übernommen. TextMeshPro ist so ein Fall, in dem besserer Code zur Darstellung von texten in unity eingeflossen ist. Unity muss allerdings nun den von ihnen selbst erstellten sowie den zugekauften Code weiter anbieten, was dazu führt, dass man als Nutzer*in die Auswahl aht, für welche dier beiden zur Verfügung gestellten Varianten man sich entscheiden möchte.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Wir wollen uns im Zweifel immer für TextMeshPro entscheiden''', da der Text schöner dargestellt wird.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn ihr das erste Mal aus der Hierarchy ein GameObject mit dem Zusatz (TextMeshPro) erstellt, ploppt folgender Dialog auf, bei dem ihr auf beide Knöpfe klicken könnt:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:tmp-import.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Das Canvas Konzept ===&lt;br /&gt;
Alle in Unity genutzten UI Elemente werden einem sogenannten '''Canvas''' Objekt zugeordnet, einer Art Leinwand, die über der Szenen auf den Bildschirm gespannt ist. Wenn wir in der Hierarchy einen neuen Button erstellen, erstellt Unity auch gleich ein '''Canvas''' Object sowie ein '''EventSystem''' (über letzteres werde wir uns im Rahmen des Studiengangs nur peripher unterhalten).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-canvas-eventsystem-ui.png |400px]]&amp;lt;br&amp;gt;&lt;br /&gt;
UI Elemente werden relativ zu diesem Canvas positioniert und dargestellt (gerendert) und unterliegen dem Koordinatensystem, das durch den Canvas vorgegeben ist.  Für gewöhnlich sind sie daher '''unabhängig von der Position und Rotation der Kamera in der Szene''' immer am selben Ort auf dem Bildschirm. '''Deswegen müssen UI Elemente in der Hierarchy in Unity auch immer unter einem Canvas Objekt auftauchen.'''&amp;lt;br&amp;gt;&lt;br /&gt;
Das Koordinatensystem des Canvas Objekts wiederum orientiert sich an der [[Screen Resolution| Auflösung des Bildschirms]], wie in der Game View eingestellt.&amp;lt;br&amp;gt; &lt;br /&gt;
[[Datei:unity-gameview-resolution.png| 600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Da man sich der Auflösung der Endgeräte zu Beginn eines Projektes nicht immer sicher sein kann, und Unity von sich aus vorsieht, dass die Nutzer*innen ihre Auflösung auch selbst einstellen können (kommt bei uns seltener vor), bietet uns Unity durch die Nutzung des Canvas Konzeptes an, dass wir verschiedene UI Elemente '''relativ zu den Ecken des Bildschirms''' positionieren können. Hierfür ändert Unity den uns bekannten [https://docs.unity3d.com/ScriptReference/Transform.html| '''Transform'''] Component in ein [https://docs.unity3d.com/ScriptReference/RectTransform.html| '''RectTransform'''] Component (der allerdings von Transform abgeleitet ist, so dass wir per Script weiterhin wie gewohnt auf transform.position zugreifen können):&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:recttransform.png|400px]]&amp;lt;br&amp;gt;&lt;br /&gt;
=== Unterschiede in Koordinaten ===&lt;br /&gt;
Wie ihr gut erkennen könnt, sind die Zahlen, die in diesem Component die Position des GameObjects beschreiben deutlich anders, als die von uns bisher genutzten. Während wir bei unseren bisherigen Übungen für gewöhnlich Koordinaten zwischen 1 und 10 oder -1 und -10 für die x, y und z Werte genutzt haben, stehen hier plötzlich zahlen in der Grösse von 100 und 1000. Das hat damit zu tun, dass die Koordinaten bei Rect Transform als Bildschirmkoordinaten interpretiert werden, wobei eine Koordinate von 1 genau einen Pixel beschreibt. Zum Vergleich: in unserer Unity Szene beschreibt eine Koordinate von 1 für gewöhnlich die Distanz von einem Meter.&amp;lt;br&amp;gt;&lt;br /&gt;
=== Darstellung in Scene View und Game View ===&lt;br /&gt;
Wenn wir zwischen der Unity Scene View und der Game View hin und her schalten, stellen wir fest, dass unser Button in der Game View zwar an einem sinnvollen Punkt dargestellt wird, in unserer Scene View Allerdings nichts von ihm zu sehen ist. Stattdessen sehen wir eine seltsame Linie mit Ecke:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:ui-scene-vs-gameview.png|800px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Der Grund dafür ist, dass die Unity Scene View immer alle Dinge in Unity Koordinaten darstellt (1 Unity Koordinate interpretieren wir für gewöhnlich als 1 Meter), wohingegen in der Game View die Besonderheiten des Canvas-Konzeptes bereits in Betracht gezogen werden, und die UI Elemente unabhängig von der Kamera auf dem Bildschirm platziert werden.&amp;lt;br&amp;gt;&lt;br /&gt;
'''UI Elemente sind also am Einfachsten in der Game View sichtbar und es empfiehlt sich, ihre positionierung auch dort zu überprüfen.'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Trotzdem können UI Elemente auch in der Scene View angeschaut und manipuliert werden. Die oben angesprochene weisse Linie beschreibt den Umfang des Canvas Objektes in Unity 3D-Koordinaten. Im Canvas Objekt selbst könnt ihr unter ''width'' und ''height'' nachschauen, wie gross dieser Umfang ist. Wenn ihr gaaaaaaaanz weit herauszoomt, könnt ihr dann auch euren Button sehen. Eine einfachere Version, um eine übersicht über die UI Elemente in der Scene View zu bekommen ist, '''das Canvas GameObjekt doppelklicken'''.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-doubleclick-canvas.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Ihr könnt selbstverständlich wie gewohnt, auch UI Elemente in der Scene View anklicken und verschieben. Wichtig hierbei ist nur zu wissen, dass der Canvas diese Elemente nicht perspektivisch darstellt und sich an der Darstellung der UI Elemente somit auch bei Verschiebung in der Z-Achse nichts ändert.&lt;br /&gt;
&lt;br /&gt;
=== Relatives Ausrichten der UI Elemente ===&lt;br /&gt;
Durch klicken auf das Piktogramm links bei RectTransform können wir bestimmen, wie Unity die relative Position unseres UI Elements bestimmen soll:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-ui-anchors.png|400px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Gerade bewegt Unity unseren Button von der Mitte des Screens aus gesehen 687 Pixel nach links und 369.5 Pixel nach unten.&lt;br /&gt;
Mehr informationen hierzu findet ihr in der [https://docs.unity3d.com/Packages/com.unity.ugui@1.0/manual/UIBasicLayout.html| Unity Gebrauchsanweisung für UI Elemente].&lt;br /&gt;
&lt;br /&gt;
Nachdem wir einen '''Button (TextMeshPro)''' in Unity hinzugefügt haben, sollte unsere Szene ungefähr so aussehen:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:unity-scene-with-button.png|800px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Textfelder ==&lt;br /&gt;
Nicht immer werden UI Elemente dafür genutzt, dass sie manipuliert werden können. Oft sollen sie auch einfach nur etwas darstellen oder anzeigen. Ein Beispiel dafür ist '''Text (TextMeshPro)''':&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-ui-create-text-tmp.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Textfeld generiert genauso einen Canvas (falls noch keiner da ist) oder ordnet sich automatisch einem bestehenden Canvas unter (falls schon ein anderes UI Element in der Szene ist).&lt;br /&gt;
&lt;br /&gt;
=== Text in einem Textfeld per Script definieren ===&lt;br /&gt;
Der Unity Editor erlaubt euch, den Text den ihr im Textfeld seht direkt im Editor einzugeben. Für Nutzer*innen eures Programms ist der Text allerdings nicht editierbar. Jedoch könnt ihr den Text selbstverständlich per Script jederzeit ändern.&amp;lt;br&amp;gt;&lt;br /&gt;
Dafür erstellen wir hier als Beispiel ein neues Script, dass den Text in unserem neu generierten Textfeld verändert. Wir wollen es TextChange.cs nennen:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-new-script-textChange.png|400px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um von unserem Script aus auf das '''Text (TextMeshPro)''' GameObject zugreifen zu können und dort den angezeigten Text zu verändern, müssen wir eine Verbindung zu unserem Script in Form einer Variable schaffen. Dazu brauchen wir, [[Algorithms#Auf_eine_Variable_in_einem_anderen_Script_zugreifen| wie immer]], den Typ des Scripts auf das wir zugreifen wollen. Im Falle eines '''Text (TextMeshPro)''' stellt sich der Typ allerdings als etwas komplizierter dar, weil es Text in Unity in unterschiedlichen Formen gibt: einmal für UI und einmal für die 3D Repräsentation in unserer Szene! Indiesem Fall wollen wir auf die UI-Version des Typs Text (TextMeshPro) zugreifen. Der Typ unseres Textfeldes ist in diesem Fall TextMeshProUGUI (UGUI steht kurz für Unity Graphical User Interface). Damit wir direkt Zugriff auf diesen Typ bekommen, sollten wir die Library TMPro in unserem Script mit laden. Das sieht dann so aus:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:visual-studio-using-tmpro.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wir können nun im Unity Editor unser Script in ein neues, leeres GameObject ziehen, das wir TextManipulation nennen können:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-ui-textmanipulation-gameobject.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Und dort dann die Verbindung mit unserem Text(TMP) GameObject und dem zugehörigen TextMeshProUGUI Component herstellen:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-ui-connect Text-tmp-to-textmanipulation.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nun können wir in unserem TextChange.cs Script auf die Variable '''text'''in der verbundenen TextMeshProUGUI-Komponente zugreifen und sie verändern, in dem wir beispielsweise unsere Start Funktion folgendermassen umschreiben:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 void Start()&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
   meinTextFeld.text=&amp;quot;Hallo Welt!&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
oder in unserer Update Funktion folgendes Schreiben:&lt;br /&gt;
&lt;br /&gt;
 void Update()&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
   meinTextFeld.text+=&amp;quot;mi&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Einen Button abfragen ==&lt;br /&gt;
Prinzipiell erstellen wir in unseren Szenen Buttons als UI-Elemente, weil wir im Code darauf reagieren wollen, dass jemensch den Button geklickt hat. Hier hilft uns Unity durch bereits vorprogrammierte Strukturen, die es uns sehr einfach ermöglichen, eine Funktion aufzurufen, wenn ein bestimmter Button geklickt wurde.&lt;br /&gt;
&lt;br /&gt;
=== Beispielscript ===&lt;br /&gt;
Wir können also ein Beispielscript erstellen, nennen wir es KnopfGeklickt.cs (Grossschreibung bei neuen Scripten beachten!). Und diesem Script können wir eine einfache Funktion hinzufügen - in diesem Beispiel die Funktion ButtonWurdeGeklickt(), die uns in der Konsole etwas ausgibt:&lt;br /&gt;
 &lt;br /&gt;
 public void ButtonWurdeGeklickt(){&lt;br /&gt;
 &lt;br /&gt;
   Debug.Log(&amp;quot;Yay!&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Das '''public''' bei public void ist in diesem Fall sehr wichtig, da wir diese Funktion ausserhalb des eigenen GameObjects aufrufen wollen!&lt;br /&gt;
&lt;br /&gt;
=== Button mit Beispielscript verbinden ===&lt;br /&gt;
Nachdem wir unser Script als Component auf ein leeres Gameobject hinzugefügt haben, können wir daraufhin im Inspector den Button mit unserer Funktion direkt verbinden. Dazu fügen wir beim Button im Feld OnClick eine neue Verbindung zu unserer Funktion hinzu:&amp;lt;br&amp;gt;&lt;br /&gt;
Ausgangspunkt ist unsere Hierarchy mit unserem GameObject (ich habe es KlickKonsequenz genannt) und unserem neuen Script als Component:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-klickkonsequenz-setup.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
In Folgenden Schritten können wir die oben genannte Funktion in unserem Script ausführen lassen, wenn der Button gedrückt wurde:&lt;br /&gt;
* Neue Verbindung bei Button herstellen:&amp;lt;br&amp;gt; [[Datei:unity-btn-add-connection.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
* Unser GameObject zuweisen:&amp;lt;br&amp;gt; [[Datei:unity-btn-drag-gameobject-to-connect.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
* Unsere neu geschriebene Funktion auswählen:&amp;lt;br&amp;gt; [[Datei:unity-btn-select-function.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn alles funktioniert hat ist das Resultat in der Console ablesbar:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-btn-yay.png]]&lt;br /&gt;
&lt;br /&gt;
== Mehrere Buttons mit einem Script verbinden ==&lt;br /&gt;
Im Folgenden Beispiel wollen wir mit zwei Buttons arbeiten, und unser KnopfGeklickt.cs Script so erweitern, dass wir im Script unterscheiden können, welcher der beiden Knöpfe gedrückt wurde. Hierzu benutzen wir ein Kozpet, dass in Unity in diesem Kontext mit '''static paramaters''' bezeichnet wird.&lt;br /&gt;
&lt;br /&gt;
=== Hinzufügen eines Parameters in unsere Scriptfunktion ===&lt;br /&gt;
Wir ändern die Funktion in unserem Script, so dass wir einen Parameter unserer Wahl hinzufügen, und dadurch eine Entscheidung über unsere Ausgabe treffen können. Dieser Parameter wird später bei der Verbindung zu den Buttons mit einem Wert gefüllt, den wir im Inspector bei den jeweiligen Buttons einstellen können. Als Beispiel wähle ich hier einen '''int''' Parameter und nenne ihn &amp;quot;welcherButton&amp;quot;:&amp;lt;br&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
 public void ButtonWurdeGeklickt(int welcherButton)&lt;br /&gt;
 {&lt;br /&gt;
  &lt;br /&gt;
   if (welcherButton==1){&lt;br /&gt;
     Debug.Log(&amp;quot;Button 1 gedrückt!&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   if (welcherButton==2){&lt;br /&gt;
     Debug.Log(&amp;quot;Button 2 gedrückt!&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Damit ich zwischen zwei Buttons unterscheiden kann, brauche ich ja auch zwei Buttons. Ich habe dafür meinen ersten Button kopiert und leicht verschoben, dann beiden einen Namen gegeben, damit ich sie für mich besser unterscheiden kann. Meine Hierarchy sieht dementsprechend so aus:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-btn-two-btns.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Ich habe nun zwei Buttons, beide in der Hierarchy unter demselben Canvas GameObject, allerdings der Übersicht halber unterschiedlich benannt. Das sich mein Script geändert hat, muss ich die Funktion bei OnCLick wieder neu Verbinden.Beim Verbinden mit meiner abgeänderten Funktion entsteht nun ein neues Feld, in den ich manuell den Wert des Parameters eingeben kann, der an meine Funktion übergeben wird, wenn der Button gedrückt wird:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-btn-static-parameter.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese statischen Parameter müssen nun '''für jeden Button einzeln''' auf eine Zahl gesetzt werden, die ich dann im oben genannten Script abfragen kann. Für ''Button Eins'' setze ich die Zahl auf 1, für ''Button Zwei'' setze ich sie auf zwei. So kann ich mit einem einzelnen Script unterscheiden, welcher Knopf im User Interface gedrückt wurde.&lt;br /&gt;
&lt;br /&gt;
== Textfelder ==&lt;br /&gt;
Nachdem wir die Verbindung von UI Elementen mit unseren Scripten und den Umgang mit statischen parametern angeschaut haben, stellt sich nun die Frage: Was tun, wenn wir die Eingabe von Nutzer*innen in textfelder direkt in Code weiterverarbeiten wollen?&amp;lt;br&amp;gt;&lt;br /&gt;
Hierzu erstellen wir zunächst ein neues InputField (TextMeshPro) in unserer Hierarchy. Wir ihr sehen könnt wird es direkt dem bereits bestehenden Canvas GameObject in der Hierarchy untergeordnet:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-new-inputfield.png|400px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Dieses Inputfield hat nun mehrere Möglichkeiten, die Texteingabe von Nutzer*innen an den von uns geschriebenen Code weiterzuleiten:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-textinput-functionlist.png|400px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Die Funktionszuschreibungen funktionieren hier genauso wie bei den Buttons weiter oben, jedoch können wir zu verschiedenen Zuständen, die es beim InputField geben kann auch verschiedene Funktionen zuordnen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Durch Textfelder Funktionen rufen ===&lt;br /&gt;
Um das auszuprobieren, können wir ein neues Script erstellen, dass ich beispielhalber TextEingabeLesen.cs nennen möchte. In diesem Script können wir eine Funktion hinzufügen, von der wir wollen, dass sie aufgerufen wird, wenn jemand etwas in unser InputField geschrieben und die Eingabe bestätigt hat. Die Funktion könnte ungefähr so aussehen:&lt;br /&gt;
&lt;br /&gt;
 public void TextEingegeben(){&lt;br /&gt;
 &lt;br /&gt;
   Debug.Log(&amp;quot;Yay!&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Da ich mich zunächst vergewissern möchte, dass ich alles richtig verbunden habe, macht diese Funktion zunächst nicht besonders viel. Sie ist aber ein erster Schritt, mit dem ich überprüfen kann, ob die Funktion tatsächlich im richtigen Moment gerufen wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Schritte stehen also nun an:&lt;br /&gt;
* Ein neues, leeres GameObject muss der Hierarchy hinzugefügt werden, vielleicht nennen wir es &amp;quot;TextVerarbeitung&amp;quot;&lt;br /&gt;
* Unser neu geschriebenes Script mit dem Namen TextEingabeLesen.cs muss als Component zum neuen GameObject TextVerarbeitung hinzugefügt werden.&lt;br /&gt;
* In unserem InputField GameObject, muss ich eine neue Verbindung bei '''OnEndEdit''' zu TextVerarbeitung hinzufügen:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-connect-script-to-inputfield.png|600px]]&lt;br /&gt;
* Als Funktion soll die Funktion TextEingeben ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Wenn alles verbunden ist, könnt ihr die Eingabe testen: In der Game View und im Play Modus könnt ihr auf das Textfeld klicken, einen Text eingeben und dann die Enter-Taste drücken. In der Konsole sollte dann &amp;quot;Yay!&amp;quot;erscheinen.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Unity-btn-yay.png]]&lt;br /&gt;
&lt;br /&gt;
=== Übungen ===&lt;br /&gt;
* Könnt ihr die Szene so verändern, dass &amp;quot;Yay!&amp;quot; jedesmal erscheint wenn ein Buchstabe ins Textfeld eingegeben wird?&lt;br /&gt;
* Könnt ihr euer Script so umschreiben, dass in der Console &amp;quot;...&amp;quot; ausgegeben wird, wenn jemand etwas tippt, und &amp;quot;Yay!&amp;quot; wenn die Eingabe beendet wurde?&lt;br /&gt;
&lt;br /&gt;
=== Dynamische Parameter ===&lt;br /&gt;
Ein einfaches Beispiel könnte den eingegebenen Text in der Console ausgeben. Wie aber stellt mir das InputField diesen eingegebenen text zur Verfügung? Die Antwort ist: über einen '''dynamic parameter'''. Wir können für unsere Funktion, ähnlich wie bei ''static parameter'' bei den Buttons, nun einen neuen Parameter vom Typ string definieren:&lt;br /&gt;
 &lt;br /&gt;
 public void TextEingegeben(string derText){&lt;br /&gt;
 &lt;br /&gt;
   Debug.Log(derText);&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Damit das InputFIeld GameObject weiss, dass es den eingegebenen Text an diese Funktion übergeben soll, müssen wir die Funktion folgendermassen verbinden:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-inputfield-dynamic-string.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Wie ihr sehen könnt, gibt es unsere Funktion TextEingegeben in der Liste gleich zweimal: einmal unter der Kategorie '''Dynamic string''' und einmal unter der Kategorie '''Static Parameters'''. In diesem Fall wollen wir unsere Funktion aus der oberen Liste auswählen, damit Unity den eingegebenen Text direkt an den Parameter unserer Funktion weitergeben kann!&lt;br /&gt;
&lt;br /&gt;
===Übungen===&lt;br /&gt;
* Kannst du eine Unity Szene machen, in der sich ein Würfel immer einen Meter vorwärts bewegt, wenn jemand das Wort &amp;quot;liebe&amp;quot; in ein Textfeld eingibt?&lt;br /&gt;
* Kannst du eine Unity Szene machen, in der derselbe Würfel einen Namen bekommt, der durch ein zweites Textfeld festgelegt wird?&lt;br /&gt;
* Kannst du eine Eingabe aus einem textfeld in einem 3D-Text (TextMeshPro) erscheinen lassen?&lt;br /&gt;
&lt;br /&gt;
==Übungen zu UI und Unity==&lt;br /&gt;
* Kannst du ein Quiz-Programm schreiben, dass die 10 Fragen hintereinander stellt, und am Ende eine Auswertung auf dem Screen ausgibt?&lt;br /&gt;
* Kannst du einige der Fragen über ein UI Element Slider von 1-10 beantworten lassen?&lt;br /&gt;
* Kannst du über [[OSC in Unity]] die Antworten dieser Fragen auf einem anderen Computer visualisieren?&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=UI_in_Unity&amp;diff=2010</id>
		<title>UI in Unity</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=UI_in_Unity&amp;diff=2010"/>
		<updated>2021-04-21T16:32:57Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* Dynamische Parameter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= UI =&lt;br /&gt;
'''UI''' steht generell als Kurzform von '''User Interface'''. Im Kontext von Unity bezeichnet der Begriff '''UI''' allerdings eine von Unity spezifisch vorgegebene Interaktionsstruktur, die mit Buttons, Textfeldern und ähnlichem arbeitet, und sich im Code von den [[Interaction in Unity| meisten anderen Interaktionen unterscheidet]].&lt;br /&gt;
Der Hauptunterschied besteht im von Unity vorgegebenen Interaktionsmodus durch UI Elemente und die Unterschiede in der Art der Darstellung auf dem Bildschirm.&lt;br /&gt;
&lt;br /&gt;
== UI Elemente hinzufügen ==&lt;br /&gt;
Unity UI Elemente sind GameObjects die man in der Hierarchy über den Unterpunkt UI erstellen kann.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:create-ui-menu-unity.png | 400px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Es stehen eine Reihe von Elementen zur Auswahl. Wir werden uns auf dieser Seite hauptsächlich mit den Elementen Button (TextMeshPro) und Text (TextMeshpro) beschäftigen. &lt;br /&gt;
=== Kurze Erklärung zu TextMeshPro ===&lt;br /&gt;
Unity ist in den letzten zehn Jahren enorm schnell gewachsen und hat oft Code-Elemente, die von Menschen ausserhalb der Firma erstellt wurden über Zeit in den eigenen Code übernommen. TextMeshPro ist so ein Fall, in dem besserer Code zur Darstellung von texten in unity eingeflossen ist. Unity muss allerdings nun den von ihnen selbst erstellten sowie den zugekauften Code weiter anbieten, was dazu führt, dass man als Nutzer*in die Auswahl aht, für welche dier beiden zur Verfügung gestellten Varianten man sich entscheiden möchte.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Wir wollen uns im Zweifel immer für TextMeshPro entscheiden''', da der Text schöner dargestellt wird.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn ihr das erste Mal aus der Hierarchy ein GameObject mit dem Zusatz (TextMeshPro) erstellt, ploppt folgender Dialog auf, bei dem ihr auf beide Knöpfe klicken könnt:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:tmp-import.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Das Canvas Konzept ===&lt;br /&gt;
Alle in Unity genutzten UI Elemente werden einem sogenannten '''Canvas''' Objekt zugeordnet, einer Art Leinwand, die über der Szenen auf den Bildschirm gespannt ist. Wenn wir in der Hierarchy einen neuen Button erstellen, erstellt Unity auch gleich ein '''Canvas''' Object sowie ein '''EventSystem''' (über letzteres werde wir uns im Rahmen des Studiengangs nur peripher unterhalten).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-canvas-eventsystem-ui.png |400px]]&amp;lt;br&amp;gt;&lt;br /&gt;
UI Elemente werden relativ zu diesem Canvas positioniert und dargestellt (gerendert) und unterliegen dem Koordinatensystem, das durch den Canvas vorgegeben ist.  Für gewöhnlich sind sie daher '''unabhängig von der Position und Rotation der Kamera in der Szene''' immer am selben Ort auf dem Bildschirm. '''Deswegen müssen UI Elemente in der Hierarchy in Unity auch immer unter einem Canvas Objekt auftauchen.'''&amp;lt;br&amp;gt;&lt;br /&gt;
Das Koordinatensystem des Canvas Objekts wiederum orientiert sich an der [[Screen Resolution| Auflösung des Bildschirms]], wie in der Game View eingestellt.&amp;lt;br&amp;gt; &lt;br /&gt;
[[Datei:unity-gameview-resolution.png| 600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Da man sich der Auflösung der Endgeräte zu Beginn eines Projektes nicht immer sicher sein kann, und Unity von sich aus vorsieht, dass die Nutzer*innen ihre Auflösung auch selbst einstellen können (kommt bei uns seltener vor), bietet uns Unity durch die Nutzung des Canvas Konzeptes an, dass wir verschiedene UI Elemente '''relativ zu den Ecken des Bildschirms''' positionieren können. Hierfür ändert Unity den uns bekannten [https://docs.unity3d.com/ScriptReference/Transform.html| '''Transform'''] Component in ein [https://docs.unity3d.com/ScriptReference/RectTransform.html| '''RectTransform'''] Component (der allerdings von Transform abgeleitet ist, so dass wir per Script weiterhin wie gewohnt auf transform.position zugreifen können):&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:recttransform.png|400px]]&amp;lt;br&amp;gt;&lt;br /&gt;
=== Unterschiede in Koordinaten ===&lt;br /&gt;
Wie ihr gut erkennen könnt, sind die Zahlen, die in diesem Component die Position des GameObjects beschreiben deutlich anders, als die von uns bisher genutzten. Während wir bei unseren bisherigen Übungen für gewöhnlich Koordinaten zwischen 1 und 10 oder -1 und -10 für die x, y und z Werte genutzt haben, stehen hier plötzlich zahlen in der Grösse von 100 und 1000. Das hat damit zu tun, dass die Koordinaten bei Rect Transform als Bildschirmkoordinaten interpretiert werden, wobei eine Koordinate von 1 genau einen Pixel beschreibt. Zum Vergleich: in unserer Unity Szene beschreibt eine Koordinate von 1 für gewöhnlich die Distanz von einem Meter.&amp;lt;br&amp;gt;&lt;br /&gt;
=== Darstellung in Scene View und Game View ===&lt;br /&gt;
Wenn wir zwischen der Unity Scene View und der Game View hin und her schalten, stellen wir fest, dass unser Button in der Game View zwar an einem sinnvollen Punkt dargestellt wird, in unserer Scene View Allerdings nichts von ihm zu sehen ist. Stattdessen sehen wir eine seltsame Linie mit Ecke:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:ui-scene-vs-gameview.png|800px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Der Grund dafür ist, dass die Unity Scene View immer alle Dinge in Unity Koordinaten darstellt (1 Unity Koordinate interpretieren wir für gewöhnlich als 1 Meter), wohingegen in der Game View die Besonderheiten des Canvas-Konzeptes bereits in Betracht gezogen werden, und die UI Elemente unabhängig von der Kamera auf dem Bildschirm platziert werden.&amp;lt;br&amp;gt;&lt;br /&gt;
'''UI Elemente sind also am Einfachsten in der Game View sichtbar und es empfiehlt sich, ihre positionierung auch dort zu überprüfen.'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Trotzdem können UI Elemente auch in der Scene View angeschaut und manipuliert werden. Die oben angesprochene weisse Linie beschreibt den Umfang des Canvas Objektes in Unity 3D-Koordinaten. Im Canvas Objekt selbst könnt ihr unter ''width'' und ''height'' nachschauen, wie gross dieser Umfang ist. Wenn ihr gaaaaaaaanz weit herauszoomt, könnt ihr dann auch euren Button sehen. Eine einfachere Version, um eine übersicht über die UI Elemente in der Scene View zu bekommen ist, '''das Canvas GameObjekt doppelklicken'''.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-doubleclick-canvas.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Ihr könnt selbstverständlich wie gewohnt, auch UI Elemente in der Scene View anklicken und verschieben. Wichtig hierbei ist nur zu wissen, dass der Canvas diese Elemente nicht perspektivisch darstellt und sich an der Darstellung der UI Elemente somit auch bei Verschiebung in der Z-Achse nichts ändert.&lt;br /&gt;
&lt;br /&gt;
=== Relatives Ausrichten der UI Elemente ===&lt;br /&gt;
Durch klicken auf das Piktogramm links bei RectTransform können wir bestimmen, wie Unity die relative Position unseres UI Elements bestimmen soll:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-ui-anchors.png|400px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Gerade bewegt Unity unseren Button von der Mitte des Screens aus gesehen 687 Pixel nach links und 369.5 Pixel nach unten.&lt;br /&gt;
Mehr informationen hierzu findet ihr in der [https://docs.unity3d.com/Packages/com.unity.ugui@1.0/manual/UIBasicLayout.html| Unity Gebrauchsanweisung für UI Elemente].&lt;br /&gt;
&lt;br /&gt;
Nachdem wir einen '''Button (TextMeshPro)''' in Unity hinzugefügt haben, sollte unsere Szene ungefähr so aussehen:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:unity-scene-with-button.png|800px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Textfelder ==&lt;br /&gt;
Nicht immer werden UI Elemente dafür genutzt, dass sie manipuliert werden können. Oft sollen sie auch einfach nur etwas darstellen oder anzeigen. Ein Beispiel dafür ist '''Text (TextMeshPro)''':&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-ui-create-text-tmp.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Textfeld generiert genauso einen Canvas (falls noch keiner da ist) oder ordnet sich automatisch einem bestehenden Canvas unter (falls schon ein anderes UI Element in der Szene ist).&lt;br /&gt;
&lt;br /&gt;
=== Text in einem Textfeld per Script definieren ===&lt;br /&gt;
Der Unity Editor erlaubt euch, den Text den ihr im Textfeld seht direkt im Editor einzugeben. Für Nutzer*innen eures Programms ist der Text allerdings nicht editierbar. Jedoch könnt ihr den Text selbstverständlich per Script jederzeit ändern.&amp;lt;br&amp;gt;&lt;br /&gt;
Dafür erstellen wir hier als Beispiel ein neues Script, dass den Text in unserem neu generierten Textfeld verändert. Wir wollen es TextChange.cs nennen:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-new-script-textChange.png|400px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um von unserem Script aus auf das '''Text (TextMeshPro)''' GameObject zugreifen zu können und dort den angezeigten Text zu verändern, müssen wir eine Verbindung zu unserem Script in Form einer Variable schaffen. Dazu brauchen wir, [[Algorithms#Auf_eine_Variable_in_einem_anderen_Script_zugreifen| wie immer]], den Typ des Scripts auf das wir zugreifen wollen. Im Falle eines '''Text (TextMeshPro)''' stellt sich der Typ allerdings als etwas komplizierter dar, weil es Text in Unity in unterschiedlichen Formen gibt: einmal für UI und einmal für die 3D Repräsentation in unserer Szene! Indiesem Fall wollen wir auf die UI-Version des Typs Text (TextMeshPro) zugreifen. Der Typ unseres Textfeldes ist in diesem Fall TextMeshProUGUI (UGUI steht kurz für Unity Graphical User Interface). Damit wir direkt Zugriff auf diesen Typ bekommen, sollten wir die Library TMPro in unserem Script mit laden. Das sieht dann so aus:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:visual-studio-using-tmpro.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wir können nun im Unity Editor unser Script in ein neues, leeres GameObject ziehen, das wir TextManipulation nennen können:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-ui-textmanipulation-gameobject.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Und dort dann die Verbindung mit unserem Text(TMP) GameObject und dem zugehörigen TextMeshProUGUI Component herstellen:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-ui-connect Text-tmp-to-textmanipulation.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nun können wir in unserem TextChange.cs Script auf die Variable '''text'''in der verbundenen TextMeshProUGUI-Komponente zugreifen und sie verändern, in dem wir beispielsweise unsere Start Funktion folgendermassen umschreiben:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 void Start()&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
   meinTextFeld.text=&amp;quot;Hallo Welt!&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
oder in unserer Update Funktion folgendes Schreiben:&lt;br /&gt;
&lt;br /&gt;
 void Update()&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
   meinTextFeld.text+=&amp;quot;mi&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Einen Button abfragen ==&lt;br /&gt;
Prinzipiell erstellen wir in unseren Szenen Buttons als UI-Elemente, weil wir im Code darauf reagieren wollen, dass jemensch den Button geklickt hat. Hier hilft uns Unity durch bereits vorprogrammierte Strukturen, die es uns sehr einfach ermöglichen, eine Funktion aufzurufen, wenn ein bestimmter Button geklickt wurde.&lt;br /&gt;
&lt;br /&gt;
=== Beispielscript ===&lt;br /&gt;
Wir können also ein Beispielscript erstellen, nennen wir es KnopfGeklickt.cs (Grossschreibung bei neuen Scripten beachten!). Und diesem Script können wir eine einfache Funktion hinzufügen - in diesem Beispiel die Funktion ButtonWurdeGeklickt(), die uns in der Konsole etwas ausgibt:&lt;br /&gt;
 &lt;br /&gt;
 public void ButtonWurdeGeklickt(){&lt;br /&gt;
 &lt;br /&gt;
   Debug.Log(&amp;quot;Yay!&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Das '''public''' bei public void ist in diesem Fall sehr wichtig, da wir diese Funktion ausserhalb des eigenen GameObjects aufrufen wollen!&lt;br /&gt;
&lt;br /&gt;
=== Button mit Beispielscript verbinden ===&lt;br /&gt;
Nachdem wir unser Script als Component auf ein leeres Gameobject hinzugefügt haben, können wir daraufhin im Inspector den Button mit unserer Funktion direkt verbinden. Dazu fügen wir beim Button im Feld OnClick eine neue Verbindung zu unserer Funktion hinzu:&amp;lt;br&amp;gt;&lt;br /&gt;
Ausgangspunkt ist unsere Hierarchy mit unserem GameObject (ich habe es KlickKonsequenz genannt) und unserem neuen Script als Component:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-klickkonsequenz-setup.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
In Folgenden Schritten können wir die oben genannte Funktion in unserem Script ausführen lassen, wenn der Button gedrückt wurde:&lt;br /&gt;
* Neue Verbindung bei Button herstellen:&amp;lt;br&amp;gt; [[Datei:unity-btn-add-connection.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
* Unser GameObject zuweisen:&amp;lt;br&amp;gt; [[Datei:unity-btn-drag-gameobject-to-connect.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
* Unsere neu geschriebene Funktion auswählen:&amp;lt;br&amp;gt; [[Datei:unity-btn-select-function.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn alles funktioniert hat ist das Resultat in der Console ablesbar:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-btn-yay.png]]&lt;br /&gt;
&lt;br /&gt;
== Mehrere Buttons mit einem Script verbinden ==&lt;br /&gt;
Im Folgenden Beispiel wollen wir mit zwei Buttons arbeiten, und unser KnopfGeklickt.cs Script so erweitern, dass wir im Script unterscheiden können, welcher der beiden Knöpfe gedrückt wurde. Hierzu benutzen wir ein Kozpet, dass in Unity in diesem Kontext mit '''static paramaters''' bezeichnet wird.&lt;br /&gt;
&lt;br /&gt;
=== Hinzufügen eines Parameters in unsere Scriptfunktion ===&lt;br /&gt;
Wir ändern die Funktion in unserem Script, so dass wir einen Parameter unserer Wahl hinzufügen, und dadurch eine Entscheidung über unsere Ausgabe treffen können. Dieser Parameter wird später bei der Verbindung zu den Buttons mit einem Wert gefüllt, den wir im Inspector bei den jeweiligen Buttons einstellen können. Als Beispiel wähle ich hier einen '''int''' Parameter und nenne ihn &amp;quot;welcherButton&amp;quot;:&amp;lt;br&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
 public void ButtonWurdeGeklickt(int welcherButton)&lt;br /&gt;
 {&lt;br /&gt;
  &lt;br /&gt;
   if (welcherButton==1){&lt;br /&gt;
     Debug.Log(&amp;quot;Button 1 gedrückt!&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   if (welcherButton==2){&lt;br /&gt;
     Debug.Log(&amp;quot;Button 2 gedrückt!&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Damit ich zwischen zwei Buttons unterscheiden kann, brauche ich ja auch zwei Buttons. Ich habe dafür meinen ersten Button kopiert und leicht verschoben, dann beiden einen Namen gegeben, damit ich sie für mich besser unterscheiden kann. Meine Hierarchy sieht dementsprechend so aus:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-btn-two-btns.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Ich habe nun zwei Buttons, beide in der Hierarchy unter demselben Canvas GameObject, allerdings der Übersicht halber unterschiedlich benannt. Das sich mein Script geändert hat, muss ich die Funktion bei OnCLick wieder neu Verbinden.Beim Verbinden mit meiner abgeänderten Funktion entsteht nun ein neues Feld, in den ich manuell den Wert des Parameters eingeben kann, der an meine Funktion übergeben wird, wenn der Button gedrückt wird:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-btn-static-parameter.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese statischen Parameter müssen nun '''für jeden Button einzeln''' auf eine Zahl gesetzt werden, die ich dann im oben genannten Script abfragen kann. Für ''Button Eins'' setze ich die Zahl auf 1, für ''Button Zwei'' setze ich sie auf zwei. So kann ich mit einem einzelnen Script unterscheiden, welcher Knopf im User Interface gedrückt wurde.&lt;br /&gt;
&lt;br /&gt;
== Textfelder ==&lt;br /&gt;
Nachdem wir die Verbindung von UI Elementen mit unseren Scripten und den Umgang mit statischen parametern angeschaut haben, stellt sich nun die Frage: Was tun, wenn wir die Eingabe von Nutzer*innen in textfelder direkt in Code weiterverarbeiten wollen?&amp;lt;br&amp;gt;&lt;br /&gt;
Hierzu erstellen wir zunächst ein neues InputField (TextMeshPro) in unserer Hierarchy. Wir ihr sehen könnt wird es direkt dem bereits bestehenden Canvas GameObject in der Hierarchy untergeordnet:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-new-inputfield.png|400px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Dieses Inputfield hat nun mehrere Möglichkeiten, die Texteingabe von Nutzer*innen an den von uns geschriebenen Code weiterzuleiten:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-textinput-functionlist.png|400px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Die Funktionszuschreibungen funktionieren hier genauso wie bei den Buttons weiter oben, jedoch können wir zu verschiedenen Zuständen, die es beim InputField geben kann auch verschiedene Funktionen zuordnen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Durch Textfelder Funktionen rufen ===&lt;br /&gt;
Um das auszuprobieren, können wir ein neues Script erstellen, dass ich beispielhalber TextEingabeLesen.cs nennen möchte. In diesem Script können wir eine Funktion hinzufügen, von der wir wollen, dass sie aufgerufen wird, wenn jemand etwas in unser InputField geschrieben und die Eingabe bestätigt hat. Die Funktion könnte ungefähr so aussehen:&lt;br /&gt;
&lt;br /&gt;
 public void TextEingegeben(){&lt;br /&gt;
 &lt;br /&gt;
   Debug.Log(&amp;quot;Yay!&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Da ich mich zunächst vergewissern möchte, dass ich alles richtig verbunden habe, macht diese Funktion zunächst nicht besonders viel. Sie ist aber ein erster Schritt, mit dem ich überprüfen kann, ob die Funktion tatsächlich im richtigen Moment gerufen wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Schritte stehen also nun an:&lt;br /&gt;
* Ein neues, leeres GameObject muss der Hierarchy hinzugefügt werden, vielleicht nennen wir es &amp;quot;TextVerarbeitung&amp;quot;&lt;br /&gt;
* Unser neu geschriebenes Script mit dem Namen TextEingabeLesen.cs muss als Component zum neuen GameObject TextVerarbeitung hinzugefügt werden.&lt;br /&gt;
* In unserem InputField GameObject, muss ich eine neue Verbindung bei '''OnEndEdit''' zu TextVerarbeitung hinzufügen:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-connect-script-to-inputfield.png|600px]]&lt;br /&gt;
* Als Funktion soll die Funktion TextEingeben ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Wenn alles verbunden ist, könnt ihr die Eingabe testen: In der Game View und im Play Modus könnt ihr auf das Textfeld klicken, einen Text eingeben und dann die Enter-Taste drücken. In der Konsole sollte dann &amp;quot;Yay!&amp;quot;erscheinen.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Unity-btn-yay.png]]&lt;br /&gt;
&lt;br /&gt;
=== Übungen ===&lt;br /&gt;
* Könnt ihr die Szene so verändern, dass &amp;quot;Yay!&amp;quot; jedesmal erscheint wenn ein Buchstabe ins Textfeld eingegeben wird?&lt;br /&gt;
* Könnt ihr euer Script so umschreiben, dass in der Console &amp;quot;...&amp;quot; ausgegeben wird, wenn jemand etwas tippt, und &amp;quot;Yay!&amp;quot; wenn die Eingabe beendet wurde?&lt;br /&gt;
&lt;br /&gt;
=== Dynamische Parameter ===&lt;br /&gt;
Ein einfaches Beispiel könnte den eingegebenen Text in der Console ausgeben. Wie aber stellt mir das InputField diesen eingegebenen text zur Verfügung? Die Antwort ist: über einen '''dynamic parameter'''. Wir können für unsere Funktion, ähnlich wie bei ''static parameter'' bei den Buttons, nun einen neuen Parameter vom Typ string definieren:&lt;br /&gt;
 &lt;br /&gt;
 public void TextEingegeben(string derText){&lt;br /&gt;
 &lt;br /&gt;
   Debug.Log(derText);&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Damit das InputFIeld GameObject weiss, dass es den eingegebenen Text an diese Funktion übergeben soll, müssen wir die Funktion folgendermassen verbinden:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-inputfield-dynamic-string.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Wie ihr sehen könnt, gibt es unsere Funktion TextEingegeben in der Liste gleich zweimal: einmal unter der Kategorie '''Dynamic string''' und einmal unter der Kategorie '''Static Parameters'''. In diesem Fall wollen wir unsere Funktion aus der oberen Liste auswählen, damit Unity den eingegebenen Text direkt an den Parameter unserer Funktion weitergeben kann!&lt;br /&gt;
&lt;br /&gt;
===Übungen===&lt;br /&gt;
* Kannst du eine Unity Szene machen, in der sich ein Würfel immer einen Meter vorwärts bewegt, wenn jemand das Wort &amp;quot;liebe&amp;quot; in ein Textfeld eingibt?&lt;br /&gt;
* Kannst du eine Unity Szene machen, in der derselbe Würfel einen Namen bekommt, der durch ein zweites Textfeld festgelegt wird?&lt;br /&gt;
* Kannst du eine Eingabe aus einem textfeld in einem 3D-Text (TextMeshPro) erscheinen lassen?&lt;br /&gt;
&lt;br /&gt;
==Übungen zu UI und Unity==&lt;br /&gt;
* Kannst du ein Quiz-Programm schreiben, dass die 10 Fragen hintereinander stellt, und am Ende eine Auswertung auf dem Screen ausgibt?&lt;br /&gt;
* Kannst du über [[OSC in Unity]] die Antworten dieser Fragen auf einem anderen Computer visualisieren?&lt;br /&gt;
* Kannst du einige der Fragen über ein UI Element Slider von 1-10 beantworten lassen?&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=UI_in_Unity&amp;diff=2009</id>
		<title>UI in Unity</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=UI_in_Unity&amp;diff=2009"/>
		<updated>2021-04-21T16:26:33Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: /* Text in einem Textfeld per Script definieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= UI =&lt;br /&gt;
'''UI''' steht generell als Kurzform von '''User Interface'''. Im Kontext von Unity bezeichnet der Begriff '''UI''' allerdings eine von Unity spezifisch vorgegebene Interaktionsstruktur, die mit Buttons, Textfeldern und ähnlichem arbeitet, und sich im Code von den [[Interaction in Unity| meisten anderen Interaktionen unterscheidet]].&lt;br /&gt;
Der Hauptunterschied besteht im von Unity vorgegebenen Interaktionsmodus durch UI Elemente und die Unterschiede in der Art der Darstellung auf dem Bildschirm.&lt;br /&gt;
&lt;br /&gt;
== UI Elemente hinzufügen ==&lt;br /&gt;
Unity UI Elemente sind GameObjects die man in der Hierarchy über den Unterpunkt UI erstellen kann.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:create-ui-menu-unity.png | 400px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Es stehen eine Reihe von Elementen zur Auswahl. Wir werden uns auf dieser Seite hauptsächlich mit den Elementen Button (TextMeshPro) und Text (TextMeshpro) beschäftigen. &lt;br /&gt;
=== Kurze Erklärung zu TextMeshPro ===&lt;br /&gt;
Unity ist in den letzten zehn Jahren enorm schnell gewachsen und hat oft Code-Elemente, die von Menschen ausserhalb der Firma erstellt wurden über Zeit in den eigenen Code übernommen. TextMeshPro ist so ein Fall, in dem besserer Code zur Darstellung von texten in unity eingeflossen ist. Unity muss allerdings nun den von ihnen selbst erstellten sowie den zugekauften Code weiter anbieten, was dazu führt, dass man als Nutzer*in die Auswahl aht, für welche dier beiden zur Verfügung gestellten Varianten man sich entscheiden möchte.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Wir wollen uns im Zweifel immer für TextMeshPro entscheiden''', da der Text schöner dargestellt wird.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn ihr das erste Mal aus der Hierarchy ein GameObject mit dem Zusatz (TextMeshPro) erstellt, ploppt folgender Dialog auf, bei dem ihr auf beide Knöpfe klicken könnt:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:tmp-import.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Das Canvas Konzept ===&lt;br /&gt;
Alle in Unity genutzten UI Elemente werden einem sogenannten '''Canvas''' Objekt zugeordnet, einer Art Leinwand, die über der Szenen auf den Bildschirm gespannt ist. Wenn wir in der Hierarchy einen neuen Button erstellen, erstellt Unity auch gleich ein '''Canvas''' Object sowie ein '''EventSystem''' (über letzteres werde wir uns im Rahmen des Studiengangs nur peripher unterhalten).&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-canvas-eventsystem-ui.png |400px]]&amp;lt;br&amp;gt;&lt;br /&gt;
UI Elemente werden relativ zu diesem Canvas positioniert und dargestellt (gerendert) und unterliegen dem Koordinatensystem, das durch den Canvas vorgegeben ist.  Für gewöhnlich sind sie daher '''unabhängig von der Position und Rotation der Kamera in der Szene''' immer am selben Ort auf dem Bildschirm. '''Deswegen müssen UI Elemente in der Hierarchy in Unity auch immer unter einem Canvas Objekt auftauchen.'''&amp;lt;br&amp;gt;&lt;br /&gt;
Das Koordinatensystem des Canvas Objekts wiederum orientiert sich an der [[Screen Resolution| Auflösung des Bildschirms]], wie in der Game View eingestellt.&amp;lt;br&amp;gt; &lt;br /&gt;
[[Datei:unity-gameview-resolution.png| 600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Da man sich der Auflösung der Endgeräte zu Beginn eines Projektes nicht immer sicher sein kann, und Unity von sich aus vorsieht, dass die Nutzer*innen ihre Auflösung auch selbst einstellen können (kommt bei uns seltener vor), bietet uns Unity durch die Nutzung des Canvas Konzeptes an, dass wir verschiedene UI Elemente '''relativ zu den Ecken des Bildschirms''' positionieren können. Hierfür ändert Unity den uns bekannten [https://docs.unity3d.com/ScriptReference/Transform.html| '''Transform'''] Component in ein [https://docs.unity3d.com/ScriptReference/RectTransform.html| '''RectTransform'''] Component (der allerdings von Transform abgeleitet ist, so dass wir per Script weiterhin wie gewohnt auf transform.position zugreifen können):&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:recttransform.png|400px]]&amp;lt;br&amp;gt;&lt;br /&gt;
=== Unterschiede in Koordinaten ===&lt;br /&gt;
Wie ihr gut erkennen könnt, sind die Zahlen, die in diesem Component die Position des GameObjects beschreiben deutlich anders, als die von uns bisher genutzten. Während wir bei unseren bisherigen Übungen für gewöhnlich Koordinaten zwischen 1 und 10 oder -1 und -10 für die x, y und z Werte genutzt haben, stehen hier plötzlich zahlen in der Grösse von 100 und 1000. Das hat damit zu tun, dass die Koordinaten bei Rect Transform als Bildschirmkoordinaten interpretiert werden, wobei eine Koordinate von 1 genau einen Pixel beschreibt. Zum Vergleich: in unserer Unity Szene beschreibt eine Koordinate von 1 für gewöhnlich die Distanz von einem Meter.&amp;lt;br&amp;gt;&lt;br /&gt;
=== Darstellung in Scene View und Game View ===&lt;br /&gt;
Wenn wir zwischen der Unity Scene View und der Game View hin und her schalten, stellen wir fest, dass unser Button in der Game View zwar an einem sinnvollen Punkt dargestellt wird, in unserer Scene View Allerdings nichts von ihm zu sehen ist. Stattdessen sehen wir eine seltsame Linie mit Ecke:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:ui-scene-vs-gameview.png|800px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Der Grund dafür ist, dass die Unity Scene View immer alle Dinge in Unity Koordinaten darstellt (1 Unity Koordinate interpretieren wir für gewöhnlich als 1 Meter), wohingegen in der Game View die Besonderheiten des Canvas-Konzeptes bereits in Betracht gezogen werden, und die UI Elemente unabhängig von der Kamera auf dem Bildschirm platziert werden.&amp;lt;br&amp;gt;&lt;br /&gt;
'''UI Elemente sind also am Einfachsten in der Game View sichtbar und es empfiehlt sich, ihre positionierung auch dort zu überprüfen.'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Trotzdem können UI Elemente auch in der Scene View angeschaut und manipuliert werden. Die oben angesprochene weisse Linie beschreibt den Umfang des Canvas Objektes in Unity 3D-Koordinaten. Im Canvas Objekt selbst könnt ihr unter ''width'' und ''height'' nachschauen, wie gross dieser Umfang ist. Wenn ihr gaaaaaaaanz weit herauszoomt, könnt ihr dann auch euren Button sehen. Eine einfachere Version, um eine übersicht über die UI Elemente in der Scene View zu bekommen ist, '''das Canvas GameObjekt doppelklicken'''.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-doubleclick-canvas.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Ihr könnt selbstverständlich wie gewohnt, auch UI Elemente in der Scene View anklicken und verschieben. Wichtig hierbei ist nur zu wissen, dass der Canvas diese Elemente nicht perspektivisch darstellt und sich an der Darstellung der UI Elemente somit auch bei Verschiebung in der Z-Achse nichts ändert.&lt;br /&gt;
&lt;br /&gt;
=== Relatives Ausrichten der UI Elemente ===&lt;br /&gt;
Durch klicken auf das Piktogramm links bei RectTransform können wir bestimmen, wie Unity die relative Position unseres UI Elements bestimmen soll:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-ui-anchors.png|400px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Gerade bewegt Unity unseren Button von der Mitte des Screens aus gesehen 687 Pixel nach links und 369.5 Pixel nach unten.&lt;br /&gt;
Mehr informationen hierzu findet ihr in der [https://docs.unity3d.com/Packages/com.unity.ugui@1.0/manual/UIBasicLayout.html| Unity Gebrauchsanweisung für UI Elemente].&lt;br /&gt;
&lt;br /&gt;
Nachdem wir einen '''Button (TextMeshPro)''' in Unity hinzugefügt haben, sollte unsere Szene ungefähr so aussehen:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:unity-scene-with-button.png|800px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Textfelder ==&lt;br /&gt;
Nicht immer werden UI Elemente dafür genutzt, dass sie manipuliert werden können. Oft sollen sie auch einfach nur etwas darstellen oder anzeigen. Ein Beispiel dafür ist '''Text (TextMeshPro)''':&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-ui-create-text-tmp.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Textfeld generiert genauso einen Canvas (falls noch keiner da ist) oder ordnet sich automatisch einem bestehenden Canvas unter (falls schon ein anderes UI Element in der Szene ist).&lt;br /&gt;
&lt;br /&gt;
=== Text in einem Textfeld per Script definieren ===&lt;br /&gt;
Der Unity Editor erlaubt euch, den Text den ihr im Textfeld seht direkt im Editor einzugeben. Für Nutzer*innen eures Programms ist der Text allerdings nicht editierbar. Jedoch könnt ihr den Text selbstverständlich per Script jederzeit ändern.&amp;lt;br&amp;gt;&lt;br /&gt;
Dafür erstellen wir hier als Beispiel ein neues Script, dass den Text in unserem neu generierten Textfeld verändert. Wir wollen es TextChange.cs nennen:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-new-script-textChange.png|400px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um von unserem Script aus auf das '''Text (TextMeshPro)''' GameObject zugreifen zu können und dort den angezeigten Text zu verändern, müssen wir eine Verbindung zu unserem Script in Form einer Variable schaffen. Dazu brauchen wir, [[Algorithms#Auf_eine_Variable_in_einem_anderen_Script_zugreifen| wie immer]], den Typ des Scripts auf das wir zugreifen wollen. Im Falle eines '''Text (TextMeshPro)''' stellt sich der Typ allerdings als etwas komplizierter dar, weil es Text in Unity in unterschiedlichen Formen gibt: einmal für UI und einmal für die 3D Repräsentation in unserer Szene! Indiesem Fall wollen wir auf die UI-Version des Typs Text (TextMeshPro) zugreifen. Der Typ unseres Textfeldes ist in diesem Fall TextMeshProUGUI (UGUI steht kurz für Unity Graphical User Interface). Damit wir direkt Zugriff auf diesen Typ bekommen, sollten wir die Library TMPro in unserem Script mit laden. Das sieht dann so aus:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:visual-studio-using-tmpro.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wir können nun im Unity Editor unser Script in ein neues, leeres GameObject ziehen, das wir TextManipulation nennen können:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-ui-textmanipulation-gameobject.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Und dort dann die Verbindung mit unserem Text(TMP) GameObject und dem zugehörigen TextMeshProUGUI Component herstellen:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-ui-connect Text-tmp-to-textmanipulation.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Nun können wir in unserem TextChange.cs Script auf die Variable '''text'''in der verbundenen TextMeshProUGUI-Komponente zugreifen und sie verändern, in dem wir beispielsweise unsere Start Funktion folgendermassen umschreiben:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 void Start()&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
   meinTextFeld.text=&amp;quot;Hallo Welt!&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
oder in unserer Update Funktion folgendes Schreiben:&lt;br /&gt;
&lt;br /&gt;
 void Update()&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
   meinTextFeld.text+=&amp;quot;mi&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Einen Button abfragen ==&lt;br /&gt;
Prinzipiell erstellen wir in unseren Szenen Buttons als UI-Elemente, weil wir im Code darauf reagieren wollen, dass jemensch den Button geklickt hat. Hier hilft uns Unity durch bereits vorprogrammierte Strukturen, die es uns sehr einfach ermöglichen, eine Funktion aufzurufen, wenn ein bestimmter Button geklickt wurde.&lt;br /&gt;
&lt;br /&gt;
=== Beispielscript ===&lt;br /&gt;
Wir können also ein Beispielscript erstellen, nennen wir es KnopfGeklickt.cs (Grossschreibung bei neuen Scripten beachten!). Und diesem Script können wir eine einfache Funktion hinzufügen - in diesem Beispiel die Funktion ButtonWurdeGeklickt(), die uns in der Konsole etwas ausgibt:&lt;br /&gt;
 &lt;br /&gt;
 public void ButtonWurdeGeklickt(){&lt;br /&gt;
 &lt;br /&gt;
   Debug.Log(&amp;quot;Yay!&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Das '''public''' bei public void ist in diesem Fall sehr wichtig, da wir diese Funktion ausserhalb des eigenen GameObjects aufrufen wollen!&lt;br /&gt;
&lt;br /&gt;
=== Button mit Beispielscript verbinden ===&lt;br /&gt;
Nachdem wir unser Script als Component auf ein leeres Gameobject hinzugefügt haben, können wir daraufhin im Inspector den Button mit unserer Funktion direkt verbinden. Dazu fügen wir beim Button im Feld OnClick eine neue Verbindung zu unserer Funktion hinzu:&amp;lt;br&amp;gt;&lt;br /&gt;
Ausgangspunkt ist unsere Hierarchy mit unserem GameObject (ich habe es KlickKonsequenz genannt) und unserem neuen Script als Component:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-klickkonsequenz-setup.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
In Folgenden Schritten können wir die oben genannte Funktion in unserem Script ausführen lassen, wenn der Button gedrückt wurde:&lt;br /&gt;
* Neue Verbindung bei Button herstellen:&amp;lt;br&amp;gt; [[Datei:unity-btn-add-connection.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
* Unser GameObject zuweisen:&amp;lt;br&amp;gt; [[Datei:unity-btn-drag-gameobject-to-connect.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
* Unsere neu geschriebene Funktion auswählen:&amp;lt;br&amp;gt; [[Datei:unity-btn-select-function.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn alles funktioniert hat ist das Resultat in der Console ablesbar:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-btn-yay.png]]&lt;br /&gt;
&lt;br /&gt;
== Mehrere Buttons mit einem Script verbinden ==&lt;br /&gt;
Im Folgenden Beispiel wollen wir mit zwei Buttons arbeiten, und unser KnopfGeklickt.cs Script so erweitern, dass wir im Script unterscheiden können, welcher der beiden Knöpfe gedrückt wurde. Hierzu benutzen wir ein Kozpet, dass in Unity in diesem Kontext mit '''static paramaters''' bezeichnet wird.&lt;br /&gt;
&lt;br /&gt;
=== Hinzufügen eines Parameters in unsere Scriptfunktion ===&lt;br /&gt;
Wir ändern die Funktion in unserem Script, so dass wir einen Parameter unserer Wahl hinzufügen, und dadurch eine Entscheidung über unsere Ausgabe treffen können. Dieser Parameter wird später bei der Verbindung zu den Buttons mit einem Wert gefüllt, den wir im Inspector bei den jeweiligen Buttons einstellen können. Als Beispiel wähle ich hier einen '''int''' Parameter und nenne ihn &amp;quot;welcherButton&amp;quot;:&amp;lt;br&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
 public void ButtonWurdeGeklickt(int welcherButton)&lt;br /&gt;
 {&lt;br /&gt;
  &lt;br /&gt;
   if (welcherButton==1){&lt;br /&gt;
     Debug.Log(&amp;quot;Button 1 gedrückt!&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   if (welcherButton==2){&lt;br /&gt;
     Debug.Log(&amp;quot;Button 2 gedrückt!&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Damit ich zwischen zwei Buttons unterscheiden kann, brauche ich ja auch zwei Buttons. Ich habe dafür meinen ersten Button kopiert und leicht verschoben, dann beiden einen Namen gegeben, damit ich sie für mich besser unterscheiden kann. Meine Hierarchy sieht dementsprechend so aus:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-btn-two-btns.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Ich habe nun zwei Buttons, beide in der Hierarchy unter demselben Canvas GameObject, allerdings der Übersicht halber unterschiedlich benannt. Das sich mein Script geändert hat, muss ich die Funktion bei OnCLick wieder neu Verbinden.Beim Verbinden mit meiner abgeänderten Funktion entsteht nun ein neues Feld, in den ich manuell den Wert des Parameters eingeben kann, der an meine Funktion übergeben wird, wenn der Button gedrückt wird:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-btn-static-parameter.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese statischen Parameter müssen nun '''für jeden Button einzeln''' auf eine Zahl gesetzt werden, die ich dann im oben genannten Script abfragen kann. Für ''Button Eins'' setze ich die Zahl auf 1, für ''Button Zwei'' setze ich sie auf zwei. So kann ich mit einem einzelnen Script unterscheiden, welcher Knopf im User Interface gedrückt wurde.&lt;br /&gt;
&lt;br /&gt;
== Textfelder ==&lt;br /&gt;
Nachdem wir die Verbindung von UI Elementen mit unseren Scripten und den Umgang mit statischen parametern angeschaut haben, stellt sich nun die Frage: Was tun, wenn wir die Eingabe von Nutzer*innen in textfelder direkt in Code weiterverarbeiten wollen?&amp;lt;br&amp;gt;&lt;br /&gt;
Hierzu erstellen wir zunächst ein neues InputField (TextMeshPro) in unserer Hierarchy. Wir ihr sehen könnt wird es direkt dem bereits bestehenden Canvas GameObject in der Hierarchy untergeordnet:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-new-inputfield.png|400px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Dieses Inputfield hat nun mehrere Möglichkeiten, die Texteingabe von Nutzer*innen an den von uns geschriebenen Code weiterzuleiten:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-textinput-functionlist.png|400px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Die Funktionszuschreibungen funktionieren hier genauso wie bei den Buttons weiter oben, jedoch können wir zu verschiedenen Zuständen, die es beim InputField geben kann auch verschiedene Funktionen zuordnen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Durch Textfelder Funktionen rufen ===&lt;br /&gt;
Um das auszuprobieren, können wir ein neues Script erstellen, dass ich beispielhalber TextEingabeLesen.cs nennen möchte. In diesem Script können wir eine Funktion hinzufügen, von der wir wollen, dass sie aufgerufen wird, wenn jemand etwas in unser InputField geschrieben und die Eingabe bestätigt hat. Die Funktion könnte ungefähr so aussehen:&lt;br /&gt;
&lt;br /&gt;
 public void TextEingegeben(){&lt;br /&gt;
 &lt;br /&gt;
   Debug.Log(&amp;quot;Yay!&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Da ich mich zunächst vergewissern möchte, dass ich alles richtig verbunden habe, macht diese Funktion zunächst nicht besonders viel. Sie ist aber ein erster Schritt, mit dem ich überprüfen kann, ob die Funktion tatsächlich im richtigen Moment gerufen wird.&amp;lt;br&amp;gt;&lt;br /&gt;
Folgende Schritte stehen also nun an:&lt;br /&gt;
* Ein neues, leeres GameObject muss der Hierarchy hinzugefügt werden, vielleicht nennen wir es &amp;quot;TextVerarbeitung&amp;quot;&lt;br /&gt;
* Unser neu geschriebenes Script mit dem Namen TextEingabeLesen.cs muss als Component zum neuen GameObject TextVerarbeitung hinzugefügt werden.&lt;br /&gt;
* In unserem InputField GameObject, muss ich eine neue Verbindung bei '''OnEndEdit''' zu TextVerarbeitung hinzufügen:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-connect-script-to-inputfield.png|600px]]&lt;br /&gt;
* Als Funktion soll die Funktion TextEingeben ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Wenn alles verbunden ist, könnt ihr die Eingabe testen: In der Game View und im Play Modus könnt ihr auf das Textfeld klicken, einen Text eingeben und dann die Enter-Taste drücken. In der Konsole sollte dann &amp;quot;Yay!&amp;quot;erscheinen.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:Unity-btn-yay.png]]&lt;br /&gt;
&lt;br /&gt;
=== Übungen ===&lt;br /&gt;
* Könnt ihr die Szene so verändern, dass &amp;quot;Yay!&amp;quot; jedesmal erscheint wenn ein Buchstabe ins Textfeld eingegeben wird?&lt;br /&gt;
* Könnt ihr euer Script so umschreiben, dass in der Console &amp;quot;...&amp;quot; ausgegeben wird, wenn jemand etwas tippt, und &amp;quot;Yay!&amp;quot; wenn die Eingabe beendet wurde?&lt;br /&gt;
&lt;br /&gt;
=== Dynamische Parameter ===&lt;br /&gt;
Ein einfaches Beispiel könnte den eingegebenen Text in der Console ausgeben. Wie aber stellt mir das InputField diesen eingegebenen text zur Verfügung? Die Antwort ist: über einen '''dynamic parameter'''. Wir können für unsere Funktion, ähnlich wie bei ''static parameter'' bei den Buttons, nun einen neuen Parameter vom Typ string definieren:&lt;br /&gt;
 &lt;br /&gt;
 public void TextEingegeben(string derText){&lt;br /&gt;
 &lt;br /&gt;
   Debug.Log(derText);&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Damit das InputFIeld GameObject weiss, dass es den eingegebenen Text an diese Funktion übergeben soll, müssen wir die Funktion folgendermassen verbinden:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Datei:unity-inputfield-dynamic-string.png|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
Wie ihr sehen könnt, gibt es unsere Funktion TextEingegeben in der Liste gleich zweimal: einmal unter der Kategorie '''Dynamic string''' und einmal unter der Kategorie '''Static Parameters'''. In diesem Fall wollen wir unsere Funktion aus der oberen Liste auswählen, damit Unity den eingegebenen Text direkt an den Parameter unserer Funktion weitergeben kann!&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
	<entry>
		<id>http://hyperdramatik.net/mediawiki/index.php?title=Datei:Unity-ui-connect_Text-tmp-to-textmanipulation.png&amp;diff=2008</id>
		<title>Datei:Unity-ui-connect Text-tmp-to-textmanipulation.png</title>
		<link rel="alternate" type="text/html" href="http://hyperdramatik.net/mediawiki/index.php?title=Datei:Unity-ui-connect_Text-tmp-to-textmanipulation.png&amp;diff=2008"/>
		<updated>2021-04-21T16:22:15Z</updated>

		<summary type="html">&lt;p&gt;Fkirschner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fkirschner</name></author>
	</entry>
</feed>