Let’s Make a 4X Space Game with Unity – Part 10 Orbits

Hi guys and welcome to part 10. In the last part we finally finished our basic camera controls. In this part we will make our solar systems look more interesting by adding orbital lines to our planets.

Firstly I have made a basic sprite to use as our orbital path which you can download here:

orbitsprite (zip file)

Create a new folder in the assets folder called Sprites and add the sprite to it. In the inspector change the sprite from a texture to a Sprite (2D and UI). Leave all the other settings the same and click apply.

part010pic002
OrbitSprite1 in the Assets Folder
part010pic001
Sprite Settings

We need to make a Prefab using this sprite so in Unity right click in the hierarchy and add a new sprite (under 2D Object in the menu). Rename it Orbit Sprite, rotate it by 90 in the X axis and add our orbit picture to the sprite box under the Sprite Renderer.

part010pic003
Orbit Sprite Inspector

Now make a new folder in the asset folder and call it prefabs. Drag the Orbit Sprite object from the hierarchy into this new folder to create the prefab.

Part010Pic004.JPG
Orbit Sprite Prefab

Now delete the Orbit Sprite object in the hierarchy as we do not need it in our scene anymore.

We have a sprite ready to use now but how do we add it to our solar system? First we need to let our SolarSystem script know which sprite to use. As we made our sprite a Prefab we add a public GameObject to our script and then assign our prefab in the inspector. Call it OrbitSpritePrefab.

Part010Pic005.JPG
Declaring OrbitSpritePrefab
Part010Pic006.JPG
Adding the Prefab in the Inspector

All our planets and stars are currently created using the SpaceObjects script. As the orbit paths are an extension of these objects lets create a new method in this script called CreateOrbitPaths. Make it public static and return a GameObject. It will need to be passed a GameObject (our orbit prefab). It would probably be a good idea to keep track of which object the orbit belongs to so also pass it a string. The sprite size will need to be adjusted depending on the distance the planet is away from our star so pass it an int. Lastly we will want it to be a child of the Solar System Manager (so the orbit is deleted when we return to our galaxy view) so pass it a transform (make this and optional pass and make it equal to null like our create sphere object).

Part010Pic007.JPG
Setting Up CreateOrbitPath

The first thing this method should do is to create our orbit objects so declare a GameObject called orbit and use Object.Instantiate to create it from the passed GameObject. We may as well add the return statement now so add that too.

Part010Pic008.JPG
Creating and Returning orbit

Before we return orbit we need to set its name, size and parent. 

Part010Pic009.JPG
CreateOrbitPath Complete

Back in the SolarSystem script we can now call CreateOrbitPath after we create the planet objects. We pass it orbitspriteprefab, planet.name + ” Orbit”, i + 1 (because i starts at zero) and this.transform. 

Part010Pic010.JPG
Enter a caption

Now press play and the solar systems look a little bit more interesting with the planet orbits added!

I made the orbit sprite black and white so that you could customise what colour your orbit sprite is. To do this just select the prefab in the assets folder and change the colour in the inspector :). You can also adjust the alpha here to make the paths more or less transparent.

Note: The sprite is not perfect as the ring gets wider the larger the orbit. However it will do for now and I don’t know about you but I kind of like this look :).

This concludes this part. In the next part we will add a selection icon to our galaxy view so it is easy to see which star we have our mouse over.

Scripts_for_part_10 (zip file)

Part 11 Star Selection Icon

Advertisements

3 thoughts on “Let’s Make a 4X Space Game with Unity – Part 10 Orbits

  1. Hi, thanks for doing this tutorial its been great so far!

    Im having a problem with this section however, I want my planets to be considerably further apart than in your version, and the sprite doesn’t scale very well past a point (the orbit line gets very wide). Do you know any work arounds? I was thinking of either using a line renderer for each orbit or maybe making a couple more orbit sprites of bigger sizes that I would use to scale for the more distant orbits.

    Like

    1. Hi thanks for the feedback :).

      A line renderer would work and I was actually considering do a tutorial on this as I know some people will not want to use a sprite (and because of the scaling issue). Another option might be to play around with the sprite pixels per unit size (it is set to 100 in this example).

      Let me know how you get on 🙂

      Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s