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

Сотрудничество/реклама/помощь @Akrus001
Download Telegram
Forwarded from NOBICE (Random Beast 🏆)
🎉 Розыгрыш завершен!

🏆 Победители:
1. @sozdal_chipsi
2. @Aleksandr_Kostylevich
3. @Fylht009
4. @tikakalia
5. @hentaibeatsproduction

🔍 Проверить результаты
12🤯1
🔡🔡🔡🔡🔡🔣
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4😱41
Что-то тг не заблокировали, хотя у меня сломались пару прокси.
Это были как обычно новости "могут заблокировать". А могут и не заблокировать🤷‍♂️🤷‍♂️🤷‍♂️

А что у вас произошло после "блокировки" тг? Напишите в комментариях!

Сегодня первое апреля, значит канал будет называть "акукуруз | Нет unity"
Please open Telegram to view this post
VIEW IN TELEGRAM
5🔥3👍1
Channel name was changed to «Акукуруз | Нет unity»
Channel photo updated
Соискателей в 11,4 раза больше, чем вакансий. 🪑
Если посмотреть только IT, то там цифра 22,9 раза
Причина: много IT-специалистов и мало IT-вакансий, но много заводских предложений. С высокими зарплатами🤡
Идите на завод!
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👎7🤯54🔥2😱2👍11
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ Подсветка объектов при наведении

Хочешь, чтобы игрок видел, на что можно кликнуть? Базовый, но важный приём.

Через Outline (красиво и профессионально)

Либо берём готовый ассет Quick Outline из Asset Store (бесплатный).

Ставим на объект скрипт, который включает/выключает компонент Outline при Raycast-попадании.

Скрипт OutCube для объекта:
using UnityEngine;

// Этот класс отвечает за управление подсветкой (Outline) объекта
public class OutCube : MonoBehaviour
{
// Ссылка на компонент Outline, который создает подсветку вокруг объекта
public Outline _outline;

private void Start()
{
// Проверяем, есть ли у нас компонент Outline (не равен ли null)
if (_outline != null)
{
// Отключаем подсветку при старте игры, чтобы объект не светился сразу
_outline.enabled = false;
}
}

// Этот метод включает или выключает подсветку объекта
// state - параметр, который получает метод: true = включить, false = выключить
public void ToggleOutline(bool state)
{
if (_outline != null)
{
_outline.enabled = state;
}
}
}


Скрипт MouseOut для наведения мыши(необязательный, только для примера)
using UnityEngine;

public class MouseOut : MonoBehaviour
{
// Хранит информацию о последнем подсвеченном объекте
private OutCube _currentCube;

void Update()
{
// Создаем луч из камеры через позицию мыши на экране
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

// Рисуем желтый луч в сцене для визуализации (видно только в режиме Scene)
Debug.DrawRay(ray.origin, ray.direction * 100f, Color.yellow);

// Physics.Raycast - пускаем луч и проверяем, во что он попал
if (Physics.Raycast(ray, out RaycastHit hit))
{
// Рисуем зеленый луч до точки попадания
Debug.DrawRay(ray.origin, ray.direction * hit.distance, Color.green);

// Пытаемся получить компонент OutCube с объекта, в который попал луч
OutCube cube = hit.collider.GetComponent<OutCube>();

// Проверяем: если на объекте есть компонент OutCube И это не тот же куб, на который мы уже смотрели
if (cube != null && cube != _currentCube)
{
// ?. - это безопасный вызов: если _currentCube не null, то вызываем метод
_currentCube?.ToggleOutline(false);

_currentCube = cube;

// Включаем подсветку у нового куба
_currentCube.ToggleOutline(true);
}
// Если луч попал в объект без компонента OutCube, но у нас был запомнен предыдущий куб
else if (cube == null && _currentCube != null)
{
// Выключаем подсветку у предыдущего куба
_currentCube.ToggleOutline(false);

// Забываем про предыдущий куб (теперь ни на что не наведены)
_currentCube = null;
}
}
// Если луч вообще ни во что не попал, но у нас был запомнен подсвеченный куб
else if (_currentCube != null)
{
// Выключаем подсветку у последнего куба
_currentCube.ToggleOutline(false);

// Забываем про него
_currentCube = null;
}
}
}


