1 год назад
Всё про оптимизацию кода в Unity. Как грамотно выстроить оптимизацию не повредив архитектуру проекта?🤔
Unity – мощный инструмент для создания игр и приложений, но как любой другой движок, он требует грамотной оптимизации кода для достижения высокой производительности. В этой статье мы рассмотрим различные методы оптимизации кода в Unity и научимся, как грамотно внедрять эти оптимизации, не повреждая основную архитектуру проекта. 1. Профилирование производительности Перед тем как начать оптимизацию, важно провести анализ производительности с использованием инструментов, таких как Unity Profiler. Идентификация узких мест позволит сосредоточиться на ключевых аспектах оптимизации...
5 месяцев назад
🎮Чистый код в Unity для начинающих Привет! Сегодня поговорим об основах архитектуры кода в Unity. Это то, что отличает начинающего разработчика от профессионала. 📝 Основные принципы чистого кода: 1. Правильное именование // ❌ Плохо public class plController : MonoBehaviour { private float spd = 5f; public void mv() { } } // ✅ Хорошо public class PlayerController : MonoBehaviour { private float _moveSpeed = 5f; public void Move() { } } 2. Один скрипт - одна задача // ❌ Плохо public class Player : MonoBehaviour { public void Move() { } public void Attack() { } public void UpdateUI() { } public void SaveGame() { } } // ✅ Хорошо public class PlayerMovement : MonoBehaviour { [SerializeField] private float _moveSpeed = 5f; private Rigidbody2D _rb; private void Awake() { _rb = GetComponent<Rigidbody2D>(); } public void Move(Vector2 direction) { _rb.velocity = direction * _moveSpeed; } } 3. Кэширование компонентов // ❌ Плохо private void Update() { GetComponent<Rigidbody2D>().velocity = Vector2.right; } // ✅ Хорошо private Rigidbody2D _rb; private void Awake() { _rb = GetComponent<Rigidbody2D>(); } private void FixedUpdate() { _rb.velocity = Vector2.right; } 💡 Полезные советы: - Используйте [SerializeField] вместо public для инспектора - Группируйте похожие переменные - Добавляйте XML-комментарии к публичным методам /// <summary> /// Наносит урон игроку. /// </summary> /// <param name="damage">Количество урона.</param> /// <returns>Оставшееся здоровье.</returns> public float TakeDamage(float damage) { _currentHealth -= damage; return _currentHealth; } 🎯 Простой пример правильной структуры: public class PlayerHealth : MonoBehaviour { [SerializeField] private float _maxHealth = 100f; private float _currentHealth; public event System.Action<float> OnHealthChanged; private void Awake() { _currentHealth = _maxHealth; } public void TakeDamage(float damage) { _currentHealth = Mathf.Max(0f, _currentHealth - damage); OnHealthChanged?.Invoke(_currentHealth); } public void Heal(float amount) { _currentHealth = Mathf.Min(_maxHealth, _currentHealth + amount); OnHealthChanged?.Invoke(_currentHealth); } } 📚 Что изучать дальше: - SOLID принципы - Паттерны проектирования - Dependency Injection - Событийно-ориентированная архитектура ⚡️ Совет: Начните применять эти принципы в маленьких проектах. Со временем чистый код войдет в привычку. #Фишки