{"id":2167,"date":"2014-04-24T09:58:20","date_gmt":"2014-04-24T08:58:20","guid":{"rendered":"http:\/\/www.feedingedge.co.uk\/blog\/?p=2167"},"modified":"2014-06-11T14:44:58","modified_gmt":"2014-06-11T13:44:58","slug":"its-got-the-lot-metaverse-development","status":"publish","type":"post","link":"https:\/\/www.feedingedge.co.uk\/blog\/2014\/04\/24\/its-got-the-lot-metaverse-development\/","title":{"rendered":"It&#8217;s got the lot &#8211; metaverse development"},"content":{"rendered":"\n<div class=\"twitter-share\"><a href=\"https:\/\/twitter.com\/intent\/tweet?via=epredator\" class=\"twitter-share-button\">Tweet<\/a><\/div>\n<p>My current project has kept me pretty busy with good old fashioned hands on development. However, sometimes it is good to step back and see just how many things a project covers. I can&#8217;t go into too much detail about what it is for but can share the sort of development coverage.<br \/>\n<iframe loading=\"lazy\" src=\"https:\/\/www.flickr.com\/photos\/epredator\/14225014121\/player\/\" width=\"500\" height=\"375\" frameborder=\"0\" allowfullscreen webkitallowfullscreen mozallowfullscreen oallowfullscreen msallowfullscreen><\/iframe><br \/>\n (*update 11\/6\/14 Just adding this picture from a later post that describes this environment)<br \/>\nIt is a <a href=\"http:\/\/unity3d.com\" target=\"_blank\">unity3d<\/a> multi-user environment with point and click. It works on the web so it needs a socket server to broker the network communications. So it has a Photon Server. That <a href=\"https:\/\/www.exitgames.com\/en\/Realtime\" target=\"_blank\">Photon Server<\/a> is not on their cloud but on a separately hosted box with a major provider. So that needs my attention sys-admin wise configuring and keeping it up to date.<br \/>\nThe unity3d system needs to be logged into and to record things that have happened in the environment. So I had to build a separate set of web pages and php to act as the login and the API for the unity3d web plugin to talk to. This has to live on the server of course. As soon as you have login and data, users etc you need a set of admin screens and code to support that to.<br \/>\nThe unity3d system also needs voice communication as well as text chat. So that&#8217;s through Photon too.<br \/>\nThe actual unity3d environment has both regular users and an admin user in charge. So there are lots of things flowing back and forth to keep in sync across the session and to pass to the database. All my code is in c# though sometimes a bit of js will slip in. WE have things like animations using the animation controller and other unity goodies like Navmesh in place too.<br \/>\nI am working with a 3d designer so this is a multi person project. So I have had to set up mercurial repositories and hosting the repo on <a href=\"https:\/\/bitbucket.org\" target=\"_blank\">bitbucket<\/a>. We sync code and builds using <a href=\"http:\/\/www.atlassian.com\" target=\"_blank\">Atlassian<\/a> SourceTree which is really great. I also have an error tracking system with Atlassian so we have a JIRA. It means when I check code in and push the repository I can specify the JIRA reference number for the issue and it appears logged on the issue log. That combined with all the handy notifications to all concerned.<br \/>\nAs I have a separate server component running I had to set up another repository to enable me to protect and synchronise any server changes, the server has its own repository ID so it can pull the unity3d builds to the server too.<br \/>\nThere are complications in doing a database communication as Unity will only talk to the server that is is served from using the www classes. So it makes local testing of multiuser a little tricky. The unity dev environment is able to emulate the server name but the built versions can&#8217;t so there is a lot of testing bypass code needed.<br \/>\nOh I forgot to mention, this is all in Arabic too. There is nothing wrong with that except I don&#8217;t know the language. Also Arabic is a right to left language so things have to be put in place to ensure that text, chat etc all flows correctly.<br \/>\nA few little problems arose with this. Unity has an excellent Arabic component that allows you to apply right to left to any output text, however it does not work on input fields. That is a bit tricky when you need text chat, typing in questions and responses etc. So I have ended up writing a sort of new input field, I use a text label but capture the keys pass it to the Arabic fixer component which then returns the right to left version that is displayed in the label. I do of course loose things like cursor and focus as the label is an output device but needs must.<br \/>\nIn order to support Arabic in html and in the database I had to ensure that the text encoding of everything is UTF-8, there is also a directive tag dir=rtl that helps browsers know what to do with things. However I have found that this works with HTML input fields but seems to not work with password fields. My password field will not let me type Arabic into it. The keyboard language chooser on the mac reverts to uk and Arabic is greyed out. This cause me a lot of confusion on logging in.<br \/>\nThere is also the confusion of what to type, it is relatively easy to cut and paste translated Arabic labels into strings, but when testing a chat system or user names I needed to know what english keystrokes generated what Arabic phrase (that&#8217;s not a translation thats a how do I type something meaningful in Arabic and see it come up on the screen).<br \/>\nLuckily my good friend <a href=\"https:\/\/twitter.com\/robsmart\" target=\"_blank\">Rob Smart<\/a> came to my aid with &#8220;wfhp hgodn&#8221; which equates to \u0635\u0628\u0627\u062d \u0627\u0644\u062e\u064a\u0631 which is a variant of good morning. It helped me see where and when I was getting the correct orientation. Again this is not obvious when you start this sort of thing \ud83d\ude42<br \/>\nAnyway its back to layering and continuos improvement. Fixing bugs, adding function. It is pretty simply on paper but the number of components and systems, languages and platforms that this crosses is quite full on.<br \/>\nThe project is a 3 person one, Project manager\/producer, graphic designer and me. We all provide input to the project.<br \/>\nSo if you need any help or work doing with unity3d, c#, photon,html, php, MySQL, rtl languages, cloud servers, bitbucket, mercurial, sourcetree, JIRA then I am more than slightly levelled up though there is always more to learn.<br \/>\nPhew!<\/p>\n<iframe src=\"http:\/\/www.facebook.com\/plugins\/like.php?href=https%3A%2F%2Fwww.feedingedge.co.uk%2Fblog%2F2014%2F04%2F24%2Fits-got-the-lot-metaverse-development%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80\" scrolling=\"no\" frameborder=\"0\" style=\"border:none; overflow:hidden; width:450px; height:80px;\" allowTransparency=\"true\"><\/iframe><div name=\"googleone_share_1\" style=\"position:relative;z-index:5;float: right; margin-left: 10px;\"><g:plusone size=\"tall\" count=\"1\" href=\"https:\/\/www.feedingedge.co.uk\/blog\/2014\/04\/24\/its-got-the-lot-metaverse-development\/\"><\/g:plusone><\/div>","protected":false},"excerpt":{"rendered":"<p>My current project has kept me pretty busy with good old fashioned hands on development. However, sometimes it is good to step back and see just how many things a project covers. I can&#8217;t go into too much detail about what it is for but can share the sort of development coverage. (*update 11\/6\/14 Just<br \/>\n            <span class=\"excerpt-readmore\"><a class=\"more-link\" href=\"https:\/\/www.feedingedge.co.uk\/blog\/2014\/04\/24\/its-got-the-lot-metaverse-development\/\"><\/a><\/span><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[60,232,46],"tags":[],"class_list":["post-2167","post","type-post","status-publish","format-standard","hentry","category-code","category-technical","category-unity3d"],"_links":{"self":[{"href":"https:\/\/www.feedingedge.co.uk\/blog\/wp-json\/wp\/v2\/posts\/2167","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.feedingedge.co.uk\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.feedingedge.co.uk\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.feedingedge.co.uk\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.feedingedge.co.uk\/blog\/wp-json\/wp\/v2\/comments?post=2167"}],"version-history":[{"count":5,"href":"https:\/\/www.feedingedge.co.uk\/blog\/wp-json\/wp\/v2\/posts\/2167\/revisions"}],"predecessor-version":[{"id":2197,"href":"https:\/\/www.feedingedge.co.uk\/blog\/wp-json\/wp\/v2\/posts\/2167\/revisions\/2197"}],"wp:attachment":[{"href":"https:\/\/www.feedingedge.co.uk\/blog\/wp-json\/wp\/v2\/media?parent=2167"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.feedingedge.co.uk\/blog\/wp-json\/wp\/v2\/categories?post=2167"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.feedingedge.co.uk\/blog\/wp-json\/wp\/v2\/tags?post=2167"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}