TGViewer
Channel Public Channel
JDC DevLog 🕳

JDC DevLog 🕳

@jeusdev

Это канал Его Пренаибобрейшества. Несогласованный оборот публичных данных карается казнью на шампурах (декомпиляцией). Приятного пребывания.

чат канала: t.me/+vI2E4Nx1XVEyNmVi

- t.me/jeusdevstd
Subscribers
51
Photos
93
Videos
6
Links
17

Showing posts older than #291 · Back to latest

Older Posts 20 shown
Post #290 402
  • 😭 9
  • 👎 2
  • 🐳 2
  • 😁 1
  • 👀 1
Post #289 404
JDC DevLog 🕳 Photo
gr_roll.jpg (1)
  • 🔥 7
  • 👎 2
  • ❤‍🔥 1
  • 🤩 1
Post #287 337
Слышите? Зря
На финляндской grepплощадке
плотину написал стажер, и кодовым его прозвали: бионический бобер. Чтоб кернель не падал в паник, чтобы судо не подвел - дебиан отныне ставят, ведь убунту не пошел
  • 🐳 6
  • 🤔 5
  • 👎 1
  • 🍌 1
Post #286
JDC DevLog 🕳 pinned «Добро пожаловать на JDC DevLog! Основные теги: #Интересное - говорит за себя #Новость - тоже говорит за себя #ОпенСоус - открытый код и любые другие материалы #CTF - временные ивенты Capture The Flag Проекты: #EFP - Escape From POPOV #ProjectResearch - общая…»
Post #285 377
  • 🐳 9
  • ⚡ 3
  • 🥰 2
  • 👎 1
  • 🤣 1
Post #284 374
JDC DevLog 🕳 Photo
У нашего неповторимого cbkzly сегодня день рождения(🎉🎉🎉);
  • 🎉 13
  • 👎 1
Post #283 415
Вы используете using не по максимуму!

Кейворд-директива using используется почти во всех скриптах при работе с Unity. Я провел небольшой резерч на эту тему и приведу вам примеры использования, о которых вы могли не знать или знали не всё:

1️⃣ Классический пример - импорт пространства имен:

Это позволяет использовать классы и методы из других пространств имен без указания полного пути (Например без using пришлось бы писать UnityEngine.Debug.Log() вместо Debug.Log())
using UnityEngine;

При создании скрипта Unity (в зависимости от версии) добавляет нужные неймспейсы - UnityEngine, System и (в старых версиях) System.Collections.


2️⃣ using для работы с ресурсами (IDisposable):

Обеспечивает автоматическое освобождение ресурсов (например, файловых потоков) после использования
using (StreamReader reader = new StreamReader("file.txt")) {
string content = reader.ReadToEnd();
} // reader.Dispose() вызывается автоматически

❕Это помогает избежать утечек памяти и висящих сетевых подключений. Вызов Dispose() гарантирован даже при исключениях.

Больше про IDisposable:
Это интерфейс, который требует реализации метода 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(); // Гарантированное освобождение
}


❕Некоторые Unity-объекты (например, Texture) используют нативную память, но не реализуют IDisposable. Вместо этого у них есть:
Destroy() – для удаления игровых объектов
Resources.UnloadUnusedAssets() – для принудительной очистки
❌ Поэтому если объект не реализует IDisposable, то 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();


❕Это помогает 1) упростить код, если имя получается слишком длинное, 2) решить конфликт, если классы называются одинаково, 3) улучшить читабельность в крупных проектах.

Более того:
В новых версиях C# можно задавать глобальные псевдонимы, которые работают во всём проекте:
global using Vec3 = UnityEngine.Vector3;

Теперь Vec3 можно использовать в любом файле проекта без повторного объявления.


✅ Вот, вы узнали про using больше! И теперь вы легко узнаете кто заворачивает поток вашего сна в диспозабл. Используйте эти фичи уместно и аккуратно, тогда и все чисто будет 🤝
#Интересное
  • 🔥 10
  • ⚡ 1
  • 👎 1
  • 🏆 1
Post #282 261
  • ☃ 1
  • 👎 1
  • 🐳 1
  • 🗿 1
Post #281 321
stableb
  • 🐳 7
  • 🍌 2
  • 👎 1
  • 👾 1
Post #276 361
Фрикадельфи
  • 🔥 7
  • 👎 1
  • 💅 1
  • 👾 1
Post #275 416
аллергия на фигурные скобки
  • 🐳 8
  • 😁 2
  • 👎 1
  • 🤩 1
Post #270 320
Бесплатно)
  • 🐳 6
  • 🔥 2
  • 🍌 2
  • 👎 1
Post #268 362
😨 Стив Коллинз, техдиректор Unity Technologies покинул свой пост.

Он проработал в компании 6 месяцев, причиной ухода послужили личные проблемы. Ранее он занимался разработкой Candy Crush и вышел по тем же обстоятельствам.

Обеспечение развития движка снизилось, поэтому анонс следующей версии точно перенесут еще дальше.

Сейчас юнити переживает не самые лучшие времена. 🫡
#Новость
  • 🫡 8
  • 😭 3
  • 😨 2
  • 👎 1
Post #267 286
Следующий CTF будет возможно проще по способу решения. Но я не гарантирую. Да, CTF будет ближе к концу... вы дождетесь

⬇️
🤲
  • 🐳 5
  • 🔥 3
  • 🍌 2
  • 👍 1
  • 👎 1
Post #266 262
Почему в школах до сих пор изучают Pascal?
На данный момент люди (и я в том числе) задаются вопросом: "зачем вообще в школах преподают Pascal? Он же мертвый, на нем никто не пишет, да и альтернатив куча.. в 21 веке живем все таки.."
- конечно, стоит обновить оборудование в классах информатики, но у него есть свои плюсы

👍 Pascal предельно понятен. В нем нет сложных конструкций, перегрузок операторов или неявного приведения типов. Выучив 10-20 команд обычно можно решить большинство школьных задач. К тому же, в этом языке синтаксис довольно прост:
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.


🧮 Это компилируемый язык, как и многие другие. Перед сборкой компилятор проверит код на наличие синтаксических ошибок, указав их при наличии. Паскаль имеет четкую логическую структуру: все упорядочено настолько, что перепутать команды будет тяжеловато. Да, в нем нет ООП (Object Pascal не считается 🤫). Единственное, что может показаться немного странным это оператор присваивания :=

📲 Сейчас на паскале продукты действительно не пишут, и используется он, в основном, для учебы. Раньше на нем писались софты для банков, а современные варианты (Delphi, Free Pascal, Lazarus) использовались для создания Skype, FL Studio, Total Commander (но позднее они были переписаны на c++)

⌛️ По инерции Pascal укоренился в системе образования, потому что острой необходимости в его замене нет - с помощью него можно понять структуру похожих языков программирования, он легок, является хорошей площадкой для всяких олимпиад и прочего. Да и нельзя плохо о таких старичках говорить, ведь когда-нибудь его все равно сменят

Это как телеграф - дожили до смартфонов, но некоторые все еще отбивают морзянку на дельфи
#Интересное
  • 👍 8
  • 🐳 3
  • 🔥 2
  • 👎 1
Post #265 220
  • 👎 1
  • 🐳 1
  • 🍌 1
  • 🍾 1
Post #263 321
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, на нем три текста, два аудио, указываете на камере все недостающие поля и получаете готовый кликер на яндекс игры

Код простой, но найдется чем разозлить Шашки Онлайновича 😉
#ОпенСоус #Интересное
  • 🍌 9
  • 🔥 2
  • 🐳 2
  • 👎 1
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →