کانال بازی سازی تلگرام
ایجاد یک موجود هوشمند با استفاده از تکنیک NPC و waypints در یونیتی :: آموزش ساخت بازی اندروید+پکیج های تخصصی

آموزش ساخت بازی اندروید+پکیج های تخصصی

هرگز دل من ز علم محروم نشد
کم ماند ز اسرار که معلوم نشد
هفتاد و دو سال فکر کردم شب و روز
معلومم شد که هیچ معلوم نشد
---
تمام اعمالی که انجام می دهیم، حتی اگر ذره ای و مثقالی باشد، به خودمان باز می گردد و بازتابش آنها را در زندگی خواهیم دید. زلزال ۷
او کسی است که (روح) شما را در شب (به هنگام خواب) میگیرد; و از آنچه در روز کرده‏اید، با خبر است; سپس در روز شما را (از خواب) برمیانگیزد; و (این وضع همچنان ادامه مییابد) تا سرآمد معینی فرا رسد; سپس بازگشت شما به سوی اوست; و سپس شما را از آنچه عمل میکردید، با خبر میسازد. انعام ۶۰
دلها به یاد خدا آرام میگیرد. رعد آیه ۲۷
بدانید زندگی دنیا تنها بازی و سرگرمی، و تجمل پرستی و تفاخر در میان شما و افزون طلبی در اموال و فرزندان است . حدید آیه ۲۰
آن خدایی که آدمی را از خون بسته (که تحول نطفه است) بیافرید.
بخوان و (بدان که) پروردگار تو کریم‌ترین کریمان عالم است.
آن خدایی که بشر را علم نوشتن به قلم آموخت.
به آدمی آنچه را که نمی‌دانست تعلیم داد.
راستی که انسان سرکش و مغرور می‌شود.
چون که خود را در غنا و دارایی ببیند. علق ۲- ۷
این زندگانی چند روزه دنیا افسوس و بازیچه‌ای بیش نیست، عنکبوت ۶۴
در روی زمین به تکبر راه مرو که نمی توانی زمین را بشکافی و هرگز قامتت به بلندای کوهها نمی رسد. اسراء ۳۷
در آنچه خداوند بر تو بخشیده است، سرای آخرت را بجوی و سهم خود را از دنیا فراموش مکن و همانگونه که خدا به تو نیکی کرده است نیکی کن و هرگز فساد در زمین منما که خدا مفسدان را دوست ندارد. قصص ۷۷
و هرگاه نعمت و رحمتی به انسان بچشانیم و سپس آن را از او برگیریم او مأیوس و نومید میشود و به کفران و ناسپاسی بر میخیزد. هود ۹
بندگان مرا آگاه ساز که من بسیار آمرزنده و مهربانم. حجر ۴۹
از رحمت خدا نا امید مباشید که جز کافر هیچ کس از رحمت خدا نا امید نیست. یوسف ۸۷
پس به یاد من باشید تا به یاد شما باشم. بقره ۱۵۲
زندگانی دنیا چیزی جز متاع فریبنده نیست . آل عمران ۱۸۵
از آنچه به شما روزی داده ایم پیش از آنکه روزی فرا رسد که نه معامله ای وجود دارد و نه دوستی و شفاعت ، انفاق کنید. بقره ٢۴۵
بسا چیزی را ناخوش داشته باشید که آن به سود شماست و بسا چیزی را دوست داشته باشید که به زیان شماست، و خدا میداند و شما نمیدانید. بقره ۲۱۶
ما آیات (خود) را برای شما بیان کردیم شاید اندیشه کنید...حدید ۱۷

پیوندهای روزانه
پیوندها

 منبع :gameover.blog.ir

http://s5.picofile.com/file/8153967184/way_ai.jpg


[تصویر: wayPints_1.jpg]

NPC مخفف non-player characters به معنی کاراکترهای غیر از player هست.

مراحل:

پروژه ای ایجاد کنید.

دوربین روی حالت پرسپکتیو(سه بعدی) باشه نه ارتوگرافیک(دو بعدی)(گزینه ی Type در inspector برای camera)

