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

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

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

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

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

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

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

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

مباحث ساده هوش مصنوعی در یونیتی

جمعه, ۳۰ مرداد ۱۳۹۴، ۰۴:۰۶ ق.ظ


مباحث ساده هوش مصنوعی
http://promakers.ir/showthread.php?tid=8810
http://promakers.ir/showthread.php?tid=1...#pid109686

تشکرها کم بود ولی عیبی نداره . در درس بعدی Lerp رو یاد می دم و بعدش احتمال داره روی Slerp بحث کنم. با توجه به اینکه به سایت های

زیادی سر می زنم سعی می کنم مفهومی رو که خودم تست کردم و درک کردم خلاصه و مفید یاد بدم اونطوری که کاربردی باشه.
تابع Lerp
یه اسکریپت js با کد زیر ایجاد کنید :
کد PHP:
//lerp.js
using UnityEngine;
using System
public class LightLerpMonoBehaviour
{
private 
Vector3 newPosition;
void Awake()
{
newPosition transform.position;
}
void Update()
{
PositionChanging();
}

PositionChanging()
{
Vector3 positionA = new Vector3(-5,3,0);
Vector3 positionB = new Vector3(5,3,0);

if(
Input.GetKeyDown(KeyCode.Q))
newPosition positionA;

if(
Input.GetKeyDown(KeyCode.E))
newPosition positionB;

transform.posision=newPosision;
}

اگه کد اشتباه داشت برطرف کنید چون همشون رو از روی فیلم سایت اصلی یونیتی تایپ کردم.
یه نور نقطه ای بذارید روی صحنه(point light) . شدت نور رو کمی زیاد کنید(خصوصیت Identsity) تا روی plane به چشم بیاد.
اسکریپت فوق رو بدید به نور(بکشید روش رها کنید).
اجرا کنید .
طبق اسکریپت اگه Q بزنیم نور به موقع positionA میره و اگه E بزنیم به نقطه ی positionB .
شما اینو اجرا کنید می تونید ببینید چی می گم.( نور جابجا میشه )

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

برای اینکه نور با یک سرعت تعریف شده از نقطه ی A به نقطه ی B بره از تابع Lerp استفاده می کنیم.

مثال شکل کلی استفاده از Lerp :
کد PHP:
transform.position Vector3.Lerp(transform.positionnewPositionsmooth Time.deltaTime); 

تابع Lerp سه تا پارامتر می گیره :

From : از
To: به
t : من بهش می گم time و شما هم بگید time.
(با این که t مخفف چی هست و چی نیست یا اصلا غلط هست یا درست هم کاری نداشته باشید بذارید ما درس خودمون رو بدیم و اگه زیبا نبود بیخیالش بشید. اینم بگم خودم مقالات سایت رفرنس و سایت های ایرانی و خارجی زیادی رو مطالعه می کنم ولی مهم نیست همون time اسم گذاری کنید.)

به جای t مقدار smooth * Time.deltaTime رو بدید و به جای From و To هم متغیری از نوع بردار سه بعدی (در درس ما A و B) رو بدید.

smooth هم در بخش public(بالای برنامه) تعریف می کنید از نوع float(اعشاری).

و بعد از نسنب دادن اسکریپت به نور نقطه ای، خصوصیت smooth رو با مقدار 1 عدد بدید(اگه بیشترش کنید روان بودن و سرعت حرکت بیشتر میشه. این smooth داره در Time.deltaTime ضرب میشه و طبیعی هست دیگه هرچی بیشتر باشه سرعت زمانی حرکت نور بالا میره)

وقتی پروژه رو اجرا کنید با فشردن کلید Q و E نور به آرومی بین نقاط سه بعدی A و B تغییر موقعیت میده.

تا شما یه چایی بخورید من یاد میدم که Lerp چه کاربردهای دیگه ای داره و کجاها میشه ازش استفاده کردbig grin

سه مثال کاربردی از روش استفاده از تابع Lerp :

معمولا گیم ابجکت های مختلفی هستند که از تابع Lerp استفاده می کنند.

سه حالت رو مثال می زنم:

حالت اول :
کد:
transform.position = Vector3.Lerp(transform.position, newPosition, smooth * Time.deltaTime);
کد بالا رو شرح دادم.پس بیخیالش.

حالت دوم :
کد:
light.intensity = Mathf.Lerp(light.intensity, newIntensity, smooth * Time.deltaTime);
این کد باعث میشه شدت نور از حالت فعلی به حالت newIntensity بره و طبق دستوراتی که اسکریپتی که بهتون میدم میگم چیکار کنید.

حالت سوم :
کد:
light.color = Color.Lerp(light.color, newColour, smooth * Time.deltaTime);
این کد برای تغییر رنگ نور از رنگ فعلی به رنگ جدید که در متغیر newColour تعریف شده بکار می ره. تیو اسکریپت که در ادامه میارم یادتون میدم ببینید چقدر زیباست و یاد گرفتنش از روی راهنمایی من چه قدر خوبهhappy

الان بر می گردم و یه اسکریپت کامل براتون میذارم تا تست کنید.

خوب برگشتم:

این کلیپ بی کیفیت که من ساختم رو ببینید تا قدرت Lerp رو درک کنید :
http://s5.picofile.com/file/8153633500/c...1.zip.html

حالا روش ساخت :

یه پروژه 3d ایجاد کنید با این اجزا : main Camera ، plane و Point Light

اسکریپت js زیر رو بدید به نور نقطه ای (point Light):
کد PHP:
#pragma strict

public var smooth float;

private var 
newPosition Vector3;
private var 
newIntensity float;
private var 
newColour Color;


function 
Awake ()
{
    
newPosition transform.position;
    
newIntensity light.intensity;
    
newColour light.color;
}


function 
Update ()
{
    
PositionChanging();
    
IntensityChanging();
    
ColourChanging();
}


function 
PositionChanging ()
{
    var 
positionA Vector3 = new Vector3(-530);
    var 
positionB Vector3 = new Vector3(530);
    
    if(
Input.GetKeyDown(KeyCode.Q))
        
newPosition positionA;
    if(
Input.GetKeyDown(KeyCode.E))
        
newPosition positionB;
    
    
transform.position Vector3.Lerp(transform.positionnewPositionsmooth Time.deltaTime);
}


function 
IntensityChanging ()
{
    var 
intensityA float 0.5f;
    var 
intensityB float 5f;
    
    if(
Input.GetKeyDown(KeyCode.A))
        
newIntensity intensityA;
    if(
Input.GetKeyDown(KeyCode.D))
        
newIntensity intensityB;
    
    
light.intensity Mathf.Lerp(light.intensitynewIntensitysmooth Time.deltaTime);
}


function 
ColourChanging ()
{
    var 
colourA Color Color.red;
    var 
colourB Color Color.green;
    
    if(
Input.GetKeyDown(KeyCode.Z))
        
newColour colourA;
    if(
Input.GetKeyDown(KeyCode.C))
        
newColour colourB;
    
    
light.color Color.Lerp(light.colornewColoursmooth Time.deltaTime);

بعد از افزودن اسکریپت فوق به نور نقطه ای، نور رو انتخاب کنید و در پنجره ی خصوصیات یا inspector پارامتر Smooth رو بدید 1 یا 2 (یه عدد غیر صفر معمولا از 1 به بالا بدید که قبلا توضیحش دادم)

اجرا کنید .
با کلید های زیر بازی کنید:
Q و E
A و D
Z و C
--
خروجی :
[تصویر: lerp_noor.jpg]
می بینید چقدر زیباست ؟ دقیقا عین چشماتون happy
همین الان تست کنید و ببینید چه قدر قشنگه کار با یونیتی.
کاربرد این کد در هوش مصنوعی هم هست و دستوری به اسم (Quaternion.Slerp(From,To,Time داریم که برای درکش فقط کافیه همین Lerp ای که بالا توضیح دادم رو تست کنید و بعدش Slerp همون پارامترها رو می گیره که یه جایی به دردتون میخوره توضیحات من. مطمئن باشید توضیحاتی که من میارم صرفا کپی پیست هر چیزی نیست. سعی می کنم بگردم و چیزای خوبی که تست می کنم و رفرنس رو خودم اول درک کنم بعدش تست کنم اگه جواب داد براتون میارم و توضیح میدم. پس فکر نکنید پرومیکرز نسبت به سایت های دیگه چیزی کم داره. اگه چیز زیادتری نداشته باشه کمتر از سایت های دیگه نیست و قول میدم در آینده بچه های پرومیکرز خیلی پیشرفت کنند و آموزش های بهتری بسازم براتون.
موافقین ۰ مخالفین ۰ ۹۴/۰۵/۳۰
مدیرکل

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

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