Posted on

Multiplayer Marble Game – Collaborative Unity Project

Play Now

Check back every Monday for updates

Welcome to our all-new collaborative project. We tried to do a joint project with our subscribers before. However, the scope of the project was a bit too much. While I will return to that project sometime in the future we have a new project that will be much easier to complete.

There are countless ball games out there on the game markets but nothing like what we want to create. I want to create a multiplayer race game that has a variety of levels created by the players. I want to collaborate with all of you to create something everyone can enjoy.

In order to participate in this project, you will need to become a supporter on our website. As a supporter, you will receive exclusive free access to our Marble Level Builder Packager. This package will help you to create the levels for this game. The package includes basic Platforms that have a simple drag and drop design flow. We have also included moving, ghost, and launch platforms in this package.

Project Rules

  1. InfoGamer will handle the general development of this Game
  2. You must be a supporter to participate in this project
    • This will give you access you our exclusive Marble Level Builder package in addition to all other supporter perks
  3. In order to keep the project manageable, we will limit the Collaboration to level design.
  4. We will Include your display name in the credits of the game.
  5. Have Fun!

How to Participate

Basic Levels

  1. Sign up to become a supporter.
  2. Download our free Marble Level Builder Package.
  3. Import package into an empty Unity Project.
  4. Use platform prefabs to design a unique level.
  5. Export Scenes and any new dependant files you have created as Unity Package.
  6. Upload the Unity Package below.

Advanced Levels

  1. Sign up to become a supporter.
  2. Download our free Marble Level Builder Package.
  3. Import package into an empty Unity Project.
  4. Use platform prefabs to design a unique level.
  5. Use Blender or other 3D modeling software to create and add your own platform prefabs to the scene (Use FBX Files)
  6. Export Scenes and any new dependant files you have created as Unity Package.
  7. Upload the Unity Package below.

Single Platform

  1. Sign up to become a supporter.
  2. Use Blender to create one part, platform, or obstacle for me to add to any level. (Use FBX Files)
  3. Add the part to the empty Unity project and make a prefab out of it.
  4. Export prefab as Unity Package
  5. Upload the Unity Package below.

Development Tips

  • When you Design your levels try to either make a race or a survival game mode.
  • Try to keep the time it takes to complete your levels between 2-5 mins.
  • Have the start of your levels big enough to fit up to 50 balls.
  • Keep the style simple, think geometric.
  • Refrain from making any direct changes to the files included in our Unity Package
  • When submitting your levels, only include the scene files and new files that not include in our Unity Package.
  • Give us a display name that you want to be recognized by in the credits of this game.

Download Package

*This unity package requires using the New Input System.

Additional Videos

Posted on

Network – Cross Platform Native Plugins: Essential Kit

Download

Documentation: https://assetstore.essentialkit.voxelbusters.com/

0:00 Welcome to Network and Web View CPNP2
0:16 Overview
0:36 Setup
1:08 Usage

For this lesson on how to use the Cross Platform Native Plugins in Unity, I will show you how to use the Network and Web View services. The Networking service makes it so you can check to see if the user’s device has a connection to the internet. You are then able to block the user from accessing parts of your game if they don’t have a network connection.

IG_NetworkServices.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using VoxelBusters.EssentialKit;

public class IG_NetworkServices : MonoBehaviour
{
    public static IG_NetworkServices instance;

    public bool isInternetActive;
    public bool isHostReachable;
    public bool isNotifierActive;

    private void OnEnable()
    {
        // register for events
        NetworkServices.OnHostReachabilityChange += OnHostReachabilityChange;
        NetworkServices.OnInternetConnectivityChange += OnInternetConnectivityChange;
        NetworkServices.StopNotifier();
    }

    private void OnDisable()
    {
        // unregister from events
        NetworkServices.OnHostReachabilityChange -= OnHostReachabilityChange;
        NetworkServices.OnInternetConnectivityChange -= OnInternetConnectivityChange;
    }

    // Start is called before the first frame update
    void Start()
    {
        instance = this;
    }

    private void OnInternetConnectivityChange(NetworkServicesInternetConnectivityStatusChangeResult result)
    {
        Debug.Log("Received internet connectivity changed event.");
        Debug.Log("Internet connectivity status: " + result.IsConnected);
        isInternetActive = NetworkServices.IsInternetActive;
    }

    private void OnHostReachabilityChange(NetworkServicesHostReachabilityStatusChangeResult result)
    {
        Debug.Log("Received host reachability changed event.");
        Debug.Log("Host reachability status: " + result.IsReachable);
        isHostReachable = NetworkServices.IsHostReachable;
    }

    //IG_NetworkServices.instance.CheckNetwork();
    public void CheckNetwork()
    {
        NetworkServices.StartNotifier();
    }

    //IG_NetworkServices.instance.StopStatus();
    public void StopStatus()
    {
        NetworkServices.StopNotifier();
    }
}
Posted on

Address Book – Cross Platform Native Plugins: Essential Kit

Download

Documentation: https://assetstore.essentialkit.voxelbusters.com/

0:00 Welcome to Address Book CPNP2
0:18 Overview
0:34 Setup
1:05 Usage

The Address Book allows the user to access their contacts inside your game. This can be helpful in sharing your game.

IG_AddressBookService.cs

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using VoxelBusters.CoreLibrary;
using VoxelBusters.EssentialKit;

public class IG_AddressBookService : MonoBehaviour
{
    public static IG_AddressBookService instance;

    AddressBookContactsAccessStatus status;

    public IAddressBookContact[] allContacts; //IG_AddressBookService.instance.allContacts[index];

    // Start is called before the first frame update
    void Start()
    {
        instance = this;
    }

    //IG_AddressBookService.instance.ReadContacts();
    public void ReadContacts()
    {
        status = AddressBook.GetContactsAccessStatus();
        if (status == AddressBookContactsAccessStatus.NotDetermined)
        {
            AddressBook.RequestContactsAccess(callback: OnRequestContactsAccessFinish);
        }
        if(status == AddressBookContactsAccessStatus.Authorized)
        {
            AddressBook.ReadContacts(OnReadContactsFinish);
        }
    }

    private void OnRequestContactsAccessFinish(AddressBookRequestContactsAccessResult result, Error error)
    {
        Debug.Log("Request for contacts access finished.");
        Debug.Log("Address book contacts access status: " + result.AccessStatus);
        if (result.AccessStatus == AddressBookContactsAccessStatus.Authorized)
        {
            AddressBook.ReadContacts(OnReadContactsFinish);
        }
    }

    private void OnReadContactsFinish(AddressBookReadContactsResult result, Error error)
    {
        if (error == null)
        {
            allContacts = result.Contacts;

            var contacts = result.Contacts;
            Debug.Log("Request to read contacts finished successfully.");
            Debug.Log("Total contacts fetched: " + contacts.Length);
            Debug.Log("Below are the contact details (capped to first 10 results only):");
            for (int iter = 0; iter < contacts.Length && iter < 10; iter++)
            {
                Debug.Log(string.Format("[{0}]: {1}", iter, contacts[iter]));
            }
        }
        else
        {
            Debug.Log("Request to read contacts failed with error. Error: " + error);
        }
    }
}