I have working on a prototype App that uses the new iOS Map Kit Routing and Overlays and recently had to add the ability to draw a poly line between 2 annotated points. I know I had to:
1) Set the MapVIew delegate to point to my controller class
2) Implement a -(OverlayRender *) mapView:(MKMapView*) mapView rendererForOverlay:(id overlay method
3) In the method instantiate a MKPolylineRenderer
For some time I was scratching my head trying to figure why after doing all this, nothing was being draw. Until I realised the when you set the delegate for the map view you should do in in the controllers viewDidLoad method. Pretty simple because if you did it anywhere else, the MapKit has not been initialised.
Now that I am looking at developing an App rather than a game, I have been evaluating using something that allows me to go cross platform and still keep a common code base. I would also like to leverage on my C# since I do a lot of work in Unity but don’t want the Unity overheads. I have been trying Xamarin(www.xamarin.com) for a few weeks but I am finding many issues on the reliability of the development pipeline. Overall the idea is fairly simple, C# integrates through hooks and callbacks to native UI mostly through generated templates. Maybe it’s just because everything is in transition to iOS 7 but there are too many instances where the generated templates don’t work or when running in the simulator against XCode 5, it junks hangs up.
While still keen on getting it running, I may fall back to writing native for the first iteration of my prototype App. I’m going to re-install Xcode 4 and see if it ‘fixes’ anything.
One of the most common things to do when developing iOS or Android application is to interface with external plugins (i.e. facebook, gree,urban airship) that are not provide natively through Unity. The old method used to be sticking a scripts in the “Assets\Editor” directory called either “PostprocessBuildPlayer” on iOS or adding a menu item for windows accessible via the editor. This method of madness is documented on Unity Build Player Pipeline page. However with the advent of 3.5.2, you can now write C# scripts to automate the process with having to write python/perl scripts. Documentation is lacking at this time but you can see an example here. Hopefully Unity will start documenting these features soon.
This blog is more of a reference (for me) to keep track of my efforts to research creating plug-ins for iOS and Android and streamline the build process out from Unity. Right now besides the two links describe above, I am also looking into efforts to add files, directories to an XCode project. My initial research starts with:
- Mod PBXProj – Which is a python script which allows you to modify the xcode project. While is still useful for research purposed with the advent being able to control the build using C# scripts this becomes less relevant. Still looking at the script allows an insight into how and what to manipulate to modify an xcode project to allow references to be added.
- dcariola/XCodeEditor-for-Unity – This seems a lot more relevant but haven’t found out how usable is it. If you grab the source at the time this blog was posted, you will also need to grab a the MiniJSON.cs from here and not the darktable one that pops up when you do a MiniJSON search via google. Basically what this should do is similar to the Mod PBXProj allow you to add files and directories to the XCode project. Importantly, you can also import a ‘projmods’ JSON files which will allow you to specify sequence of commands to add specific files. I haven’t yet been able to track down what format this file takes and will post more when i find out.
My current path is to start with the XCodeEditor for Unity to see if it does anything useful yet and perhaps contribute to it. If anybody can point me to the format for the projmods JSON file and the format of the .pbxproj file that would really help.
It’s been ages since i’ve update the blog and for good reason. Between the contract work and the 3 other projects I am working on things have been crazy here. The good news is that I am finally been able to take a semi vacation to Canada.
As it stands, i’ve have to shut down work on Wendy’s Weddings. Putting it on hold until I can find another artist. Me and my friend Jason though have started an iPad/tablet game called WarMongrel. Mechs and Big Guns. How can we go go wrong?
You can find more information on our facebook page: http://www.facebook.com/augmentwars
Right now we have a most of the Game Design done and we are building a gameplay prototype.
We recently went feature complete with Wendy’s Weddings (that means all the technical work is done on Wendy’s and now it’s mostly content work, bug fixing and game balancing). We have decided to pursue a new Art direction with the game. Something with a bit more glamor and style which is what all weddings are about. We are really lucky to be able to work with Sandra, a talented artist to make that happen.
Without further ado:
Now i’m not a Web developer by any stretch of the imagination, having worked mostly with PHP and doing stuff against the database. The last time I touched HTML proper it didn’t have style sheets and was simply a mark up language. I am strictly going to go about rating how ready HTML5 is by a game developers perspective. The other criteria is that is should be free (or free as beer at least).
With those conditions, the only engine which seem both actively developed and well…free was RenderEngine. It’s active and the sole author Brett Fattori knows what he’s doing. Unfortunately I wish the browser developers knew what they were doing. Chrome is currently the fastest HTML5 browser, FireFox is a good second. The new ‘fast rollout’ of browser tech is making it hard to pin down a target for HTML5. V2 of RenderEngine (which is still in development) works best with Chrome and breaks on Firefox 4.
So you development environment would be:
- FireFox with Fire-Bug (until you find a feature which breaks) then…
- You need to know some JQUERY to get anywhere. It was a bit confusing until did some JQUERY stuff then it was fairly easy.
With that said, HTML5 won’t be on my direct development pipeline for a while. Might spend some time on weekends playing with it but that its. You can follow my development of a HTML5 RPG editor(Adventure) @ http://www.bigbadrobots.com/adventure/adventure/editor/
It currently doesn’t do much but sit there..the tile engine running in the background (pretty sea;P)
We have finalized the main character for Wendy’s Wedding, the game we are working on for iOS and Mac (and perhaps Android in the near future).
The original concept had Wendy being more business-like but some of the comments we got back were that she was a bit too scary to buy Wedding Dress from. We wanted Wendy to be a young experienced designer who has struck out on her own to setup a Bridal Gown shop, confident but not scary.
We have also the following locations the player can setup a Bridal Shop in. The rain forests of Borneo, Exciting Shanghai, Mystical Delhi,Paris:City for Lovers,London:Will & Kate just got married, Venice: Love on a Gondola,Myknonos,Cape Town,Rio and Las Vegas.
We hope to have the game out in about 3 months. Our prior post talk more about Wendy’s Weddings(http://bit.ly/fjF1P9). In a strange twist of fate, our Lead Designer is getting married so hopefully the game will be out on time;P
I have been using Unity for a while and just my my sake I wanted to compile a list of Do’s and Don’ts that will save you a lot of time (or if you are like me stop from going Doh! and hitting your forehead a few hours later).
1. Importing from Blender to Unity. Make sure you set the import to calculate your normals again. At least in Blender 2.56a the exports product models with extremely dark Textures. So unless you want environments in your game to be a homage to 2001 Space Odyssey.
3.Never use gravity a local variable name. In fact make sure if the editor highlight any variables that you aren’t using as a public or private variable. Bad things happen.
4. Always print out the gameobject you are acting against if you can’t find the components on it. I was trying to figure out why my projectiles wasn’t able to SendMessages or access components on a gameobject. The Tag was right. Made a fool of myself on Unity answers.
5. You CAN attach multiple scripts to a player. You can attach it to colliders on the bones that are hidden ONLY if you drag it to the scene and inspect it there. It won’t show up on the prefab.
6. Use the 80/20 rule of networking (well my 80/20 rule anyways)..If you think or findout that 80 percent of the time the variable needs to be updated, use state updates to do it versus RPC’s. I haven’t done a benchmark on Unity3D RPC’s but in my past experience with newtork coding RPC are slow, not timely and fat on network bandwidth. Easy to use again, but not to often.
7. Put something in your script name to help you find where it is. When inspecting a game object you can find scripts attached but have to hunt for the scripts. Putting all the scripts in 1 place and for me starting with a Prefix is a must. For example call player code ‘PlayerInputController’ and put it under a player folder in scripts. Good for you and good for any programmers that follow
8. Understand the code your write (or copy). There are alot of helpful scripts but the need to complete a project will drive you to cut and paste code. Soon you will have jumble of unoptimized code and if you don’t understand it a nightmare just waiting to happen.
9. The inspector can be useful to debug your game. If you select it during gameplay, you can check out public variables. It’s a quick and dirty way to do debugging rather then setting breakpoints which I haven’t done yet because it’s a pain to switch to the MonoDevelop (which is buggy, the scroll bars don’t respond to my mouse wheel and the folder ‘lock up’ so I can open it to click on scripts).
10. Beer and code don’t mix unless you have to re-write some particularly painful code. ;P
We got our first concept art today from Ivan, an artist we are working with on Wendy’s Weddings, a wedding themed casual title. He does some nice work as you can see with his first pass at some concept on some of Wendy and her little sister Molly.
You can take a look at more of his stuff at synergylab.com.my. We are still working on the characters so the are by no means final. Running comments on Wendy being a little too bossy looking have been noted and we are working on making her more fashionable and friendly.
The game revolves around helping Wendy build her Wedding Business and is being developed with assistance from Pretty In White. We have only been developing the game for about 2 weeks in total, but the basic gameplay is there and we are finishing off the Game Design documents before moving fully into production. Jordan from Zombie Gecko is helping with the Game Design. Still pretty early but the design and gameplay look exciting and we talk more about it in the future.
Our target is primarily on iOS and Mac as we are using the Cocos2D game framework. I have written in the past how I built a ‘component’ based system around this framework.
I know my 3 sisters and 2 nieces will be so happy I am finally making a game they will like to play. Maybe I can sneak in alien secret character;P
This post is a follow up to my first one which gives you some concepts on working with networking. In this post, I will cover getting an a client/server connection going which is the first thing you have to do in building a multiplayer game. Your first point of reference is to make sure you are familiar with the Unity3D Network class which provide most the functionality you need to manage an initial network session.
I would like to cover some Unity3D specific topics on how networking is handled. Unity uses a Network View Component that is attached to every game object who’s state you want to synchronize with. It also allows you to send messages directly to those objects because each one is issued a network ID. The following picture should make things clearer:
Let’s also cover the ‘responsibilities’ in networking between the Client and Server.
- The Server’s primary responsibility is managing the network session and propagating/validating state changes to connecting clients. It is also responsible for control of non-player game objects(i.e. enemies) by creating them when needed, running the AI routines which tell them to move. There are 2 modes that the server can operate under, authoritative and non. Authoritative servers have more work because they have to validate state changes from the client rather than merely passing it along to other clients. This is usually a slower way to operate as each move, action needs to be checked. If found to be invalid then the client that sent this original state changes need to be ‘brought in line’ with the way the server is thinking. A non-authoritative server on the other hand is more of a delivery person who simply relies information over to connected clients
- The Client is responsible for the view of the world a player sees and for receiving input and forwarding it over to the server. In a non-authoritative mode, the client can also process game logic (i.e. decrease health, move the player, move other objects) and these are sent to the server to be relayed to the other clients.
The first step in getting a network session up and running is initialize a server, which should be done when a level in the game loads up. This is done using the method on the Network class called “IntializeServer“. The first parameter is the number of connections to take. The second the listening port for the server, which is used by the clients to determine which application to connect on the server (as a server may be running multiple network applications). The last parameter if Network Address Translation should be used or not. All these except for the number of connections should be eventually made user configurable when you are writing your game.
Once the server is running, clients can connect using the Network.Connect method. The most important parameters for now is the ip address of the server and the remote port(which was the listening port specified earlier when the server was initialized).
That’s pretty much all there is for setting up a session. Be sure to check the Network class for more information on how to handle disconnects and network failures.