اجزای پروژه :

موجود هوشمند(Cube)

نور مستقیم(Directional Light)

دوربین اصلی(Main Camera)

زمین(plane)

Sphere0
Sphere1
Sphere2
Sphere3
Sphere4


یک اسکریپت js ایجاد کنید و بدید به cube و به ترتیب کدهایی که می گم قرار بدین توش:

ابتدا آرایه ای تعریف کنیم که way point ها یا گیم ابجکت ها( در اینجا sphere0 و ... و sphere4) رو بعدا توی inspector بهش نسبت بدیم.

کد PHP:
var waypoints Transform[]; 
سپس باید اشاره گری به waypoint( در اینجا منظور گیم ابجکت کره) جاری و اندیس وی پونت جاری در آرایه رو ایجاد کنیم:
کد PHP:
private var currentWaypoint Transform;
private var 
currentIndex int

سپس سرعت حرکت مکعب بین کره ها رو تنظیم می کنیم و همینطور حداقل فاصله ای که برای نزدیک شدن به waypoint جاری باید چک بشه(چون نمی خوایم مکعب خیلی به کره ها نزدیک بشه یه فاصله ای رو باید چک کنیم و بعدش حرکت به کره ی بعدی)

کد PHP:
var moveSpeed float 10.0;
var 
minDistance float 2.0

وقت آغاز و نقطه ی شروع بازی هست یعنی تابع Start .
در این تابع نقطه ی جاری حرکت cube رو تنظیم می کنیم
کد PHP:
function Start () : void
{
   
currentWaypoint waypoints[0];
   
currentIndex 0;


سپس تابع Update (این تابع در هر فریم از زمان،توسط انجین یونیتی call میشه):
کد PHP:
function Update ()
{
   
MoveTowardWaypoint();
 
   if(
Vector3.Distance(currentWaypoint.transform.positiontransform.position) < minDistance)
   {
      ++
currentIndex;
      if(
currentIndex waypoints.Length -1)
      {
         
currentIndex 0;
      }
      
currentWaypoint waypoints[currentIndex];

کد بالا چیز خاصی نداره. تابع Distance از کلاس Vector3(بردار سه بعدی) هست که فاصله ی بین دو نقطه سه بعدی رو محاسبه می کنه.سپس خودت روی کد فکر کنhappy (اندیس شروع آرایه در زبان های مشتق از زبان C مثل js و سیشارپ و ... برابر 0 صفر است. ضمنا برای محاسبه ی طول هر آرایه کافیست اسم آن و سپس نقطه و سپس Length رو بیاریم)

تابع MoveTowardWaypoint هم کدش اینه:
کد PHP:
function MoveTowardWaypoint() : void
{
   var 
direction Vector3 currentWaypoint.transform.positiontransform.position;
   var 
moveVector Vector3 direction.normalized moveSpeed Time.deltaTime;
   
transform.position += moveVector;
   
transform.rotation Quaternion.Slerp(transform.rotationQuaternion.LookRotation(direction), Time.deltaTime);


اسپریت رو save کنید(و به cube ربط بدید)

به محیط یونیتی برگردید و مثل این عکس پروژه ر طراحی کنید :
(دوربین در نمای بالا باشه و بتونه کل محیط و اشیا رو ببینه. برای تغییر رنگ ابجکت ها هم دو تا new material با رنگ زرد و ابی ایجاد کردم و به کره ها و مکعب نسبت دادم.برای این کار هم توی کادر پروژه راست کلیک کنید بقیشو بدویدbig grin)

[تصویر: array_of_gameobjects.jpg]

بازی رو Play کنید و از حرکت موجود هوشمند خود بین این way point ها لذت ببرید happy

[تصویر: way_ai.jpg]

سوالی بود پ.خ

در قسمتی که گفتم دوربین روی پرسپکتیو باشه گزینه ی type نیست گزینه ی projection بود و عجله ای نوشتم type

موافقین ۰ مخالفین ۰ ۹۴/۰۵/۳۰
مدیرکل

نظرات (۱)

عالی بود ممنون
پاسخ:
ممنون.

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی