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

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

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

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

مقدمه ای از هوش مصنوهی در یونیتی و ...

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

gameover.blog.ir

AI = Artificial Intelligence به معنی هوش مصنوعی هست.

هوش رو با منطق(logic) (دستورات شرطی مثل and و not و or و if و ... ) میسازن.

بعضی جاهاشو هم با دستورات محاسبات یا ریاضیات (Mathematics) میسازن(مثل add و sub و ... و دستورات جمع و تفریق و ... که توی درس assembly یا ... می تونید بخونید توسط CPU انجام میشه)

سال 86 یا 87 بود اگه اشتباه نکنم یه کد هوش مصنوعی با CPP نوشته بودم که واقعا فکر می کرد و می تونست یاد بگیره و مغزشو گسترش بده و تصمیم بگیره تا در کل یک منطقه به حرکت در بیاد. روش کار من الگوریتم پر کردن یک ناحیه ی بسته بود که با داشتن مختصات داخل اون میومدم چهار جهتش رو بررسی می کردم اگه اطرافش خالی بود مختصات نقاط اون چهار طرف بالا و پایین و چپ و راست رو save می کردم توی یک stack یا پشته یا آرایه و بعدش اونا رو دونه دونه از آرایه بیرون میاوردم و چهار جهت هر یک از اونا رو دوباره بررسی می کردم که جای خالی داریم یا نه اگه داشتیم مختصات اون نقاط رو بازم می ریختم توی آرایه و همینطور الی آخر تا همه جا رنگ آمیزی بشه.

خوب این روش کمک های زیادی به ما می کنه و می تونیم چیزای زیادی برای درک خوش مصنوعی در زندگی و جاهای دیگه ازش یاد بگیریم.

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

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

اینا همش از لحاظ تئوری،توضیحات بود که من براتون دادم.sajjad3011

واسه اینکه هوش بنویسید باید توابع و روش ها و فکر خودتون رو شترش بدید و مهم از همه اینه که باید کد ببینید و فیلم های یوتیوب و سایت های ایرانی و غیره ... رو بررسی کنید یا مطالعه کنید.





هوش با هوش فرق می کنه.

مدلی از هوش مصنوعی رو توی ماشین های مسابقه ای مثل need for speed(نیاز برای سرعت) می بینیم که یک مسیر مشخص رو بعضی ماشین ها با فکر دنبال می کنن.

مدلی از هوش رو توی بازی کمبات می بینیم که دشمن در شرایط مختلف توسط توابع و درخت تصمیم(decision tree) یا گراف و ... می یاد تصمیماتی رو اتحاذ می کنه

و مدلی از هوش رو در بهترین برنامه های هوش داریم مثل شطرنج و فوتبال


در بحث کل کل کردن با هم همه استادیم و ابتدا تلاش های زیادی می کنیم تا کل همدیگرو بخوابونیم.
ولی در عمل می بینیم خیلی از ما ایرانی ها هنوز بلد نیستیم چطوری از فکرمون استفاده کنیم.
در مورد بازی فوتبال به صورت تئوری خودم قصد نوشتن یک فوتبال رو داشتم .مدت ها پیش تصوراتی توی ذهنم بود. توی فکرم این بود که konami از چه روشی استفاده می کنه جدای از گرافیک و سیار مباحث مثل فیزیک و ... .
اونچیزی که توی ذهنم بود این بود که بازیکن ها در فاصله هایی از هم قرار دارن و می تونن نسبت به هم تصمیم بگیرن.
تصمیم حرکت نزدیک ترین فرد تیم حریف به سمت کسی که توپ زیر پاش هست و توسط player داره کنترل می شه. حالا این کنترل می تونه توسط character controller یونیتی باشه و play کردن animation با استفاده از درخت ادغام(bledn tree) در animator componet یا توسط چیزای دیگه.

در هر صورت هرکس روش هایی رو بدست میاره و خودش درک می کنه.
http://blog.ir/panel/gameover/post_edit/#new
اما مهم ترین چیز در یادگیری هوش اینه که دانش های همدیگه رو روی هم بذاریم و به document تبدیل کنیم و این کاری هست که من دنبال خواهم کرد و امیدوارم دوستان دیگه هم به ما کمک کنن تا در راستای هدف پیش بریم.

در درس بعد یکی از ساده ترین پروژه های هوش رو که از روی یک فیلم نیگا کردم بهتون خواهم آموخت.
زبان های پرولوگ و C و زبان های زیادی واسه نوشتن هوش بکار می رن(شما هم می تونید با زبون دلخواه script بسازید).

