Setting up a Framework Directory

The first step to creating a great reusable development framework is to have a way of effortlessly sharing code across multiple projects. This is a little trickier than one might expect in Unity. Assets need to be a part of the project directory to be usable. Initially, I tried to follow the Asset Store model, exporting reusable assets as a Unity package and importing that into new projects. Unfortunately, this was a maintenance nightmare. Every minor update required a new export and a gaggle of imports.

I decided a better approach was to use symbolic links. This allowed me to maintain a single Framework folder, and with a tiny bit of setup, for that folder to appear seamlessly in all of my Unity projects.

Here’s how it works:
Continue reading

Global Game Jam 2015

This year was my second time participating in the Global Game Jam, and my third 48-hour jam overall. Along that storied history, I’ve learned a few things about how to be an effective and successful (defined here as ending the jam with a playable prototype that isn’t embarrassing for something made in a weekend) jammer. Here are some of those learnings, distilled into handy, categorized-tip form.

Continue reading

Apophis

Trouble with Apophis? As the final mission in the Grand Tour, Apophis is meant to be challenging! It requires mastery of the Thruster, an omni-directional rocket controlled with a virtual thumbstick. The objective is dramatic change of pace as well. Rather than attempting to scan the target for data, the mission literally puts the world on the line. Draw the asteroid off its collision course with Earth,  before it’s too late!

Plenty of people have questions about how to pull this off. If you’re looking for some insight, check out this demonstration.

Continue reading

Full Circle

Voyager began as a Windows Phone 7 game, and Voyager: Grand Tour would not exist if not for our dedicated and supportive Windows Phone fans. Now, at last, Windows Phone users can experience the new levels, beautiful visuals, and dramatic replays of Voyager: Grand Tour!

154x40_WPS_Download_blk[1]

On the anniversary of one launch, the announcement of another

icon_full

36 years ago today, the space probe Voyager 2 lifted off from Cape Canaveral atop a Titan IIIE rocket, beginning its vast and unparalleled Grand Tour of the Solar System. Just over two short weeks later, Voyager 1 launched from the exact same pad, on a trajectory that would fire it faster and further than – not just its sibling – but anything else created by human hands.

Next week, nestled snugly between those two amazing milestones, we will be commemorating the occasion with our own launch celebration – finally, owners of Android devices will be able to play Voyager: Grand Tour!

The game will be available on both the Google Play store and the Amazon Appstore, with support for Google Play Game Services and GameCircle (including a brand-new feature: achievements!).

All systems GO for launch!

Voyager 1.0.1

Our first update has just been approved for release on the App Store!

What’s included? Mostly UI and UX improvements: stuff to improve the overall play experience. First up, mission sets now display completion percent with a new progress meter. Earn gold with two stars on every mission for a perfect score!

grandtour_levelsets_1_0_1

We got rid of the need to visit a sub-menu to select an alternative probe – now you can just swipe side-to-side on the title menu to switch. There’s also a brand new bonus probe: Mariner 2, the first successful planetary flyby and great-grandfather of the Voyager missions, is free for anyone who rates (or re-rates) the game!

grandtour_probe_mariner2

On the title menu, there are links to our Facebook and Twitter profiles (please like and/or follow Rumor Games!). Finally, swipe sensitivity has been bumped up in all menus, and the touch target are bigger for small buttons – basically, a bunch of stuff to make the UI feel better and more responsive.

Check it out today, and let us know what you think!
 
Download_on_the_App_Store_Badge_US-UK_135x40_0824

Fast Scene Switching in the Unity Editor

One of the many powerful features of Unity is the ability to write extensions for the editor. As I worked on Voyager: Grand Tour, I found myself doing a number of repetitive tasks – not terribly time-consuming individually, but frustrating enough in aggregate to get me curious about optimizing my workflow with software. Still, I put it off, figuring I didn’t have time to divert toward extraneous development to save a few seconds here and there.

Well, a few months ago, a friend of mine by the name of Zach Aikman gave a talk on Unity Editor extensions at the local Unity user group meetup. His detailed overview provided more than enough information to get me started, and the first thing I did when I got home was to whip up a solution to a problem that, while small, had nagged me frequently while developing Voyager: quickly switching between scenes.

In my game, I split my content and menus up into a lot of scenes that I frequently had to switch between, which in the default Unity editor meant a lot of pointlessly scrolling around in the project view. This simple editor window grabs a list of scenes from the Build Settings and presents them as buttons for fast switching. It’s dead simple, but it genuinely saves me time and frustration every day, and I’m happy to share it with anyone who’s interested!

// --------------------------------
// <copyright file="SceneViewWindow.cs" company="Rumor Games">
//     Copyright (C) Rumor Games, LLC.  All rights reserved.
// </copyright>
// --------------------------------

using System.IO;
using UnityEditor;
using UnityEngine;

/// <summary>
/// SceneViewWindow class.
/// </summary>
public class SceneViewWindow : EditorWindow
{
    /// <summary>
    /// Tracks scroll position.
    /// </summary>
    private Vector2 scrollPos;

    /// <summary>
    /// Initialize window state.
    /// </summary>
    [MenuItem("Window/Scene View")]
    internal static void Init()
    {
        // EditorWindow.GetWindow() will return the open instance of the specified window or create a new
        // instance if it can't find one. The second parameter is a flag for creating the window as a
        // Utility window; Utility windows cannot be docked like the Scene and Game view windows.
        var window = (SceneViewWindow)GetWindow(typeof(SceneViewWindow), false, "Scene View");
        window.position = new Rect(window.position.xMin + 100f, window.position.yMin + 100f, 200f, 400f);
    }

    /// <summary>
    /// Called on GUI events.
    /// </summary>
    internal void OnGUI()
    {
        EditorGUILayout.BeginVertical();
        this.scrollPos = EditorGUILayout.BeginScrollView(this.scrollPos, false, false);

        GUILayout.Label("Scenes In Build", EditorStyles.boldLabel);
        for (var i = 0; i < EditorBuildSettings.scenes.Length; i++)
        {
            var scene = EditorBuildSettings.scenes[i];
            if (scene.enabled)
            {
                var sceneName = Path.GetFileNameWithoutExtension(scene.path);
                var pressed = GUILayout.Button(i + ": " + sceneName, new GUIStyle(GUI.skin.GetStyle("Button")) { alignment = TextAnchor.MiddleLeft });
                if (pressed)
                {
                    if (EditorApplication.SaveCurrentSceneIfUserWantsTo())
                    {
                        EditorApplication.OpenScene(scene.path);
                    }
                }
            }
        }

        EditorGUILayout.EndScrollView();
        EditorGUILayout.EndVertical();
    }
}

Now also available on the Unify Community Wiki.