«یا اللهُ یا رَبِّ یا حَیُّ یا قَیّوم یا ذَالجَلالِ وَ الاکرام اَسئَلُکَ بِاسمِکَ اَلعَظیم اَلاَعظَم اَن تَرزُقَنی رِزقاً حَلالاً طَیِّباً بِرَحمَتِکَ الواسِعَه یا اَرحَمَ الرّاحِمِین.»
ایجاد یک موجود هوشمند با استفاده از تکنیک NPC و waypints در یونیتی :: گیم اور

گیم اور


خصوصی نظر نذارید نمی تونیم جواب بدیم.

عضو کانال تلگرام ما بشید توش گروه هم می گیم

لینک کانال خصوصی گیم اور :

https://t.me/gameoverblog

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

 منبع :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="">
تجدید کد امنیتی