navcat؛ مسیریابی سهبعدی توی مرورگر با جاوااسکریپت
خلاصهٔ کاملتر
توی خیلی از بازیها و شبیهسازیهای سهبعدی، کاراکترها باید بتونن خودشون تو محیط راه پیدا کنن و از موانع رد بشن. راه معمولش استفاده از navmesh یا «شبکهی مسیریابی»ـه؛ یه نسخهی سادهشده از محیط که فقط سطحهای قابلراهرفتن رو با چند تا چندضلعی بههمچسبیده نشون میده. navcat یه کتابخونهی جاوااسکریپتیه که هم این شبکه رو از هندسهی سهبعدی میسازه و هم ابزار جستوجو روش رو بهت میده.
به گفتهی سازنده، navcat کاملاً مستقل از موتور رندره، برای همین با Three.js، Babylon.js، PlayCanvas یا هر موتور دلخواه دیگهای کار میکنه. کدش خالص جاوااسکریپته و طوری نوشته شده که tree-shaking خوب انجام بشه، یعنی فقط همون بخشهایی که استفاده میکنی توی خروجی نهایی میمونن. هم navmesh تکتکهای و هم چندتکهای (tiled) پشتیبانی میشه که برای محیطهای بزرگ بهدرد میخوره.
قسمت جستوجو چند تا تابع آماده داره. سادهترینش findPath ـه که بین دو نقطه یه مسیر کامل پیدا میکنه و در واقع سه تابع findNearestPoly، findNodePath و findStraightPath رو پشتسرهم صدا میزنه. اگه دنبال مسیر نرمتر و بدون گوشههای تیز باشی findSmoothPath هست، و برای حرکتدادن عاملها میتونی این مرحلهها رو جدا صدا بزنی تا کارایی بهتر بشه.
مثلاً برای گرفتن یه مسیر بین دو نقطه، کافیه مبدأ و مقصد و یه محدودهی جستوجو بدی:
const start: Nav.Vec3 = [1, 0, 1];
const end: Nav.Vec3 = [8, 0, 8];
const halfExtents: Nav.Vec3 = [0.5, 0.5, 0.5];
const findPathResult = Nav.findPath(navMesh, start, end, halfExtents, Nav.DEFAULT_QUERY_FILTER);برای ساختن navmesh هم navcat یه فرایند چندمرحلهای داره: اول مثلثهای قابلراهرفتن مشخص میشن، بعد به یه heightfield تبدیل میشن، ناحیهها و کانتورها ساخته میشه و آخرش به یه مش چندضلعی میرسه. برای شروع سریع، پریستهایی مثل generateSoloNavMesh هست که با چند تا پارامتر مثل اندازهی عامل و شیب قابلعبور، همهی این مراحل رو برات انجام میده.
نویسنده تأکید میکنه که navcat از قراردادهای OpenGL پیروی میکنه؛ یعنی دستگاه مختصات راستگرد و ترتیب پادساعتگرد رأسها. اگه محیطت مختصات دیگهای داره باید موقع ورود و خروج دادهها تبدیلش کنی. دادههای navmesh هم چون کاملاً JSON-serializable هستن، راحت ذخیره و دوباره بارگذاری میشن.
نکات کلیدی:
- navcat یه کتابخونهی جاوااسکریپتی برای ساخت و جستوجوی navmesh توی محیطهای سهبعدیه
- مستقل از موتوره و با Three.js، Babylon.js و PlayCanvas کار میکنه
- توابع آمادهای مثل findPath، findSmoothPath و findStraightPath برای مسیریابی داره
- از navmesh تکتکه و چندتکه پشتیبانی میکنه و دادههاش JSON-serializable هستن
- کدش خالص جاوااسکریپت و tree-shakeable ـه




