{"id":6263,"date":"2021-06-21T15:26:07","date_gmt":"2021-06-21T15:26:07","guid":{"rendered":"http:\/\/desres20.netornot.at\/?p=6263"},"modified":"2021-06-21T15:26:07","modified_gmt":"2021-06-21T15:26:07","slug":"wwise-implementierung-in-unity-teil-4-scripting","status":"publish","type":"post","link":"http:\/\/desres20.netornot.at\/?p=6263","title":{"rendered":"Wwise Implementierung in Unity (Teil 4: Scripting)"},"content":{"rendered":"\n<p>Neben der Nutzung vorgefertigter Skripte, die f\u00fcr die Implementierung von Wwise in Unity mitliefert sind, gibt es auch die M\u00f6glichkeit eigene Skripte bzw. eigenen Code zu schreiben, um Befehle an Wwise zu senden. Der Vorteil davon ist, dass man ganz genau bestimmen kann, an welcher Stelle Befehle an Wwise \u00fcbermittelt werden sollen. Viele Funktionen werden au\u00dferdem von den mitgelieferten Skripten nicht abgedeckt und m\u00fcssen deshalb selbst erstellt werden. H\u00e4ufig muss z.B. ein Sound abgespielt werden, wenn ein Spieler eine Taste bet\u00e4tigt oder etwas im Spiel geschieht, was nicht mit Triggercollidern zu tun hat.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>F\u00fcr das Implementieren von Wwise in Unity mittels Skripte gibt es grunds\u00e4tzlich zwei M\u00f6glichkeiten: Die direkte Hardkodierung eines Befehls oder die Kodierung mithilfe von <em>Wwise-Types<\/em>, die im Unity-Inspector einen <em>Property Drawer<\/em> anzeigen, mit welchem man <em>Wwise-Objekte<\/em> (Event, State, Switch usw.) ausw\u00e4hlen kann.<br><br>Jeder hardkodierte Befehl beginnt mit dem Begriff <em>AkSoundEngine<\/em>, der quasi eine Information f\u00fcr Unity darstellt, dass ein Wwise-Objekt aufgerufen werden soll. Daraufhin wird bestimmt, welche Wwise-Funktion ausgef\u00fchrt werden soll. Eine der grundlegendsten Funktionen ist &#8220;<em>PostEvent<\/em>&#8221; f\u00fcr das Aufrufen eines Wwise-Events. Desweiteren gibt es noch die Funktionen &#8220;<em>setState<\/em>&#8221; bzw. &#8220;<em>setSwitch<\/em>&#8221; zum Bestimmen eines States bzw. Switches, &#8220;<em>setPosition<\/em>&#8220;, damit Wwise die Position eines <em>GameObjects <\/em>bekommt, was f\u00fcr die korrekte dreidimensionale Wiedergabe von diegetischen Sounds ben\u00f6tigt wird, &#8220;<em>setRTPC<\/em>&#8220;, mit welchem Parameter aus dem Spiel an Wwise \u00fcbermittelt werden und viele weitere Funktionen, die in der <a href=\"https:\/\/www.audiokinetic.com\/library\/edge\/?source=SDK&amp;id=waapi_functions_index.html\">Wwise-Dokumentation<\/a> nachgeschlagen werden k\u00f6nnen.<br>In den runden Klammern wird immer der Name des Wwise-Objekts als String mit angegeben. Manchmal werden noch andere Argumente ben\u00f6tigt, wie das <em>GameObject<\/em>, von dem der Befehl ausgeht.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"480\" height=\"85\" src=\"http:\/\/desres20.netornot.at\/wp-content\/uploads\/2021\/06\/HardCoded.jpg\" alt=\"\" class=\"wp-image-6269\" srcset=\"http:\/\/desres20.netornot.at\/wp-content\/uploads\/2021\/06\/HardCoded.jpg 480w, http:\/\/desres20.netornot.at\/wp-content\/uploads\/2021\/06\/HardCoded-300x53.jpg 300w\" sizes=\"(max-width: 480px) 100vw, 480px\" \/><figcaption><em>Das Aufrufen eines hartkodierten Trigger-Events, das Sounds f\u00fcr Fu\u00dfschritte abspielt<\/em><\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Alternativ dazu kann man auch mithilfe von Wwise-Types Implementierungen realisieren. Dazu wird zun\u00e4chst eine Variable mit einer Wwise-Type-Klasse initialisiert. Wwise-Type-Klassen sind die verschiedenen Arten von Wwise-Objekten. Das ist z.B. <em>AK.Wwise.Event<\/em> f\u00fcr Wwise-Events, <em>AK.Wwise.State<\/em> f\u00fcr Wwise-States und viele andere. Auch alle Wwise-Type-Klassen k\u00f6nnen in der<a href=\"https:\/\/www.audiokinetic.com\/library\/edge\/?source=Unity&amp;id=annotated.html\"> Wwise-Dokumentation<\/a> nachgeschlagen werden. <\/p>\n\n\n\n<p>Daraufhin kann im Unity-Inspector im <em>Property Drawer<\/em> des Skripts das jeweilige Wwise-Objekt, welches im Wwise-Editor angelegt ist, ausgew\u00e4hlt werden.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"463\" height=\"94\" src=\"http:\/\/desres20.netornot.at\/wp-content\/uploads\/2021\/06\/Anim_Ellen_Footsteps.jpg\" alt=\"\" class=\"wp-image-6277\" srcset=\"http:\/\/desres20.netornot.at\/wp-content\/uploads\/2021\/06\/Anim_Ellen_Footsteps.jpg 463w, http:\/\/desres20.netornot.at\/wp-content\/uploads\/2021\/06\/Anim_Ellen_Footsteps-300x61.jpg 300w\" sizes=\"(max-width: 463px) 100vw, 463px\" \/><figcaption><em>Variable &#8220;Play_SFX_Ellen_Run&#8221; mit dem gleichnamigen Wwise-Objekt im Property Drawer belegt<\/em><\/figcaption><\/figure>\n\n\n\n<p><br>Nach der Initialisierung wird die Variable in einer Funktion im Skript aufgerufen. Dabei wird die Variable mit der jeweiligen Wwise-Funktion aufgerufen, wie z.B. &#8220;<em>Post()<\/em>&#8221; bei Wwise-Events oder &#8220;<em>SetValue()<\/em>&#8221; bei RTPCs, States oder Switches.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"http:\/\/desres20.netornot.at\/wp-content\/uploads\/2021\/06\/FootStepWwiseType-1.jpg\" alt=\"\" class=\"wp-image-6272\" width=\"314\" height=\"121\" srcset=\"http:\/\/desres20.netornot.at\/wp-content\/uploads\/2021\/06\/FootStepWwiseType-1.jpg 314w, http:\/\/desres20.netornot.at\/wp-content\/uploads\/2021\/06\/FootStepWwiseType-1-300x116.jpg 300w\" sizes=\"(max-width: 314px) 100vw, 314px\" \/><figcaption><em>Variable &#8220;EllenFootsteps&#8221; wird mit Wwise-Type &#8220;AK.Wwise.Event&#8221; initialisiert und in der darauffolgenden Funktion &#8220;FootstepWwiseType()&#8221; mit der &#8220;Post()&#8221;-Funktion aufgerufen<\/em><\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Quellen:<\/p>\n\n\n\n<p>[1] https:\/\/www.audiokinetic.com\/courses\/wwise301\/?source=wwise301&amp;id=Posting_Events_using_WwiseTypes#read<\/p>\n\n\n\n<p>[2] https:\/\/www.audiokinetic.com\/courses\/wwise301\/?source=wwise301&amp;id=Creating_a_WwiseType_Event_property#read<\/p>\n\n\n\n<p>[3] https:\/\/www.audiokinetic.com\/library\/edge\/?source=SDK&amp;id=waapi_functions_index.html<\/p>\n\n\n\n<p>[4] https:\/\/www.audiokinetic.com\/library\/edge\/?source=Unity&amp;id=annotated.html<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Neben der Nutzung vorgefertigter Skripte, die f\u00fcr die Implementierung von Wwise in Unity mitliefert sind, gibt es auch die M\u00f6glichkeit eigene Skripte bzw. eigenen Code zu schreiben, um Befehle an Wwise zu senden. Der Vorteil davon ist, dass man ganz genau bestimmen kann, an welcher Stelle Befehle an Wwise \u00fcbermittelt werden sollen. Viele Funktionen werden<\/p>\n<footer class=\"entry-footer index-entry\">\n<div class=\"post-social pull-left\"><a href=\"https:\/\/www.facebook.com\/sharer\/sharer.php?u=http%3A%2F%2Fdesres20.netornot.at%2F%3Fp%3D6263\" target=\"_blank\" class=\"social-icons\"><i class=\"fa fa-facebook\" aria-hidden=\"true\"><\/i><\/a><a href=\"https:\/\/twitter.com\/home?status=http%3A%2F%2Fdesres20.netornot.at%2F%3Fp%3D6263\" target=\"_blank\" class=\"social-icons\"><i class=\"fa fa-twitter\" aria-hidden=\"true\"><\/i><\/a><a href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&#038;url=http%3A%2F%2Fdesres20.netornot.at%2F%3Fp%3D6263&#038;title=Wwise+Implementierung+in+Unity+%28Teil+4%3A+Scripting%29\" target=\"_blank\" class=\"social-icons\"><i class=\"fa fa-linkedin\" aria-hidden=\"true\"><\/i><\/a><\/div>\n<p class=\"link-more\"><a href=\"http:\/\/desres20.netornot.at\/?p=6263\" class=\"more-link\">Continue reading <span class=\"meta-nav\">\u2192<\/span><\/a><\/p>\n<\/footer>\n","protected":false},"author":32,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[4],"tags":[],"_links":{"self":[{"href":"http:\/\/desres20.netornot.at\/index.php?rest_route=\/wp\/v2\/posts\/6263"}],"collection":[{"href":"http:\/\/desres20.netornot.at\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/desres20.netornot.at\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/desres20.netornot.at\/index.php?rest_route=\/wp\/v2\/users\/32"}],"replies":[{"embeddable":true,"href":"http:\/\/desres20.netornot.at\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6263"}],"version-history":[{"count":8,"href":"http:\/\/desres20.netornot.at\/index.php?rest_route=\/wp\/v2\/posts\/6263\/revisions"}],"predecessor-version":[{"id":6336,"href":"http:\/\/desres20.netornot.at\/index.php?rest_route=\/wp\/v2\/posts\/6263\/revisions\/6336"}],"wp:attachment":[{"href":"http:\/\/desres20.netornot.at\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6263"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/desres20.netornot.at\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6263"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/desres20.netornot.at\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6263"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}