Posted on

How to Make ZigZag in Unity Lesson 2

In this lesson, I will teach you how to code a random binary path generator in C# for Unity. This will instantiate a new platform prefab randomly in one of two positions from the last instantiated platform segment. In the next lesson, we will make this mechanic be continuous and only stop when the player rolls off the path and loses the game.

Unlock Code and Member Content

PlatformGenerator.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlatformGenerator : MonoBehaviour
{
    [SerializeField] GameObject platformPrefab;
    [SerializeField] Transform currentPlatform;
    [SerializeField] int startingPlatformCount;

    int nextPlatformDirection;

    public static PlatformGenerator instance;

    private void OnEnable()
    {
        instance = this;
    }

    // Start is called before the first frame update
    void Start()
    {
        GenerateStartingPlatforms();
    }

    void GenerateStartingPlatforms()
    {
        for(int i = 0; i < startingPlatformCount; i++)
        {
            nextPlatformDirection = Random.Range(0, 2);
            if(nextPlatformDirection == 0)
            {
                currentPlatform = Instantiate(platformPrefab, currentPlatform.position + Vector3.right * 2, Quaternion.identity).transform;
            }
            else
            {
                currentPlatform = Instantiate(platformPrefab, currentPlatform.position + Vector3.forward * 2, Quaternion.identity).transform;
            }
        }
    }
    
}
using Photon.Chat;
using Photon.Pun;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class PhotonChatManager : MonoBehaviour, IChatClientListener
{
    #region Setup

    [SerializeField] GameObject joinChatButton;
    ChatClient chatClient;
    bool isConnected;
    [SerializeField] string username;

    public void UsernameOnValueChange(string valueIn)
    {
        username = valueIn;
    }

    public void ChatConnectOnClick()
    {
        isConnected = true;
        chatClient = new ChatClient(this);
        //chatClient.ChatRegion = "US";
        chatClient.Connect(PhotonNetwork.PhotonServerSettings.AppSettings.AppIdChat, PhotonNetwork.AppVersion, new AuthenticationValues(username));
        Debug.Log("Connenting");
    }

    #endregion Setup

    #region General

    [SerializeField] GameObject chatPanel;
    string privateReceiver = "";
    string currentChat;
    [SerializeField] InputField chatField;
    [SerializeField] Text chatDisplay;

    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        if (isConnected)
        {
            chatClient.Service();
        }

        if (chatField.text != "" &amp;&amp; Input.GetKey(KeyCode.Return))
        {
            SubmitPublicChatOnClick();
            SubmitPrivateChatOnClick();
        }
    }

    #endregion General

    #region PublicChat

    public void SubmitPublicChatOnClick()
    {
        if (privateReceiver == "")
        {
            chatClient.PublishMessage("RegionChannel", currentChat);
            chatField.text = "";
            currentChat = "";
        }
    }

    public void TypeChatOnValueChange(string valueIn)
    {
        currentChat = valueIn;
    }

    #endregion PublicChat

    #region PrivateChat

    public void ReceiverOnValueChange(string valueIn)
    {
        privateReceiver = valueIn;
    }

    public void SubmitPrivateChatOnClick()
    {
        if (privateReceiver != "")
        {
            chatClient.SendPrivateMessage(privateReceiver, currentChat);
            chatField.text = "";
            currentChat = "";
        }
    }

    #endregion PrivateChat

    #region Callbacks

    public void DebugReturn(DebugLevel level, string message)
    {
        //throw new System.NotImplementedException();
    }

    public void OnChatStateChange(ChatState state)
    {
        if(state == ChatState.Uninitialized)
        {
            isConnected = false;
            joinChatButton.SetActive(true);
            chatPanel.SetActive(false);
        }
    }

    public void OnConnected()
    {
        Debug.Log("Connected");
        joinChatButton.SetActive(false);
        chatClient.Subscribe(new string[] { "RegionChannel" });
    }

    public void OnDisconnected()
    {
        isConnected = false;
        joinChatButton.SetActive(true);
        chatPanel.SetActive(false);
    }

    public void OnGetMessages(string channelName, string[] senders, object[] messages)
    {
        string msgs = "";
        for (int i = 0; i &lt; senders.Length; i++)
        {
            msgs = string.Format("{0}: {1}", senders[i], messages[i]);

            chatDisplay.text += "\n" + msgs;

            Debug.Log(msgs);
        }

    }

    public void OnPrivateMessage(string sender, object message, string channelName)
    {
        string msgs = "";

        msgs = string.Format("(Private) {0}: {1}", sender, message);

        chatDisplay.text += "\n " + msgs;

        Debug.Log(msgs);
        
    }

    public void OnStatusUpdate(string user, int status, bool gotMessage, object message)
    {
        throw new System.NotImplementedException();
    }

    public void OnSubscribed(string[] channels, bool[] results)
    {
        chatPanel.SetActive(true);
    }

    public void OnUnsubscribed(string[] channels)
    {
        throw new System.NotImplementedException();
    }

    public void OnUserSubscribed(string channel, string user)
    {
        throw new System.NotImplementedException();
    }

    public void OnUserUnsubscribed(string channel, string user)
    {
        throw new System.NotImplementedException();
    }

    #endregion Callbacks
}

Posted on

How to Make ZigZag in Unity Lesson 1

Welcome to our complete series on how to make the simple mobile game ZigZag. Only the first lesson of this series is available to the public. You will need to be a member of our site to get the rest of this series.

ZigZag was a pretty popular game a few years ago.

Downloaded it here
Android: https://play.google.com/store/apps/details?id=com.ketchapp.zigzaggame
iOS: https://apps.apple.com/us/app/zigzag/id951364656

For this first lesson, I will show you everything you need to do to set up in your game scene. We will cover the set up of your camera, player’s ball, and platform prefabs. In the next lesson we will dive into some code and we will create a platform generator.

This is the first lesson on how to make ZigZag in Unity. This series is a member-only series so if you would like to gain access to the rest of this series then go sign up as a member today.

Unlock Code and Member Content

Posted on

How to Make Tic Tac Toe

Lesson 1 Setup

In this lesson, we will show you how to set up your Tic Tac Toe project in Unity.

Lesson 2 Scripts

In this lesson, we create some of the basic scripts for our Tic Tac Toe game.

Lesson 3 Onclick Controls

Now we will show you how to create some of the needed on click function for our Tic Tac Toe game.

Lesson 4 More On Click

This lesson continues on with the creation of more on click function for the different buttons we have in the game.

Lesson 5 Winner Check

This lesson will teach you one of the most important mechanics of Tic Tac Toe the checker. This function runs after each turn and is used to see if there is a winner.

Lesson 6 Winner Display

Once we find a winner we then need to display the winner to the screen. Without this function, you are just marking a grid with X’s and O’s.

Lesson 7 Scores

For this lesson, we will show you how to add points to a player’s score when the win a game.

Lesson 8 Rematch

For this lesson, we will work on some of the UI so the players can restart the game when the match is over.

Lesson 9 Player Display

For this lesson, we will show you how to switch the display for who’s turn it is.

Lesson 10 Cat

In this lesson, we will handle the condition if no one wins the game.

Become an Info Gamer Member Today

Sign up as a member and receive more
tutorials, code, and assets for FREE!