السلام عليكم ورحمة والله وبركاته
تحية طيبة
في محاولة لتطبيق ذكاء اصطناعي للعدو لتتبع اللاعب كانت هذه هى النتيجة
http://www.youtube.com/watch?v=1o1O3aMtP7k
سعيد باستطاعتى تنفيذها وفهم الالية وتحديد المسار الاقرب للاعب , وهذه الطريقة يمكن تنفيذها على بيئة اللعبة اى كانت ولكني استخدمت بيئة بسيطة للتطبيق
الشرح من احد دروس السلسلة الجميلة
http://www.youtube.com/playlist?list...eature=g-all-a
كما يظهر فى الجانب الايسر من الفيديو يوجد ارضيات خضراءواللتى لا تظهر اثناء اللعب وهى عبارة عن تحديد للمسار المسموح للعدو السير فيها
والمكعبات الحمراء هى كأبواب للمناطق الخضراء وهى التى تربط القطع الخضراء ببعضها وعن طريقها يتم احتساب الطريق الاقرب الى اللاعب
السكربت الرئيسى
يحتوى على تجميع البيانات عن المسارات وتحديد بعد كل منطقة وتخزينها
سكربت العدو
تحية طيبة
في محاولة لتطبيق ذكاء اصطناعي للعدو لتتبع اللاعب كانت هذه هى النتيجة
http://www.youtube.com/watch?v=1o1O3aMtP7k
سعيد باستطاعتى تنفيذها وفهم الالية وتحديد المسار الاقرب للاعب , وهذه الطريقة يمكن تنفيذها على بيئة اللعبة اى كانت ولكني استخدمت بيئة بسيطة للتطبيق
الشرح من احد دروس السلسلة الجميلة
http://www.youtube.com/playlist?list...eature=g-all-a
كما يظهر فى الجانب الايسر من الفيديو يوجد ارضيات خضراءواللتى لا تظهر اثناء اللعب وهى عبارة عن تحديد للمسار المسموح للعدو السير فيها
والمكعبات الحمراء هى كأبواب للمناطق الخضراء وهى التى تربط القطع الخضراء ببعضها وعن طريقها يتم احتساب الطريق الاقرب الى اللاعب
السكربت الرئيسى
يحتوى على تجميع البيانات عن المسارات وتحديد بعد كل منطقة وتخزينها
كود:
#pragma strict var cells = new Array(); var cellsList = new Array(); var nearCells = new Array(); var waitForGetCells : float = 2; var patheInProgress : boolean = true; var stage : int = 1; function Awake() { cells = GameObject.FindGameObjectsWithTag('AIpathCell'); cellsList.length = cells.length; } function Update() { if(patheInProgress && waitForGetCells <= 0) { // set stage 1 for(var nearCell : GameObject in nearCells) { for(var i = 0; i < cells.length; i++) { if(cells[i] == nearCell) cellsList[i] = stage; } } // set other stages for (stage = 2; stage <= cells.length; stage++) { for (i = 0; i < cells.length; i++) { if (cellsList[i] == stage - 1) { var cell = cells[i] as GameObject; for (var checkDoor : GameObject in cell.GetComponent(AIpathCell).links) { if (checkDoor != gameObject) { for (var checkCell : GameObject in checkDoor.GetComponent(AIpathLink).nearCells) { for (var j : int = 0; j <= cells.length - 1; j++) { if (cells[j] == checkCell && cellsList[j] == null) cellsList[j] = stage; } } } } } } } patheInProgress = false; } else waitForGetCells -= 1; } function OnTriggerEnter(other : Collider) { if(other.name == 'cell') nearCells.Add(other.gameObject); }
سكربت العدو
كود:
#pragma strict var currentCell : GameObject; var playerCell : GameObject; var playerScript : player; var closestLink : GameObject; var closestSteps : float; var waitToStart : float = 5; function Start () { playerScript = GameObject.FindGameObjectWithTag('Player').GetComponent(player); } function Update () { if(waitToStart <= 0) { playerCell = playerScript.currentCell; closestSteps = Mathf.Infinity; for(var link : GameObject in currentCell.GetComponent(AIpathCell).links) { var pathLink = link.GetComponent(AIpathLink); for(var i : int = 0; i < pathLink.cells.length; i++) { if(pathLink.cells[i] == playerCell) { var stepts : float = pathLink.cellsList[i]; if(stepts < closestSteps) { closestLink = link; closestSteps = pathLink.cellsList[i]; } } } } } else waitToStart -= 1; // move if(closestLink) { if(currentCell == playerCell) transform.position += (playerScript.transform.position - transform.position).normalized * 3.0 * Time.deltaTime; else transform.position += (closestLink.transform.position - transform.position).normalized * 3.0 * Time.deltaTime; } } function OnTriggerEnter (other : Collider) { if(other.name == 'cell') currentCell = other.gameObject; }
تعليق