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

گیم اور _ بازیسازی با unity + مطالب متفرقه

آموزش های علمی با اجازه ی خدا تقدیم به هرکس خدا بخواد

آموزش های علمی با اجازه ی خدا تقدیم به هرکس خدا بخواد

به نام خدا
--
گروه قدیم ما promakers.ir یا پرومیکرز بود که بالای هزار اموزش توش ساخته بودم به اسم sajjad3011 ولی حیف ادمین سایتش عوض کرد
حالا سوالی بود کاری بود این شمارمه

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

---
سوالی بود بذارید
نظر خصوصی نذارید
پاسخش سخته
دوست داشتید شماره بذارید تو واتساپ یا ایتا یا .... گروه بزنیم.
09358077198

بایگانی
پیوندها

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