Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 

Repository files navigation

🧪 RSG Test Task — My Solution

🎮 Playtest-ready version of the technical test task for a Unity Developer position.
This project showcases my implementation of all the required features along with extra polish:
✅ UI (built with MVP pattern)
✅ Visual improvements with DOTween
✅ Custom logic for loot, healing, inventory, and combat

📌 Pull Request with all changes:
👉 View on GitHub

preview


📋 Project Concept

🇺🇦 Гравець потрапляє у гру, де може:

  • Вийти на арену Dungeon та вбивати скелетів
  • Збирати з них лут (книги, зілля)
  • Повертатися на Surface та продавати лут трейдеру

✅ Completed Tasks

🔹 Task #1 – Обмежити кількість предметів в інвентарі.

Зараз гравець може зібрати нескінченну кількість предметів в інвентар, потрібно зробити так, щоб кожен предмет мав свою вагу і встановити максимальну вагу яку може переносити Entity. Якщо предмет вже не влізає - він не підбирається. Поради

  • Можливо потрібно змінити саму логіку IStorage і додати підтримку ваги, перевірку чи може влізти предмет туди.
  • Логіку як предмети збираються можна знайти в LootInteractable та в GatherLootEntityBehaviour.

🔹 Task #2 – Баг. При переході з данжа на локацію всі предмети з інвентарю пропадають.

Якщо зібрати предметі під час перебування в Dungeon, то при переході на поверхню вони всі пропадуть. Тому ми навіть не можемо їх продати продавцю.

Поради

  • Місце, де повинна зберігатись інформація про предмети гравця повинно знаходитись в GlobalSceneContext.
  • Краще всього створити окрему модель (за прикладом PlayerCameraModel) - де зберігається інформація про предмети які є у гравця.

🔹 Task #3 – Відобразити кількість предметів які у гравця в інвентарі на UI.

Зараз не зрозуміло чи гравець взагалі підібрав предмети, потрібно на екрані відобразити скільки предметів зараз несе гравець, щоб було видно і коли він продає ці предмети.

Поради

  • Для відображення UI краще використовувати якийсь з шаблонів MVx для проектування інтерфейсу - наприклад MVP. 🧩 MVP-підхід для реалізації інтерфейсу.

🔹 Task #4 – Відобразити здоров’я гравця на UI.

Зараз не зрозуміло чи вороги взагалі наносять пошкодження гравцеві. Потрібно відобразити HealthBar на UI. Здоро’я не повинно скидуватись при переході на поверхню

Поради

  • Здоров’я гравця зберігається в його IDamageable

🔹 Task #5 – Додати баланс грошей гравця.

Зараз нікуди не начислюються монети, які отримує гравець коли продає предмети продавцеві. Потрібно створити баланс гравця і також відобразити його на UI.

Поради

  • Trader повертає суму цін предметів в інвентарі

🔹 Task #6 – Додати можливість використовувати HealPotion для лікування.

Гравець збирає зілля з мертвих ворогів, потрібно додати можливість їх використання для лікування.

Поради

  • Використання зілля краще зробити як на UI кнопку, так і на кнопці на клавіатурі використовуючи NewInputSystem.
  • В ідеалі відобразити скільки HealPotion у тебе залишилось.
  • Зараз при взаємодії з продавцем ти продаси всі предмети, що є в інвентарі, можливо потрібно продавати тільки книги

🔹 Task #7 – Рандомізувати випадіння предметів з ворогів.

Зараз там в 100% випадках випадає одна книжка і один HealPotion. Потрібно додати рандом і шанс випадіння якогось одного предмету, вказаного в списку.


🔹 Task #8 – Додати покупку Heal Potion у Trader.

Потрібно додати місце, куди можна витратити гроші, які накопив гравець, продаючи предмети. Потрібно біля трейдера поставити прилавок з зіллями, при взаємодії з якими можна його купити.


🔹 Task #9 – Додати можливість розбити коробку.

На SurfaceScene стоять коробки, з якими не можна взаємодіяти. Потрібно при взаємодії з ними направити гравця, щоб він атакував коробки та щоб коли вони розбились то з них випав лут.

Поради

  • Така логіка вже є у ворогів

📚 Додаткові вимоги

  • Вивчити документацію з плагіна Zenject
  • Вивчити документацію по Addressables — в проекті потрібно їх використовувати
  • Вивчити документацію по самому проекту

🧩 Technologies & Extras

  • 🎯 MVP architecture for UI
  • 💥 DOTween for animations
  • 🧠 Modular code for easy testing and scaling
  • 🔄 Scene persistence via Zenject GlobalSceneContext
  • 🧪 Fully working prototype ready for playtest

💡 If you're a recruiter or lead developer — feel free to explore the pull request to check my code structure and decisions.


About

With MVP Passive View

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages