
این سند به تشریح ساختار و نحوه پیادهسازی ماژول چرخه روز و شب در پروژه Metaverse Rang World 3D Multiverse میپردازد. در این ماژول، تنظیمات نور محیط شامل نور خورشید، شدت نور محیطی و چرخه خودکار روز و شب مدیریت میشود. ذخیرهسازی اطلاعات از طریق فایل JSON و Node.js انجام خواهد شد تا تنظیمات نور برای تمام کاربران یک محیط یکسان باشد و تنها مالک محیط امکان تغییر و ذخیره آنها را داشته باشد. همچنین، فرایند اجرا، روشهای بهینهسازی، وضعیت فعلی پیادهسازی و موارد موردنیاز برای تکمیل و تأیید نهایی سیستم مشخص شدهاند.

فرض اولیه: محیط کلاینت Unity آماده است. کارهای اصلی باقیمانده شامل تعریف قرارداد JSON، اتصال به Node.js و تست عملکرد مالک و بازدیدکننده است.
زمانبندی پیشنهادی برای تکمیل ماژول به شرح زیر است:
مجموع زمان پیشنهادی: ۲ تا ۳ روز کاری، مشروط به آماده بودن Endpointهای موردنیاز Node.js.
این ماژول وظیفه کنترل نور جهتدار خورشید، شدت نور محیطی (Ambient) و در صورت وجود، دیسک خورشید قابلمشاهده را بر عهده دارد.
دادههای مربوط به نور به محیط تعلق دارند، نه به کاربر. تنها مالک محیط مجاز است تنظیمات نور را تغییر دهد و ذخیره کند. هر کاربری که وارد همان محیط شود، وضعیت نور ذخیرهشده را مشاهده خواهد کرد.
تشخیص مالک از طریق API بیرونی انجام میشود و این مسئولیت بر عهده خود ماژول نیست.
پس از ورود کاربر به محیط، وضعیت مالکیت مشخص میشود:
روش پیشنهادی ذخیرهسازی، استفاده از Node.js به همراه یک فایل JSON در دایرکتوری اختصاصی همان محیط است.
هدف این روش، جلوگیری از ایجاد میکروسرویس سنگین و فراهم کردن امکان خواندن سریع اطلاعات از دیسک است.
نمونه محتوای فایل:
{
"version": 1,
"environmentId": "building_12",
"time01": 0.35,
"cycleRunning": true,
"updatedAt": "2026-10-17T00:00:00Z",
"updatedBy": "owner_user_id"
}
معنای فیلدهای فایل به شرح زیر است:
time01 : موقعیت در چرخه روز و شب، در بازه صفر تا یک.
cycleRunning: مشخص میکند چرخه خودکار روشن است یا خاموش.
version: نسخه اطلاعات، برای سازگاریهای آینده.
environmentId: شناسه محیط یا ساختمان.
updatedBy: شناسه مالکی که آخرین بار تنظیمات را ذخیره کرده است.
updatedAt: زمان آخرین بهروزرسانی اطلاعات.
فرایند اجرای ماژول به ترتیب زیر انجام میشود:
۱. کاربر وارد محیط میشود.
۲. API برای تشخیص مالک بودن کاربر فراخوانی میشود.
۳. Node.js فایل daynight.json مربوط به همان محیط را از طریق درخواست GET میخواند.
۴. کلاینت Unity با اجرای ApplyState، وضعیت نور را اعمال میکند.
۵. اگر مالک تنظیمات را تغییر دهد، اطلاعات جدید از طریق درخواست PUT در همان فایل ذخیره میشوند.
۶. کاربر بعدی هنگام ورود، همان فایل JSON را دریافت میکند و وضعیت نور یکسانی را مشاهده خواهد کرد.
برای بهینهسازی عملکرد ماژول، موارد زیر در نظر گرفته شدهاند:
منطق چرخه، Apply و تشخیص مالک: در کلاینت Unity آماده است.
نمونه ذخیرهسازی با PlayerPrefs: بهصورت موقت برای تست موجود است.
اتصال واقعی به JSON از طریق Node.js: باید پیادهسازی شود.
API تشخیص مالک محیط: خارج از محدوده این ماژول است و باید از طریق لابی فراخوانی شود.
برای تکمیل پیادهسازی، موارد زیر باید تأیید و نهایی شوند: