Akrus Games | Unity
2.95K subscribers
408 photos
89 videos
11 files
351 links
Самые годные лайфхаки по unity c#

Сотрудничество/реклама/помощь @Akrus001
Download Telegram
Игра подписчика @Mark_WiIson
а где

Канал: а где
Присылайте свои игры сюда
Akrus Games | Unity
🔥621
Игра подписчика @avetrill4real
Самое крупное и долгожданное обновление. Речь идёт о мультиплеере.

Эмоции при первых тестах, проведённых не локально, а дистанционно на разных устройствах, просто не передать словами. Это было круто!

Почти вся архитектура механик была переписана под сетевое взаимодействие, реализовано подключение по принципу «клиент-сервер» (P2P) через Steam Lobby, прикручены всякие технические мелочи в виде корректного сохранения и передачи мира при перезаходе в комнату, а также визуальные, например, уведомление о входе игрока в комнату (система уведомлений о ачивках, тратах и т.д. в целом), курсор другого игрока.

Большая работа также была проделана над отловом и фиксом багов с сетевой экономикой, которые целиком и полностью ломали начисление средств, и любой игрок становился миллиардером за секунды. Это было сложно, но задача выполнена!

На текущий момент это самая большая итерация разработки, которая затронула почти все элементы проекта.

Канал: https://t.me/ventadynamics
Присылайте свои игры сюда
Akrus Games | Unity
🔥41
Привет, маи чуваки!
Я сделал еще один обучающий канал, на этот раз по питону!

https://t.me/PYTH0N_PR0

В нем также будут обучающие гайды и фишки питона, НО поскольку я сильно шарю в питоне, я буду все писать сам от руки.
Так что подписывайтесь чтобы стать настоящим ПРО!

https://t.me/PYTH0N_PR0
7🔥1
Media is too big
VIEW IN TELEGRAM
С новым годом, маи чуваки!
Участники этого видео: https://t.me/addlist/gUG24bKxIdg3ZTIy
11
Надо доедать прошлогодние салаты
😁93321
Что вам подарили на новый год? Присылайте в комментарии!

Мне подарили механическую клавиатуру(она на видео)
This media is not supported in your browser
VIEW IN TELEGRAM
13🔥61
int a = 2;
int b = 7;
int result = a + b * 2;

Debug.Log(result);
🔥6
Что выведет код?
Anonymous Quiz
3%
14
1%
15
83%
16
12%
18
1😁101
⚡️ Количество задаваемых вопросов на StackOverflow близится к нулю.

Спад начался еще пару лет назад с появлением ИИ, но сейчас достиг рекордно низких значений.

👆 Так, за весь декабрь поступило всего 3800 вопросов, а за первые дни января ~300.
😱131
Какое у вас разрешение монитора? укажите ближайшее
Anonymous Poll
63%
1920 × 1080 (Full HD)
9%
3840 × 2160 (4к)
30%
2560 × 1440 (2к)
3%
1366 × 768 (HD)
9%
3440 × 1440 (Ultra Wide)
6🔥2
⚡️ SOLID в Unity: пиши код, который не сломается через месяц

Сохрани — эти 5 принципов спасут твой проект от бардака, когда ты начнёшь добавлять новую фичу в старую игру.

S — Единая ответственность (Single Responsibility)
Класс должен делать что-то одно. Не создавай монстров вроде PlayerController, который и двигается, и стреляет, и UI обновляет.
Правильно: PlayerMovement, PlayerShooter, PlayerHealth — отдельные скрипты. Меняешь движение — не трогаешь логику выстрела.

O — Открытость/закрытость (Open/Closed)
Код должен быть открыт для расширения, но закрыт для изменений.
Допустим, у тебя система урона. Не пиши if (enemy is Goblin) {...} else if (enemy is Dragon) {...}.
Правильно: создай базовый класс Enemy с виртуальным методом TakeDamage(). Для нового типа врага просто создай новый класс — старый код менять не придётся.

