ایجاد یک موجود هوشمند با استفاده از تکنیک NPC و waypints در یونیتی
جمعه, ۳۰ مرداد ۱۳۹۴، ۰۴:۰۷ ق.ظ
منبع :gameover.blog.ir
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[];
کد 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.position, transform.position) < minDistance)
{
++currentIndex;
if(currentIndex > waypoints.Length -1)
{
currentIndex = 0;
}
currentWaypoint = waypoints[currentIndex];
}
تابع MoveTowardWaypoint هم کدش اینه:
کد PHP:
function MoveTowardWaypoint() : void
{
var direction : Vector3 = currentWaypoint.transform.position- transform.position;
var moveVector : Vector3 = direction.normalized * moveSpeed * Time.deltaTime;
transform.position += moveVector;
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(direction), 4 * Time.deltaTime);
}
اسپریت رو save کنید(و به cube ربط بدید)
به محیط یونیتی برگردید و مثل این عکس پروژه ر طراحی کنید :
(دوربین در نمای بالا باشه و بتونه کل محیط و اشیا رو ببینه. برای تغییر رنگ ابجکت ها هم دو تا new material با رنگ زرد و ابی ایجاد کردم و به کره ها و مکعب نسبت دادم.برای این کار هم توی کادر پروژه راست کلیک کنید بقیشو بدوید)
بازی رو Play کنید و از حرکت موجود هوشمند خود بین این way point ها لذت ببرید
سوالی بود پ.خ
در قسمتی که گفتم دوربین روی پرسپکتیو باشه گزینه ی type نیست گزینه ی projection بود و عجله ای نوشتم type
۹۴/۰۵/۳۰