Home
In opdracht van Dit spel is te spelen via

Over

Voor dit schoolproject van 8 weken moesten we een first-person puzzelspel maken. De eerste twee weken gingen over pre-productie, in deze fase moesten we een hoofdmonteur bedenken, onze ideeën presenteren, levels rond deze monteur ontwerpen en een proof of concept bouwen. Daarna zijn we de komende zes weken aan de productie begonnen, waarbij de primaire focus lag op het creëren van een gepolijste game.

Teamgenoten

Dit project is samen gemaakt met
Floris R - Mar G - Eliza J - Lola P - Tijmen Z

Spel idee

Quantum shuffle is een first-person puzzelspel waarbij het doel is om uit een mysterieus laboratorium te ontsnappen. Om dit te doen, moet je een controlepaneel openen waar je een raster met kamers vindt. Deze kamers op het raster komen rechtstreeks overeen met de kamers waar je doorheen loopt terwijl je probeert te ontsnappen. Koppel de deuren aan elkaar om kamers met elkaar te verbinden en lijn ze zo uit dat er een pad naar de uitgang ontstaat.

Mijn bijdrage

Player pickup and dropping

In de levels wordt er een cube gebruikt die je kan op pakken en neerleggen zodat je hoger kan komen in sommige gebieden. Om dit zo goed mogelijk te maken heb ik inspiratie genomen van hoe portals systeem werkt.

Power cables

Een ander deel van de levels zijn de power cables. Die zorgen er voor dat er een extra uitdaging in het spel zit.
In het begin wanneer de power cabels voor het eerst worden ingeladen kijken ze voor endpoints die aanwezig zijn in de childeren. De Endpoints zijn punten waarbij andere wires kunnen verbinden. Elke keer wanneer een wire van locatie verandert wordt er gecontroleerd of er een verbinden gemaakt kan worden. Dit wordt gedaan doormiddel van een loop die het de start van de connecties probeerd te vinden door andere connecties.
            
public bool IsConnectingToSource(Wire wire)
{
    Wire current = wire;
    for (int i = 0; i < _wires.Count; i++)
    {
        // check if the current wire is a power source
        if (current && current.isPowerSource)
            return true;

        if (current == null)
            break;

        // check next cable in the list
        current = current._poweredBy;
    }
    return false;
}
            
            

Level transition

Voor een betere flow te gekrijgen heb ik een Level transitie gemaakt. Dit werkt door eerst een tussen level te laden. Die bevat een Canvas waarin de laad animatie zit.

Game manager

Een van de problemen waar ik vaak last van heb is met Singletons. Vaak omdat de implementatie irritant is om te maken. Daarvoor heb ik een speciale Game manager class gemaakt. Deze class verzekered dat singletons altijd aanwezig zijn.
        
private static readonly Type SubManagerType = typeof(ISubManager);

[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
static void StartManagement()
{
    //create a new game manager
    GameObject NewGameManager = new GameObject("GameManager");
    NewGameManager.AddComponent();

    List CreatedManagers = new List();

    //filter types on who are composite of ISubManager
    Type[] AssemblyTypes = Assembly.GetExecutingAssembly().GetTypes();
    IEnumerable
    ManagerTypes = AssemblyTypes.Where(e => IsSubmanager(SubManagerType, e));

    //loop through each manager
    foreach (var ManagerType in ManagerTypes)
    {
        //create new object with sub manager on it
        GameObject ManagerGameObject = new GameObject(ManagerType.Name);
        var submanager = (ISubManager)ManagerGameObject.AddComponent(ManagerType);
        ManagerGameObject.transform.SetParent(NewGameManager.transform);

        //first initialization round
        submanager.Initialize();
        CreatedManagers.Add(submanager);
    }
    //second initialization round
    CreatedManagers.ForEach(e => e.AfterInitialize());
    }