using System;
using UnityEngine;
using TMPro;
public class ClickerController : MonoBehaviour {
[Header("OBJECTS")]
[SerializeField] private AudioSource buttonClick;
[SerializeField] private AudioSource starClick;
[SerializeField] private TMP_Text scoreText;
[SerializeField] private TMP_Text starLevelText;
[SerializeField] private TMP_Text upPriceText;
private Camera mainCamera;
private RaycastHit cachedHit;
[Header("VARIABLES")]
[SerializeField] private int scoreCount = 0;
[SerializeField] private int starLevel = 1;
[SerializeField] private int upPrice = 10;
private bool soundMuted = false;
#region UnityOperations
private void Start() {
Cursor.lockState = CursorLockMode.Confined;
mainCamera = Camera.main;
LoadPlayerPrefs();
TextUpdate();
}
private void Update() {
if (Input.GetMouseButtonDown(0)) {
TryClick(mainCamera.ScreenPointToRay(Input.mousePosition));
}
}
private void TryClick(Ray mouseRay) {
if (Physics.Raycast(mouseRay, out cachedHit)) {
if (cachedHit.transform.CompareTag("Star")) {
scoreCount += (starLevel == 1) ? 1 : starLevel * 2;
scoreText.text = $"{scoreCount}";
starClick.Play();
}
}
}
#endregion
#region UI_Interaction
public void LevelUpButton() {
if (scoreCount >= upPrice) {
scoreCount -= upPrice;
starLevel++;
upPrice = starLevel * 10;
TextUpdate();
}
buttonClick.Play();
}
public void SoundMuteButton() {
soundMuted = !soundMuted;
AudioListener.volume = soundMuted ? 0f : 1f;
buttonClick.Play();
}
public void ResetButton() {
scoreCount = 0;
starLevel = 1;
upPrice = 10;
TextUpdate();
buttonClick.Play();
}
public void ExitButton() {
SavePlayerPrefs();
Application.Quit();
}
#endregion
#region FlowControl
private void OnApplicationFocus(bool hasFocus) {
if (hasFocus)
TextUpdate();
}
private void TextUpdate() {
scoreText.text = scoreCount.ToString();
starLevelText.text = "Уровень звезды: " + starLevel;
upPriceText.text = "Цена улучшения: " + upPrice;
}
private void LoadPlayerPrefs() {
soundMuted = PlayerPrefs.HasKey("Volume") ? PlayerPrefs.GetInt("Volume") == 0 : false;
AudioListener.volume = soundMuted ? 0f : 1f;
scoreCount = PlayerPrefs.GetInt("ScoreCount", scoreCount);
starLevel = PlayerPrefs.GetInt("StarLevel", starLevel);
upPrice = PlayerPrefs.GetInt("UpPrice", upPrice);
}
private void SavePlayerPrefs() {
PlayerPrefs.SetInt("Volume", soundMuted ? 0 : 1);
PlayerPrefs.SetInt("ScoreCount", scoreCount);
PlayerPrefs.SetInt("StarLevel", starLevel);
PlayerPrefs.SetInt("UpPrice", upPrice);
}
#endregion
}
❗️ ВНИМАНИЕ! раздача опен соус: ❗️
Весь контроллер для кликера (монолитный)
Приложена оптимизированная версия, (вроде) должна работать быстрее, чем в имеющемся билде (я слишком сильно модифицировал проект после первого билда, скрипт тоже изменился).
Сам кликер тоже в зипке приложил - виндовс/линух/мак.
Выставляете Canvas, на нем три текста, два аудио, указываете на камере все недостающие поля и получаете готовый кликер на яндекс игры
Код простой, но найдется чем разозлить Шашки Онлайновича 😉
#ОпенСоус #Интересное