Game programming patterns in Unity with C#

Source code: GitHub

Share me

twitter logo facebook logo

...and follow me on Twitter: @eriknordeus

11. Subclass Sandbox pattern

This tutorial is outdated, you can find the latest version here: GitHub

What's the subclass sandbox pattern?

The subclass sandbox pattern describes a basic idea, while not having a lot of detailed mechanics. You will need the pattern when you have several similar subclasses. If you have to make a tiny change, then change the base class, while all subclasses shouldn't have to be touched. So the base class has to be able to provide all of the operations a derived class needs to perform.

The subclass sandbox pattern in Unity

We will here use the same code as in the book, but translated to C#. You will just need two scripts: a GameController and a Superpower script, which will include several classes. In your final game you should probably have one class per script, but we will here save space!

This is the GameController class:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
namespace SubclassSandbox
{
 public class GameController : MonoBehaviour
 {
 //A list that will store all superpowers
 List<Superpower> superPowers = new List<Superpower>();
 void Start()
 {
 superPowers.Add(new SkyLaunch());
 superPowers.Add(new GroundDive());
 }
 void Update()
 {
 //Activate each superpower each update
 for (int i = 0; i < superPowers.Count; i++) { superPowers[i].Activate(); } } } } 

And these are the Superpower classes

using UnityEngine;
using System.Collections;
using System;
namespace SubclassSandbox
{
 //This is the base class
 public abstract class Superpower
 { 
 //This is the sandbox method that a subclass has to have its own version of
 public abstract void Activate();
 //All of the operations a derived class needs to perform - called from Activate()
 protected void Move(float speed)
 {
 Debug.Log("Moving with speed " + speed);
 }
 protected void PlaySound(string coolSound)
 {
 Debug.Log("Playing sound " + coolSound);
 }
 protected void SpawnParticles()
 {
 }
 }
 //Subclasses
 public class SkyLaunch : Superpower
 {
 //Has to have its own version of Activate()
 public override void Activate()
 {
 //Add operations this class has to perform
 Move(10f);
 PlaySound("SkyLaunch");
 SpawnParticles();
 }
 }
 public class GroundDive : Superpower
 {
 //Has to have its own version of Activate()
 public override void Activate()
 {
 //Add operations this class has to perform
 Move(15f);
 PlaySound("GroundDive");
 SpawnParticles();
 }
 }
}

If you add the GameController script to an empty gameobject in Unity and press play, you will see nothing exciting except a few lines in the console window. But as said before, this design pattern describes a basic idea.


Back

AltStyle によって変換されたページ (->オリジナル) /