Posted on

Among Us in Unity – Coding Player Movement (Lesson 2)

For this lesson on how to create Among Us in Unity, we will be programming the player’s movement with the new input system of Unity. To get started we will need to add the new input system to our project. To do this go to your project manager window, find the input system, and click install. Once the input system is installed we will open up our player controller script.

Inside this script, we will need to add some new variables including a new Input Action. We will then need to initialize these variables. After which we will read in the player’s input as a vector2. We will then be able to move the player based on the player’s input.

Unlock Code and Member Content

AU_PlayerController.cs

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

public class AU_PlayerController : MonoBehaviour
{
    //Components
    Rigidbody myRB;
    Transform myAvatar;
    //Player movement
    [SerializeField] InputAction WASD;
    Vector2 movementInput;
    [SerializeField] float movementSpeed;


    private void OnEnable()
    {
        WASD.Enable();

    }

    private void OnDisable()
    {
        WASD.Disable();

    }


    // Start is called before the first frame update
    void Start()
    {
        myRB = GetComponent<Rigidbody>();
        
        myAvatar = transform.GetChild(0);

    }

    // Update is called once per frame
    void Update()
    {
        movementInput = WASD.ReadValue<Vector2>();
        
        if (movementInput.x != 0)
        {
            myAvatar.localScale = new Vector2(Mathf.Sign(movementInput.x), 1);
        }
    }

    private void FixedUpdate()
    {
        myRB.velocity = movementInput * movementSpeed;
    }

}
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 1 Comment

Among Us in Unity – Creating a Player Prefab (Lesson 1)

Welcome to the first lesson of our tutorial series on how to create the game Among Us in Unity. For this lesson, we will show you how to set up our Among Us project in Unity and How to create the Player Prefab.

To set up the Unity project we will first need to open Unity Hub. You will then need to click the create button. This will open a new window in which you will select 2D, give your project a name like Among Us, select the correct file location for your Unity project, and finally click create.

Once Unity is finished with setting up your project we will create our Among Us player prefab. To do this we will start with an empty game object. Then rename this object to AU_Player for Among Us. Change the tag to Player which is a default tag that should already exist. You will then need to add two components to this object a rigidbody and a capsule collider. For the rigidbody, you will need to disable gravity and freeze its z position and all its rotations.

We will then need to add the spites for our Player. First, download the needed sprite sheets from this post. You will then need to slice these images with a grid of cell size 128. Now, add one sprite object as a child to the empty game object and apply the first sprite to the sprite renderer component. We will then add another sprite object to this object. Apply the first part sprite to this sprite renderer and make sure this sprite is moved in front of the other sprite.

You can then resize the capsule collider to fit the size of this sprite. Finally, you can make a prefab out of this object.

Posted on

I Made Among Us in One Day with Unity ?

I created many of the basic game mechanics of the game Among us in less than 24 hours with Unity. This is the first video of our tutorial series on how to create the viral video game Among Us. We will show you how to create your own version of Among Us. We will go through the game mechanics and create Among us from the ground up.

This series on how to create Among us in Unity will be one of the complete and extensive game series we have done so far. We will teach you how to create the game, the chat system, and multiplayer gameplay with Photon PUN 2.