اما درگیر جزئیات نبشید و سعی کنید مسائل رو به شیوه ی خودتون و با راهکار(AlgoRithm) های مناسب خودتون حل کنید و یک clean code(به جای یک dirty code) بنویسید/
----
یه پروژه بسازید و یک plane و یک سیلندر و یک مکعب بذارید . مکعب اسمشو بذارید enemy(دشمن) و اسم سیلندر رو بذارید player(بازیکن)
(دشمن می خواد بازیکن رو پیدا کنه و دنبالش کنه)

http://s5.picofile.com/file/8127735576/player_enemy.jpg

واسه هر دو تا ابجکت enemy و player کامپوننت rigidbody رو add کنید(بلد نیستید پیام خصوصی بزنید چون این سوالات مبتدی جاش اینجا نیست)
من واسه plane تکستجر انداختم و نرمال مپ کردم و واسه دو تا ابجکت هم متریال به رنگ دلخواه ساختم. شما می تونید اونا رو دلخواه تنظیم کنید مهم نیستن زیاد.
plane رو انتخاب کنید و سپس گزینه ی static رو توی کادر خصوصیات فعال کنید.
از منوی window گزینه ی navigation رو انتخاب کنید.
http://s5.picofile.com/file/8127736950/navigation.jpg
در inspector وارد سربرگ bake شده و دکمه ی bake زو بزنید وچند لحظه صبر کنید تا plane در اصطلاح bake بشه.(باعث میشه چیزی رو که به این bake نسبت میدیم فقط بتونه روی همین plane حرکت کنه و از این محدوده خارج نتونه بشه)
چند لحظه صبر کنید اگه bake کامل بشه رنگ plane رو آبی می کنه

http://s5.picofile.com/file/8127737084/bake.jpg
ابجکت دشمن enemy رو انتخاب کنید و سپس از منوی component گزینه ی navigation و سپس nav mesh agent رو انتخاب کنید.
http://s5.picofile.com/file/8127737426/navMeshAgent.jpg
یه اسکریپت سیشارپ بسازید و بعد از ذخیره بکشیدش روی enemy رها کنید:
کد PHP:
using UnityEngine;
using System.Collections;

