top of page

Better Together

Better Together features 2 unique characters trapped in a series of puzzles each with complimentary abilities: Explosion + Implosion. This game emphasizes that only through cooperation can you solve some of your most pressing challenges.

 

Better Together is a Solo Project made in Unity with C# and controls for Xbox360 Controllers in 3 weeks with 3 levels of escalating difficulty.

Development Experience

Gameplay Mechanics

Level Design

Tutorial Design

Data Saving

*Custom Editor Scripting

SFX Design

UI

*Code Sample

+ Improved Workflow

+ Reusable

+ Extensible

using UnityEditor;
using UnityEngine;
using System.Collections;

[CustomEditor(typeof(Activator))]
[CanEditMultipleObjects]
public abstract class Activator_Editor: Editor{
    public SerializedProperty
        TriggerType_Prop,
        DependsOnPlayerType_Prop,
        PlayerType_Prop,
        InputButton_Prop,
        ActivateOnTrigger_Prop,
        OneOff_Prop,
        Noise_Prop;

    #region property names
    private string triggerType = "triggerType";
    private string dependsOnPlayerType = "dependsOnPlayerType";
    private string playerType = "playerType";
    private string inputButton = "inputButton";
    private string activateOnTrigger = "activateOnTrigger";
    private string oneOff = "oneOff";
    private string noise = "noise";
    #endregion

    protected abstract void OnEnable(){
        TriggerType_Prop = serializedObject.FindProperty(triggerType);
        DependsOnPlayerType_Prop =

               serializedObject.FindProperty(dependsOnPlayerType);
        PlayerType_Prop = serializedObject.FindProperty(playerType);
        InputButton_Prop = serializedObject.FindProperty(inputButton);
        ActivateOnTrigger_Prop  = serializedObject.FindProperty(activateOnTrigger);
        OneOff_Prop = serializedObject.FindProperty(oneOff);
        Noise_Prop = serializedObject.FindProperty(noise);
    }

    public override void OnInspectorGUI(){
        serializedObject.Update();

        EditorGUILayout.PropertyField(TriggerType_Prop);

        #region If Player Type Matters
        bool showPlayerChoice = DependsOnPlayerType_Prop.boolValue;
        if (showPlayerChoice){
            EditorGUILayout.PropertyField(PlayerType_Prop);
        }
        #endregion

        EditorGUILayout.PropertyField(DependsOnPlayerType_Prop);

        #region If Input Required
        int triggerTypeCount = (int)TriggerType_Prop.enumValueIndex;
        if (triggerTypeCount == (int)TriggerType.Input ||
            triggerTypeCount == (int)TriggerType.InputAndOnTriggerStay){
            
            EditorGUILayout.PropertyField(InputButton_Prop);
        }
        #endregion

        EditorGUILayout.PropertyField(ActivateOnTrigger_Prop);
        EditorGUILayout.PropertyField(OneOff_Prop);
        EditorGUILayout.PropertyField(Noise_Prop);

        serializedObject.ApplyModifiedProperties();
    }
}

using UnityEditor;
using UnityEngine;
using System.Collections;

[CustomEditor(typeof(ScriptActivator))]
public class ScriptActivator_Editor : Activator_Editor {
    
    public SerializedProperty ScriptsToActivate_Prop;
    private string scriptsToActivate = "scriptsToActivate";
    
    protected override void OnEnable(){
        base.OnEnable();
        ScriptsToActivate_Prop = 

             serializedObject.FindProperty(scriptsToActivate);
    }
    
    public override void OnInspectorGUI(){
        base.OnInspectorGUI();
        EditorGUILayout.PropertyField(ScriptsToActivate_Prop, true);
        serializedObject.ApplyModifiedProperties();
    }
}

using UnityEditor;
using UnityEngine;
using System.Collections;

[CustomEditor(typeof(ButtonActivator))]
public class ButtonActivator_Editor : Activator_Editor {
    
    public SerializedProperty ButtonType_Prop;
    private string buttonType = "buttonType";
    
    protected override void OnEnable(){
        base.OnEnable();
        ButtonType_Prop = 

              serializedObject.FindProperty(buttonType);
    }
    
    public override void OnInspectorGUI(){
        base.OnInspectorGUI();
        EditorGUILayout.PropertyField(ButtonType_Prop, true);
        serializedObject.ApplyModifiedProperties();
    }
}

using UnityEditor;
using UnityEngine;
using System.Collections;

[CustomEditor(typeof(GameObjectActivator))]
public class GameObjectActivator_Editor : Activator_Editor {

    public SerializedProperty GameObjectsToActivate_Prop;
    private string gameObjectsToActivate = 

           "gameObjectsToActivate";

    protected override void OnEnable(){
        base.OnEnable();
        GameObjectsToActivate_Prop = 

              serializedObject.FindProperty(gameObjectsToActivate);
    }

    public override void OnInspectorGUI(){
        base.OnInspectorGUI();
        EditorGUILayout.PropertyField(GameObjectsToActivate_Pro               p, true);
        serializedObject.ApplyModifiedProperties();
    }
}

For complete source code, visit the GitHub page for Better Together:

Development Experience Icons sourced from thenounproject.com and created by:

  • "Jack"

  • Jacob Eckert

  • Stephen JB Thomas

  • Michal Beno

  • useiconic.com

  • Marek Polakovic

  • Stan Diers

 

bottom of page