L — Подстановка Лисков (Liskov Substitution)
Наследник должен уметь всё то же, что и родитель. Если твой FlyingEnemy наследуется от Enemy, он должен корректно работать во всех сценариях, где используется Enemy.
Правильно: не переопределяй методы базового класса так, чтобы они ломали логику (например, Move() в наследнике не должен телепортировать объект, если в базовом классе это плавное движение).

I — Разделение интерфейсов (Interface Segregation)
Не заставляй класс реализовывать то, что ему не нужно. Не создавай монстро-интерфейс IUnit с методами Move(), Shoot(), Build().
Правильно: сделай узкие интерфейсы IMovable, IAttackable, IBuilder. Класс Turret реализует только IAttackable, а WorkerIMovable и IBuilder.

D — Инверсия зависимостей (Dependency Inversion)
Завись от абстракций (интерфейсов), а не от конкретных классов.
Не пиши в коде public Rifle currentWeapon;.
Правильно: public IWeapon currentWeapon;. Теперь можно подсунуть любое оружие — пистолет, меч, гранату — и система будет работать. Идеально для быстрого прототипирования и тестов.

💎 Итог: SOLID — это про то, чтобы добавлять фичи быстро, а не разгребать баги неделями. Начни с принципов S и O — они дают самый заметный эффект.

💬 Какой принцип для тебя самый полезный?
📌 Сохрани шпаргалку.
🔔 Подпишись — дальше будем разбирать паттерны в геймдеве.

👉Akrus Games | Unity
🔥1342
⚡️ Unity: Классы, Наследование — Базовый Арсенет для Логичной Архитектуры

Сохрани — эти два подхода разложат архитектуру твоей игры по полочкам. Понял их — избежишь спагетти-кода, когда игра растёт.

🧱 Классы в Unity — это чертежи твоих объектов
Они описывают, что объект может делать и какие данные хранить. Всё в C# построено на классах. В Unity каждый твой скрипт — по умолчанию класс.

public class Enemy
{
public int health = 100;
public void Attack() { /* Логика атаки */ }
}


🔄 Наследование — Когда «Враг» и «Босс» имеют общее
Зачем копировать один и тот же код? Создай базовый класс и унаследуй от него.

🎯 Вариант 1: Классическое наследование (Иерархия «is-a»)

Идеально, когда у объектов общая логика, но есть специфика.

// Базовый класс для ВСЕХ врагов
public class Enemy : MonoBehaviour
{
[SerializeField] protected int health; // protected — видно в наследниках

public virtual void TakeDamage(int damage)
{
health -= damage;
Debug.Log($"Enemy health: {health}");
}
}

// Конкретный тип врага
public class FlyingEnemy : Enemy
{
public override void TakeDamage(int damage)
{
base.TakeDamage(damage); // Вызов метода из родителя
// Уникальное поведение для летающего врага
if (health < 30) FlyAway();
}
}

➡️ Когда использовать: Чёткая иерархия (например, EnemyMeleeEnemy / RangedEnemy). Логика общая, но дополняется.

🎯 Вариант 2: Композиция + ScriptableObject (Гибкость «has-a»)

Чаще используется в современных подходах. Разделяй данные и поведение.

// Данные врага вынесены в отдельный объект
[CreateAssetMenu]
public class EnemyData : ScriptableObject
{
public int health;
public int damage;
public GameObject prefab;
}

// Основной класс врага использует данные
public class Enemy : MonoBehaviour
{
public EnemyData data;
private int currentHealth;

void Start()
{
currentHealth = data.health; // Берём данные из ScriptableObject
}
}

➡️ Когда использовать: Нужна быстрая настройка и вариативность (10 типов врагов с разными HP/уроном). Легко балансить игру без изменения кода.

