Let’s Make a 4X Space Game with Unity – Part 27 Ship Production Using Turns

Hi Guys and welcome to part 27. In the last part we started to set up our turn system. In this part we will be using what we did last time to make our ships build one turn at a time.

I left you guys with a challenge last time to code the for loop we will be using to do this. So here is how I am doing it, if yours is different but works however that’s great! Coding is about trying out new things and coming up with different methods.

Open up the TurnManager script so we can complete this for loop.

In the for loop we need to loop through the planets in the players owned planet list, so we need to reference the planet at i in the loop. 

Part027Pic001.JPG
Referencing the Planet

We then need to check if that planet has a starBase and if it does we need to add the production points from that planet onto the ship in the first slot of the starBase cue. We do this with an if statement.

Part027Pic002
Check the Planet has a Starbase

 

Ok so now we need to add a value to our Ship script which tells us how much production we need to build the ship. Open up the Ship script and add a new public float called productionValue. For now just set this equal to 10 as soon as it is declared. This will be the total amount of production our ship will be worth (we will change this later so it scales with ship size and tech level etc…)

Part027Pic003
productionValue

But what do we use to keep track of the current production added to the starbase? We need to add another float to our Starbase script; add a public float called currentProduction. This will be the value we add to and then check if it is equal to or over the production required for the ship, before building it. Set this to zero in the StarBase constructor.

Part027Pic004
currentProduction

Now we can head back to the TurnManager script. To complete the for loop.

Before we start to compare the ship production in the first slot of the build cue with the ship production there is just one last thing we need to check. What if the build cue doesn’t have any ships in it? Add an and condition to the if statement we already have in the for loop to check the buildCue count is not 0.

Part027Pic005
Checking the Starbase has a Ship in the Cue

We are almost there. There is just one more variable we need and that is how much production the planet is adding to the build.

Open up the Planet script. We need to add a new float called production. For now set this equal to 2 when it is declared. Later this will be based on the planets population, buildings and other bonuses.

Part027Pic006
Planet Production

 

We now have all the variables we need and we can add the production to the build every turn. We do this by adding the planet production to the current production in the star base. 

Part027Pic007
Adding Production

Add a new if statement to check if the production value is greater than or equal to the production required for the first ship in the buildCue.

Part027Pic008
Check the Production

What happens if we go above the ship build cost? We don’t want to loose any production points. We need to check the value is above or equal to the production required for our ships. We then take the production required away from the total amount of production added to the starbase. Let’s call this value difference. We then make currentProduction equal to difference.

Part027Pic009
Making Sure we Don’t Lose Production Points

Finally we spawn the ship object and remove the ship from the starbase cue. To do this we need to add a reference to our FleetManager script. Add a public FleetManger called fm at the top of the script and add the reference to it in the inspector.

Part027Pic010
Referencing FleetManager
Part027Pic011
Adding FleetManager in the Inspector

Now we can call the BuildShip method and remove the first ship from the cue. 

Part027Pic013
Finishing the for Loop

That code is a little messy, it might be a good idea to go back and reference some things with shorter variable names so the lines of code are not so long. For example we could have a variable called sb for our starbase and bc for our build cue. I will leave this up to you however (the code I provide at the end of the tutorial will be tidied up like this if you need to see what I am talking about). I thought for the purposes of the tutorial it would be better to have the full code so it is easier to see where the values are coming from.

We now have the start of a build system and all we need to do is change our build button a bit and update our UI to show how many turns it will take to build the ships in the cue. I will show you how to do this next time (please have a go yourselves). There is also an issue with the way things currently work in that the resources for the ships will be taken when the ship builds (really we want that to happen when it is added to the cue).

That concludes this part. Next time we will fix the resources issue and connect up the UI so that by the end of the tutorial the ship build system will be fully functional. After we are done with that we will be looking at spawn points for our ships and ship movement.

Scripts (PasteBin)

Part 28 Ship Production Using Turns 2 – Coming Soon

Advertisements

3 Comments »

  1. These are amazing, but I do seem to be running into problems along the way. My game does not always function the same as yours, even though I have copied each script over directly and carefully made sure I have done everything in Unity that I need to. For example, after around part 20 or so, when building ships, if I go to solar system view then back to galaxy view, there are no stars whatsoever around anymore, yet the ships remain. They are unaffected whereas the stars all get destroyed on the press of the galaxy view button. Thank you in advance for any help you can provide, these tutorials are honestly the best I have come across for Unity, even better than Unity’s own tutorial games.

    • Thanks for the feed back gamer bot. Are you making sure you change the buttons when required. Copy and pasting the scripts won’t make everything work sometimes stuff in the inspector need to be changed too :).

Leave a Reply