public class 
ai_follow MonoBehaviour {
    public 
GameObject player;
    public 
NavMeshAgent enemy;
    
// Use this for initialization
    
void Start () {
    
    }
    
    
// Update is called once per frame
    
void Update () {
        
enemy.SetDestination(player.transform.position);
    }


من اسم اسکریپتمو گذاشتم ai_follow
enemy رو انتخاب کنید و در پنل inspector در قمت اسکریپت اضافه شده به متغیرهای player و enemy ابجکت های enmey و player رو نسبت بدید(اونا رو بکشید و رها کنید توی کادر مربوط):
http://s5.picofile.com/file/8127739150/script_variables.jpg
اجرا بگیرید و ببینید چه اتفاقی میفته
نوعی از هوش رو با پلاگین های اماده می سازن. مثل AI Driver Toolkit 3.3 که واسه ایجاد رقابت بین ماشین های مسابقه ای ازش استفاده می کنن.
http://s5.picofile.com/file/8127757650/ai_driver_toolkit.jpg
http://s5.picofile.com/file/8127761792/ai_driver_toolkit_2.jpg
یه چیزی داریم توی هوش مصنوعی که توی یونیتی تحت عنوان rayCast ازش استفاده میشه . واسه پرتاپ سیگنال برای اینکه چک کنیم مانعی در سر راه gameObject وجود داره یا نه.
http://s5.picofile.com/file/8127762050/rayCasts.jpg
مثال : توی درس طراحی الگریتم دانشگاه یه متنی رو ترجمه کردم راجع به حرکت ربات مسیر یاب. روش کار رو براتون شرح میدم و در کنارش عکسی از پرتاب سیگنال در یونیتی رو میذارم که از فیلم خارجی ای برداشتم.
یک ربات مسیر یاب زیرش چند تا سنسور(حسگر) داره و چند تا چراغ قرمز.
فرض کنید این رباط م خواد روی یه زمین آبی روشن و دقیقا روی یک خط سفید حرکت کنه.
اما این دوتا هر دوشون روشن هستن و تشخیص اونا سخته.
در روانشناسی رنگ ها، جسمی که تیره تر باشه نور رو کمتر منعکس می کنه و جسمی که رنگش روشن تر باشه نور رو بیشتر انشار میده(یا emit می کنه)
چراغ های زیر ماشین(چراغ های زیرین چپ و راست) نوری رو با زمین پرتاب می کنن و سنسور های زیر ماشین (سنسورهای زیرین چپ و راست) منتظر دریافت نورهای پرتاب شده هستند که توسط زمین زیرین ماشین باید منعکس بشن.
فرض کنید ماشین روی خط سفید هست و کمی به سمت چپ کج شده . یعنی لاستیک چپ روی خط سفید نیست و روی زمین آبی هست.
تمام لامپ های قرمز زیر ماشین دارن نور رو پرتاب می کنن.
اما فقط در این لحظه سنسورهای زیرین روبات که در سمت راست هستن نور رو دریافت کردن. چون سمت راست ماشین روی خط سفید بود و طبق روانشناسی رنگ ،خط سفید نور بیشتری رو باید بازتاب کنه. پس سنسورهای راست باید دستور بدن که ماشین فرمون بده به سمت راست و بگه که ماشین باید کمی سرشو راست کنه.(یعنی به چرخ چپ دستور چرخش به راست و چرخش رو می ده)

بعد از چند لحظه ماشین جلو میره و اینبار سرماشین به راست خم شده و سنسورهای چپ روی line سفید قرار دارن. پس ماشین دستور می ده که به سمت چپ فرمون بده و همینطور الی آخر.

در حقیقت اگه دقت کنید ماشین های line Tracker یا line Follower یا دنبال کننده ی خط با روش چپ و راست کردن و چرخش چرخ ها توی مسیر به حرکت در میان واسه همینه که وقتی توی تلویزیون می بینید روبات ها روی خط دارن راه می رن کمی چپ و راست می کنن.

البته اگه تعداد چراغ ها و سنسور ها زیاد تر باشه دقت بیشتر میشه و همینکه روبات از روی خط کمی چپ و راست شد سریع میاد روی خط و سعی می کنه توی همون line حرکت کنه
توی یونیتی هم ما چیزی به اسم rayCast داریم که کار همون چک کردن مانع ها(obstacle) رو انجام میدن(یعنی rayCast می کنه که جلوش چیزی هست یا نه).
حالا اینکار رو میشه با اسکریپت نویسی دستی انجام داد یا توابع مربوط که میان خودشون همه ی کار رو انجام می دن و فقط بررسی می کنن مانع در سر راه یا در زاویه ی فلان و فاصله ی فلان وجود داره یا خیر وبه ما یه خروجی بلی یا خیر میدن:
true ( یا عدد 1) : وجود دارد/پاسخ مثبت است یا ...
false(معمولا عدد 0 تا هر چیزی غیر از 1 رو می گیم false) : وجود ندارد/پاسخ منفی است یا ....
[تصویر: ai_sensor_raycast.jpg]
[تصویر: ray_1.jpg]
یه سری آموزش هوش توی آپارات اینجاست :
http://www.aparat.com/v/15MuT

مثالی از هوش :

کپسول: دارای تگ یا برچسب Player
مکعب : دشمن یا Enemy

خوب فکر کنید می خوایم کاری کنیم که اگه هر گیم ابجکتی با تگ یا برچسب "Player" در محدوده یا trigger دشمن باشه متغیر takDamage(وضعیت خطر) فعال یا true بشه و به محض خروج اون گیم ابجگت از محدوده ی دشمن،takDamage غیر فعال یا false بشه.

تا بعدا با بررسی مقدار true یا false بودن این متغیر ، عمل تیر اندازی یا تعقیب یا ... توسط دشمن انجام بشه.

برای تنظیم اینکار به کاراکتر دشمن یک کامپوننت فیزیک box Collider می دیم و siez.xyz رو در کادر inspector کمی زیاد می کنیم تا یک محدوده ی دلخواه برای دشمن ایجاد بشه

http://s5.picofile.com/file/8128834192/box_collider_1.jpg

اینم اسکریپتی js ای که باید بدیم به دشمن یا Enemy :
کد PHP:
//js 
var health=10;//اینم نیاز نبود، حالا واسه سلامتی درست کردیم
var TakeDamage:boolean;

function 
OnTriggerEnter(other Collider){
if(
other.tag=="Player"){
TakeDamage=true;
}
}

function 
OnTriggerExit(other:Collider){
if(
other.tag=="Player"){
TakeDamage=false;
}


واسه تابع update هم می تونیم کدی بنویسیم که مثلا اگه کلیدی رو فشار داده باشیم پایین،مقدار متغیر health رو کم کنه و اگه از منفی یک (-1) کمتر شد اونو نابود کنه و یه پیام بده.
کد PHP:
function Update(){
if(
TakeDamage//or if(TakeDamage==true)
{
if(
Input.GetButtonDown("Fire1"))//or if(Input.GetKey("هر حرفی که دوست داریم"))
 
{
  
health -- ; // health = health  - 1;
  
}
 }
  
//اگه سلامتی صفر شد پیام بده دشمن مرد و گیم ابجکت دشمن رو نابود کن:
if(health < -1)
{
print(
"doshman mord");
health=0;
Destroy(gameObject);
}

}
//update 

نکته : اگه Tag یا برچسب رو نمی دونید چیه اینجا رو مطالعه کنید :

http://promakers.ir/showthread.php?mode=linear&tid=8771&pid=96979

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

نظرات (۰)

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

ارسال نظر

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