Table of Contents
UIController
UI Controller Script
using System.Collections; using System.Collections.Generic; using UnityEngine; using TMPro; public class ZombieUIManager : MonoBehaviour { public TextMeshProUGUI bulletCount; public TextMeshProUGUI staminaCount; public TextMeshProUGUI healthCount; public TextMeshProUGUI coinCount; private ZombieGunController _zombieGunController; private ZombiePlayerController _zombiePlayerController; private ZombieHealth _zombieHealth; private void Awake() { _zombieGunController = FindObjectOfType<ZombieGunController>(); _zombieGunController.sendEventToUI.AddListener(UpdateBulletCount); _zombiePlayerController = FindObjectOfType<ZombiePlayerController>(); _zombiePlayerController.sendEventToUI.AddListener(UpdateStaminaCount); _zombiePlayerController.onPlayerDied.AddListener(UpadatePlayerDied); initialStamina = _zombiePlayerController.runStamina; _zombieHealth = _zombiePlayerController.gameObject.GetComponent<ZombieHealth>(); _zombieHealth.sendEventHealthCount.AddListener(UpdateHealth); } private void UpdateBulletCount(int x) { bulletCount.text = x.ToString(); } private void UpdateHealth(float x) { healthCount.text = Mathf.Ceil(Mathf.Clamp(x, 0, 100)).ToString(); } private float initialStamina; private void UpdateStaminaCount(float x) { int staminaPercentage = Mathf.RoundToInt(Mathf.Clamp(x/initialStamina * 100, 0, 100)); staminaCount.text = staminaPercentage.ToString() + "%"; } private void UpadatePlayerDied() { } public void UpdateCoinCount(int x) { coinCount.text = x.ToString(); } }
Health
Health Script
using Sirenix.OdinInspector; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; public class ZombieHealth : MonoBehaviour { [HideInEditorMode] public UnityEvent sendEventOnMinusHealth; [HideInEditorMode] public UnityEvent<float> sendEventHealthCount; [SerializeField] public float _health { get; private set; } = 100f; private void Start() { sendEventHealthCount.Invoke(_health); } public bool IsDead() { if(_health <= 0f) { return true; } return false; } public void MinusHealth(float x) { _health -= x; sendEventOnMinusHealth.Invoke(); sendEventHealthCount.Invoke(_health); } [Button] public void FullHealth() { _health = 100f; } [Button] public void EmptyHealth() { _health = -1f; } }
Coin
CoinPickup Script
using Micosmo.SensorToolkit; using MoreMountains.Feedbacks; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; public class ZombieCoinController : MonoBehaviour { public static int totalPoint = 0; public GameObject coinObject; public RangeSensor rangeSensor; private AudioSource audSource; public AudioClip audClip; private void Awake() { audSource = this.GetComponent<AudioSource>(); rangeSensor.OnDetected.AddListener(AddPoint); } public void AddPoint(GameObject arg0, Sensor arg1) { Action<int> firstAction = FindObjectOfType<ZombieUIManager>().UpdateCoinCount; audSource.PlayOneShot(audClip); totalPoint += 1; rangeSensor.enabled = false; firstAction(totalPoint); coinObject.SetActive(false); } }
Ammo
AmmoPickup Script
using Micosmo.SensorToolkit; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class ZombieAmmoPickup : MonoBehaviour { public int respawnTime = 60; public int bulletCount = 15; private RangeSensor _rangeSensor; private ZombieGunController _gunController; private MeshRenderer _meshRenderer; private AudioSource _audioSource; private void Start() { _rangeSensor = this.GetComponent<RangeSensor>(); _rangeSensor.OnDetected.AddListener(ReceivedEventOnDetected); _gunController = FindObjectOfType<ZombieGunController>(); _meshRenderer = this.GetComponent<MeshRenderer>(); _audioSource = this.GetComponent<AudioSource>(); } private bool _canBePickedUp = true; private void ReceivedEventOnDetected(GameObject arg0, Sensor arg1) { if (!_canBePickedUp) return; _gunController.addBullet(bulletCount); _meshRenderer.enabled = false; _canBePickedUp = false; _audioSource.Play(); StartCoroutine(enableIt()); } private IEnumerator enableIt() { yield return new WaitForSeconds(respawnTime); _meshRenderer.enabled = true; _canBePickedUp = true; } }