Что важно:
- Outline эффект работает поверх всего и не ломает текстуры.
- Можно настроить цвет (красный для врагов, зелёный для союзников).
- Не требует замены материала — значит, работает с любыми шейдерами.

Результат: игра сразу становится отзывчивее. Игрок понимает, с чем можно взаимодействовать, а UI не нужен.

💬 А ты как делаешь подсветку? Юзаешь ассеты или костылишь вручную?
🔔 Подпишись, дальше будет много про шейдеры, эффекты и оптимизацию в инди-разработке.

👉 Akrus Games | Unity
8👍4🔥3😁2🤯1🎄1
Продолжение темы: нейросеть для поиска работы на Hh ❤️

ИИ мониторит вакансии, анализирует шансы и рассылает отклики. Результаты поступают в Telegram-бота.

Автор написал программу для знакомой, но выложил код в открытый доступ на GitHub.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥63👍2👎1
Хотите ли вы все также видеть обучающие посты? Или они уже потеряли актуальность?
Anonymous Poll
83%
Хочу видеть обучающие посты
17%
Не хочу видеть обучающие посты
62🔥1
😁😆😁 как-то смешно обыграть флешмоб с черновиком
Please open Telegram to view this post
VIEW IN TELEGRAM
👎12😱6😁32
Как создавать собственные классы и наследовать их в 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 ты увидишь логи с учётом щита.

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

Наследуй, чтобы не писать код заново.
10👍1
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ Загрузка сцен в Unity: красиво и без фризов

Стандартный SceneManager.LoadScene вызывает фриз — не годится для нормального проекта.
Сделаем правильно: с экраном загрузки, прогрессом и без тормозов.

Пока сцена грузится, крутим анимацию и показываем проценты.
1. Создай пустые объекты Menu и Load, меню и экран загрузки соответственно.
2. Прикрепи к ним необходимый UI


Кнопка должна запускать LoadScene()
using System.Collections;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class Play : MonoBehaviour
{
[Header("UI Elements")]
[SerializeField] private Slider progressSlider;
[SerializeField] private TextMeshProUGUI progressText;
[SerializeField] private GameObject start;
[SerializeField] private GameObject load;

// Обновляет слайдер и текст прогресса
void UpdateProgressUI(float progress)
{
progressSlider.value = progress;
progressText.text = $"{progress * 100:F0}%";
}

// Вызывается при нажатии кнопки "Играть"
public void LoadScene()
{
start.SetActive(false);
load.SetActive(true);
StartCoroutine(LoadAsync(1));
}

// Асинхронная загрузка сцены с отображением прогресса
IEnumerator LoadAsync(int sceneName)
{
AsyncOperation operation = SceneManager.LoadSceneAsync(sceneName);
operation.allowSceneActivation = false; // не переключаемся сразу

// Ждём, пока загрузка не достигнет 90%
while (operation.progress < 0.9f)
{
float progress = Mathf.Clamp01(operation.progress / 0.9f);
UpdateProgressUI(progress);
yield return null;
}

// Достигли 90% — показываем 100% и делаем паузу
UpdateProgressUI(1f);
yield return new WaitForSeconds(0.5f); // можно заменить на ожидание нажатия

// Разрешаем переход на новую сцену
operation.allowSceneActivation = true;
}
}


💡 Хитрость: operation.progress идёт до 0.9, а последние 10% — активация сцены.
Поэтому масштабируем progress / 0.9f и уже на 1.0 переводим.


💬 Как загружаешь сцены ты? Асинхронно или всё ещё грузишь синхронно и терпишь фризы?

🔔 Подписывайся — дальше разберём ECS.

