
In this lesson on how to make StackColor in Unity, we will be showing you how to create the score multiplying platforms that come after the finish line.
Multiplier.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Multiplier : MonoBehaviour { [SerializeField] float multiplierValue; [SerializeField] Color multiplierColor; [SerializeField] Renderer[] myRends; void Start() { SetColor(); } private void OnCollisionEnter(Collision collision) { Debug.Log(collision.gameObject.name + " hit"); if(collision.transform.tag == "Pickup") { GameControllerStackColor.instance.UpdateMultiplier(multiplierValue); } } void SetColor() { for (int i = 0; i < myRends.Length; i++) { myRends[i].material.SetColor("_Color", multiplierColor); } } }
GameControllerStackColor.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; public class GameControllerStackColor : MonoBehaviour { public static GameControllerStackColor instance; [SerializeField] Text scoreDisplay; int score; float multiplierValue; [SerializeField] int nextSceneIndex; private void OnEnable() { if (instance == null) instance = this; } private void Update() { if(Input.GetKeyDown(KeyCode.Escape)) { SceneManager.LoadScene(0); } if(Input.GetKeyDown(KeyCode.Space)) { SceneManager.LoadScene(nextSceneIndex); } } public void UpdateScore(int valueIn) { score += valueIn; scoreDisplay.text = score.ToString(); } public void UpdateMultiplier(float valueIn) { if (valueIn <= multiplierValue) return; multiplierValue = valueIn; scoreDisplay.text = (score * multiplierValue).ToString(); } }
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 != "" && 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 < 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 }