PROJECT DESCRIPTION

Rollcore was one of my very first games that I have made and was created as part of one of my assignmrnts during my studies on creative media and production (Games Development). This game consists of a singular ball that the player controls and explores a vast world filled with landmarks, enemies, healthpacks and more! 

 

During the development of this game, I didnt think nor know too much about how "good" the game works nor looks, I just wanted to practise and create however the outcome was more satisfying and celebratory that I have anticipated, making me proud of my first game I created and motivating more to explore this career and what kind of amazing new ideas and titles I could either make myself or help make within a team. 

 

I do eventually intend to "remaster" and recreate this game in a more appealing and optimised fashion with a debut to more abilities and possible areas/landmarks. (Keep your eye out for that!)

! PLAY HERE !

This is only a prototype of the game, assume updates to be launched here

GAME DESIGN DOCUMENT

HIGHLIGHT IDEAS GENERATION

MAIN MECHANIC

 

The flow chart above shows my rough plan on how I would plan out the implemntation of the main mechanic for Gravikinesis, that being the alteration of gravity that the player will be able to control. First of all I needed to make sure that I could identify when the player is currently within an area that forces the gravity, I thought of using the 2D OnTrigger methods that Unity includes and changing a boolean whenever the player enters and leave that certain areas.  If that boolean was to be false, it would mean that the player is not in a forced area of gravity and therefore allows the player to use the mechanic where they can manually control the gravity with no restrictions. I had the idea to be able to make the gravity pull objects in a certain ways (up, down left and right) with the use of the 2DPhysics.Physics = new Vector2(x,y). 

HIGHLIGHT CODE SNIPPETS


          public class GravitySwitch : MonoBehaviour
{
    private Vector3 _gravityChange;
    private bool _inForceArea;
    private bool _rotating;
    
    private Vector3 current;
    private Vector3 target;
    private float Step;
    private float MaxRadiain;
    void Start()
    {
        _gravityChange = new Vector3(0f, -9.81f, 0f);
        Physics2D.gravity = _gravityChange;
    }

    void Update()
    {
        if(_inForceArea)
        {
            return;
        }

        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            _gravityChange = new Vector3(0, 9.81f, 0);
            Physics2D.gravity = _gravityChange;

        }

        if (Input.GetKeyDown(KeyCode.DownArrow))
        {
            _gravityChange = new Vector3(0, -9.81f, 0);
            Physics2D.gravity = _gravityChange;
        }

        Debug.Log(_gravityChange);
    }
    private void OnTriggerStay2D(Collider2D other)
    {
        

        if (other.CompareTag("GravSwitchUp"))
        {
            Physics2D.gravity = new Vector3(0f, 9.81f, 0f);
            _inForceArea = true;
            return;
        }
        if (other.CompareTag("GravSwitchDown"))
        {
            Physics2D.gravity = new Vector3(0f, -9.81f, 0f);
            _inForceArea = true;
            return;
        }
    }
    private void OnTriggerExit2D(Collider2D collision)
    {
        _inForceArea = false;
        Physics2D.gravity = _gravityChange;
    }

    public void ResetGravity()
    {
        _gravityChange = new Vector3(0,-9.81f,0);
    }
}

        

      public class Spikes : MonoBehaviour
{
    private Vector2 _startPos;
    private GravitySwitch _gravitySwitch;
    [SerializeField] CinemachineCamera _startCamera;
    void Start()
    {
        _startPos = transform.position;
        _gravitySwitch = GetComponent();
    }

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (!collision.gameObject.CompareTag("Spike"))
        {
            return;
        }

        transform.position = _startPos;
        Physics2D.gravity = new Vector3(0, -9.81f, 0);
        _gravitySwitch.ResetGravity();
        _startCamera.Priority = 2;
    }
}
  

          public class Goal : MonoBehaviour
{
    [SerializeField] GameObject _levelComplete;

    private CharacterController2D _characterController;
    void Start()
    {
        _characterController = GetComponent();
    }

    // Update is called once per frame

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.CompareTag("Goal"))
        {
            _levelComplete.SetActive(true);
            _characterController.enabled = false;
        }
    }
}
          

ASSETS/TEXTURES/AUDIO USED

This is a simple sci-fi texture that I have found on Adobe Stocks, from Hybrid graphics. I feel its a good inspiration of what kind of texture and context I want Gravikinesis to be set in when I continue to develop this title further with adding more context to the game and the levels.

This is a standard 2D character controller that I have used help with my movement capabilities with this game, although I did want to remove some of the features the asset includes such as wall jumping and sliding as I wanted the movements to be simple. This controller was created and found on the unity asset store made by AisuKaze Studios