👉Akrus Games | Unity
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍522
ИИ
Если бы не было чатагпт, не было таких цен на оперативную память, скорость работы программирования не возросла, не было бы этого канала.
Большинство из вас использует ИИ. Я в том числе.
Однако у ИИ есть проблема — он любит фантазировать, очень много фантазировать. Чтобы этого избежать, нужна правильная структура запроса.
Вот вам полезный промт, который убирает лишнюю "фантазию" ИИ:
Прежде чем дать мне ответ, оцени его
неопределённость. Если она больше, чем 0.1 — задавай
мне уточняющие вопросы до тех пор, пока
неопределённость будет 0.1 или меньше


Чтобы составить свой промт, надо:
1. Объяснить что ты делаешь
2. Что ты уже сделал
3. Объяснить, что должен сделать ИИ
4. Добавить примеры по возможности.

Используя эти 4 пункта и промт, можно достать максимум из ИИ
10🔥11
🍒 ОБЗОР РЫНКА GAMEDEV (Unity / 3D / Дизайн)

👊Роли и спрос:
• Unity-разработчик — ~25%
• 3D-художник — ~20%
• Гейм-дизайнер — ~15%

Формат: Преимущественно удалено.
Уровень: Middle и Senior (Junior — редко).

😎 ТРЕНДЫ

1️⃣AI — обязателен для художников и дизайнеров:
Midjourney, Stable Diffusion, ChatGPT

🔠 Unity: ключевые навыки — мультиплеер и оптимизация.

3️⃣ Английский B2+ — обязателен для удаленной работы за границей.

4️⃣ Оплата: растёт число инди-проектов с оплатой опционами или процентом (вместо фикса).


😎 СПЕЦИАЛИСТЫ И ЗАРПЛАТЫ

⌨️ Unity Разработчик
Требования: C#, ООП, Addressables, ECS/DOTS, мультиплеер, оптимизация
Зарплата Middle/Senior: 100–350 тыс. ₽ или $1500–$4500+

📺 3D Artist
Требования: Blender/Maya, ZBrush, Substance Painter, PBR, оптимизация
Зарплата: $1500–$5000+

🖼 2D/UI Artist
Требования: Photoshop, Figma, анатомия/композиция, AI
Зарплата: $1200–$3000

📊 Game Designer
Требования: GDD, баланс, экономика, аналитика, A/B тесты
Зарплата: $2000–$5000+

⚡️ Unreal Developer
Требования: C++, Blueprints, Gameplay, Network, Niagara
Зарплата: 150–250 тыс. ₽ или $3000–$5000


🤬 СОИСКАТЕЛЯМ

• Портфолио — обязательно. Отклики без него игнорируются.
• Риски: вакансии «на энтузиазме», за процент, с низкой зарплатой (например, $500 для 3D-художника).
• Спрос: максимальный — у Senior-разработчиков и дизайнеров в midcore-жанрах (RPG, шутеры, стратегии).


Пост был написан нейронкой, которой я скормил вакансии с нескольких тгк
Please open Telegram to view this post
VIEW IN TELEGRAM
10🔥31
Присылайте свои работы в комментарии!👊
Лучшие выложу здесь через 24 часа!


Присылайте лучше видео. Хороший компрессор https://tools.rotato.app/compress, если не грузит используйте https://github.com/codeforreal1/compressO

Для новеньких поясняю: по сути это бесплатная реклама вашей игры и канала, только если у вас реально крутая игра)


#работыПодписчиков

🎧Akrus Games | Unity
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍33
Игра работа подписчика @keldsaya
первое: Не игра, но всё же. Моё ядро ОС с нуля, на C и ASM. https://github.com/keldsaya/lanex
второе (модель): магазин от ПМ, разделённый на 4 части - пятка, подаватель, пружина, основа. ~570 треугольников (скрин без текстур это ДО оптимизации)

и ещё полная оружейная система. скринов нет (там только в консоль вывод и инсепктор), но есть гит - https://github.com/keldsaya/hard-weapon-system

Канал: https://t.me/keldsaya_tgk
Присылайте свои игры сюда
Akrus Games | Unity
8🔥22👍1