Это канал Его Пренаибобрейшества. Несогласованный оборот публичных данных карается казнью на шампурах (декомпиляцией). Приятного пребывания.
чат канала: t.me/+vI2E4Nx1XVEyNmVi
- t.me/jeusdevstd
Post #290
402

- 😭 9
- 👎 2
- 🐳 2
- 😁 1
- 👀 1
JD @jeusdev
Showing posts older than #291 · Back to latest

JDC DevLog 🕳 Photo

gr_roll.jpg (1)

JDC DevLog 🕳 Photo
Вы используете using не по максимуму!
using используется почти во всех скриптах при работе с Unity. Я провел небольшой резерч на эту тему и приведу вам примеры использования, о которых вы могли не знать или знали не всё:1️⃣ Классический пример - импорт пространства имен:
using пришлось бы писать UnityEngine.Debug.Log() вместо Debug.Log())using UnityEngine;
UnityEngine, System и (в старых версиях) System.Collections.2️⃣ using для работы с ресурсами (IDisposable):
using (StreamReader reader = new StreamReader("file.txt")) {
string content = reader.ReadToEnd();
} // reader.Dispose() вызывается автоматическиDispose() гарантирован даже при исключениях.public class FileReader : IDisposable {
private StreamReader _reader;
public FileReader(string path) { _reader = new StreamReader(path); }
public void Dispose() {
_reader?.Dispose(); // Закрываем файл
Console.WriteLine("Ресурсы освобождены!");
}
}using автоматически вызывает Dispose() при выходе из блока, даже если произошла ошибка. Вот пример кода чуть выше, только без using:StreamReader reader = null;
try {
reader = new StreamReader("data.txt");
string content = reader.ReadToEnd();
Console.WriteLine(content);
}
finally {
reader?.Dispose(); // Гарантированное освобождение
}
Texture) используют нативную память, но не реализуют IDisposable. Вместо этого у них есть:Destroy() – для удаления игровых объектовResources.UnloadUnusedAssets() – для принудительной очисткиusing не сработает ❌3️⃣ Статический импорт:
using static UnityEngine.Mathf;
float x = Clamp(5, 0, 10); // Вместо Mathf.Clamp()
using static UnityEngine.GameObject; //GameObject - не статический
4️⃣ Псевдонимы:
// using Псевдоним = Полное.Имя.Пространства;
using StringList = System.Collections.Generic.List<string>;
StringList names = new StringList();
global using Vec3 = UnityEngine.Vector3;
Vec3 можно использовать в любом файле проекта без повторного объявления.

Forwarded from сглыпа)
This post (sticker, poll or similar) has no web preview. Open in Telegram

This post (sticker, poll or similar) has no web preview. Open in Telegram


program prog;
var i, z: integer; { объявляем поля }
begin { begin и end - операторные скобки }
z := 0; { присваивание }
for i := 1 to 5 do {цикл 1-5 включительно}
begin
z := z + i;
end;
writeln('Сумма чисел от 1 до 5 = ', z); { вывод строки }
end.

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
}