💎 Итог:
Наследование — строй иерархию «от общего к частному».
Композиция (использование отдельных классов/данных) — чаще практичнее в геймдеве.
• В Unity MonoBehaviour — уже базовый класс. Твои скрипты наследуются от него.

📌 Правило для инди: Начинай с простого наследования для 2-3 типов врагов. Когда появится 10+ типов с кучей параметров — выноси данные в ScriptableObject.

💬 Твой код больше похож на первый или второй вариант? Делись в комментах!
🔔 Подпишись — дальше разберём интерфейсы и абстрактные классы на реальных примерах из игр.
👉Akrus Games | Unity
🔥74👍11
💀

Каникулы заканчиваются, админ начинает писать посты
🎄14🔥4👎1😁1
БЕСПЛАТНЫЙ ассет GIZMO MONSTER

Этот набор содержит 6 монстров с анимацией

Используйте размер 32x32, подходит для фэнтези, данженов и игр на выживание, и он будет продолжать обновляться!

Ссылка
🔥51👎11
Как создавать собственные классы и наследовать их в C# Unity

Классы — это шаблоны для объектов. Наследование помогает экономить время.

Представь, что ты строишь домики из кубиков. Класс — это набор инструкций, как сложить кубики. Наследование — когда ты берёшь готовый домик и добавляешь к нему крышу или окно, не перестраивая всё заново. В Unity так можно делать с объектами: взять базовый класс (например, «Персонаж») и создать на его основе «Воина» или «Мага», добавив особые умения.

Шаг 1. Создаём базовый класс

Открой Unity, создай новый C#‑скрипт (через контекстное меню в Assets → Create → C# Script). Назови его, например, Character.

Отредактируй скрипт:

using UnityEngine;

public class Character : MonoBehaviour
{
public int health = 100;
public float speed = 5f;

public virtual void TakeDamage(int damage)
{
health -= damage;
Debug.Log("Урон получен! Здоровье: " + health);
}
}


Что тут есть:
- public int health = 100 — здоровье персонажа (число).
- public float speed = 5f — скорость движения (дробное число).
- TakeDamage — метод, который уменьшает здоровье при получении урона.

Шаг 2. Создаём класс‑наследник

Создай ещё один скрипт, назови его Warrior.

Отредактируй скрипт:

using UnityEngine;

public class Warrior : Character
{
public int shield = 20;

public override void TakeDamage(int damage)
{
int finalDamage = damage - shield;
if (finalDamage > 0)
{
health -= finalDamage;
}
Debug.Log("Воин получил урон! Здоровье: " + health + ", щит: " + shield);
}
}


Что изменилось:
- public class Warrior : Character — говорим, что Warrior наследует Character.
- public int shield = 20 — добавили щит (новое свойство).
- override void TakeDamage — переопределили метод, чтобы учитывать щит.

Шаг 3. Проверяем в Unity

1. Создай пустой GameObject на сцене (правый клик в иерархии → Create Empty).
2. Прицепи к нему скрипт Warrior (перетащи скрипт на объект в инспекторе).
3. Запусти игру и посмотри в Console — при вызове TakeDamage ты увидишь логи с учётом щита.

Важные моменты

Наследуй, чтобы не писать код заново.
🔥6👎31
Возможно, у кого-то есть старый аккаунт Google Play Разработчика (до 2023 года). Есть возможность хорошо заработать на этом.

Закрытые за неактив аккаунты тоже принимаются(их можно восстановить)

По любым вопросам в ЛС @Ilya01s.
9🔥31
Akrus Games | Unity pinned «Возможно, у кого-то есть старый аккаунт Google Play Разработчика (до 2023 года). Есть возможность хорошо заработать на этом. Закрытые за неактив аккаунты тоже принимаются(их можно восстановить) По любым вопросам в ЛС @Ilya01s.»
Как вам новый формат постов?
Я решил сделать акцент на доступность новичкам.
Anonymous Poll
40%
Имба
21%
Верни старый формат
19%
Пойдет
19%
тык
2