版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
人機(jī)交互技術(shù)AI尋路系統(tǒng)(進(jìn)階)目錄Catalog1教學(xué)目的與要求2重點(diǎn)、難點(diǎn)3教學(xué)進(jìn)程安排4課后學(xué)習(xí)任務(wù)布置教學(xué)目的與要求01.本章將更深入地介紹AI尋路系統(tǒng),更有深度的探究尋路組件的其他功能。目的:教學(xué)目的與要求學(xué)生能夠深入了解尋路系統(tǒng),完成課堂的學(xué)習(xí)與討論,并且能夠積極完成課后作業(yè)。要求:重點(diǎn)、難點(diǎn)02.在尋路系統(tǒng)入門的基礎(chǔ)上進(jìn)行進(jìn)階學(xué)習(xí),學(xué)習(xí)尋路系統(tǒng)的其他功能。重點(diǎn):重點(diǎn)、難點(diǎn)尋路系統(tǒng)的整理。難點(diǎn):教學(xué)進(jìn)程安排03.梯子效果爬坡功能允許攀爬的只有最大限度為60°的坡度,當(dāng)面對(duì)更大的坡度時(shí),MaxSlope就已經(jīng)無法滿足我們的需求了。這時(shí)我們需要用到一個(gè)新的組件:OffMeshLink。我們只需要給梯子添加OffMeshLink組件并掛載底端和頂端的空物體,我們就可以完成爬梯子的效果,實(shí)現(xiàn)垂直爬坡了。尋路路線限制到此為止我們學(xué)習(xí)的尋路都是在同一片烘焙區(qū)域,通過最短路徑自行尋找目標(biāo)的AI行為,但有時(shí)候我們需要限定不同的AI可以走的路線進(jìn)行區(qū)分,這種情況我們就需要用到Navigation組件的Areas功能了。在Areas中我們可以添加烘焙區(qū)域名稱,添加后Object中可以給烘焙區(qū)域限定區(qū)域名稱,最后就可以在NavmeshAgent里面選擇行走區(qū)域來限定AI的行走路線了。道路阻斷在尋路系統(tǒng)中,只要AI開始尋路,就會(huì)“一去不回頭”。要怎么做才能在它尋路過程中對(duì)它進(jìn)行中途阻止呢,我們只需要在相應(yīng)的路段上添加一個(gè)名為NavMeshObstacle的組件,這一段路就會(huì)阻止AI通過了,再通過代碼控制該組件的顯隱性,就可以控制AI尋路時(shí),相應(yīng)路段的阻斷和連通了。課后學(xué)習(xí)任務(wù)布置學(xué)生分組討論,并整理進(jìn)階尋路實(shí)現(xiàn)過程的筆記。人機(jī)交互技術(shù)群組行為教學(xué)目的與要求1重點(diǎn)難點(diǎn)2教學(xué)進(jìn)程安排3課后學(xué)習(xí)任務(wù)布置4目錄CONTENTS教學(xué)目的與要求1教學(xué)目的與要求目的:本章將介紹群組行為功能的實(shí)現(xiàn)方法,讓學(xué)生了解群組行為的實(shí)現(xiàn)流程。要求:學(xué)生能夠使用群組行為模擬AI行為,完成課堂的學(xué)習(xí)與討論,并且能夠積極完成課后作業(yè)。重點(diǎn)難點(diǎn)2重點(diǎn)難點(diǎn)重點(diǎn):在本章中我們要學(xué)會(huì)力學(xué)的簡(jiǎn)單運(yùn)算,組的管理方法,完成對(duì)整個(gè)群組的控制。難點(diǎn):整理邏輯的整理,權(quán)重的把控。教學(xué)進(jìn)程安排3群組行為的作用群組行為隊(duì)列聚集分離力學(xué)計(jì)算距離檢測(cè)碰撞組管理當(dāng)有一群的人或者動(dòng)物與環(huán)境進(jìn)行真實(shí)的交互的時(shí)候,我們要想模擬出最真實(shí)的行為,就要讓群體的行為符合群體的特征。在不加入unity3d環(huán)境中的人工智能的情況下,用簡(jiǎn)單的視覺模糊來進(jìn)行鳥群的行為模擬。主要方法隊(duì)列的力力學(xué)計(jì)算聚集的力距離檢測(cè)分離的力碰撞組管理整個(gè)集體的前進(jìn)方向恒定,不會(huì)因?yàn)閭€(gè)體而進(jìn)行變動(dòng)。每個(gè)個(gè)體都會(huì)向集體匯聚,不會(huì)脫離大部隊(duì),分散太遠(yuǎn)。每個(gè)個(gè)體都會(huì)與其他個(gè)體保持一定距離,不會(huì)非常靠近。通過牛頓第二定律計(jì)算每一個(gè)個(gè)體的前進(jìn)方向和速度每一個(gè)個(gè)體通過距離檢測(cè)判斷自身附近是否有其他個(gè)體將附近的同類放到一個(gè)碰撞組中進(jìn)行管理。群組行為的實(shí)現(xiàn)定義并初始化變量:publicTransformtarget;publicVector3velocity=Vector3.forward;privateVector3startVelocity;publicVector3SumForce=Vector3.zero;voidStart(){target=GameObject.Find("Target").transform;startVelocity=velocity;}ForceCompute(){SumForce=Vector3.zero;
Lisan_Force=Vector3.zero;Duilie_Partner.Clear();//清除隊(duì)列數(shù)據(jù)
Collider[]colliders=Physics.OverlapSphere(transform.position,Lisan_Distance);//physicis之后代碼的作用:用來檢測(cè)以某個(gè)位置為半徑發(fā)射一個(gè)圓以檢測(cè)球體內(nèi)有哪些游戲物體(用來做物理檢測(cè),得到的結(jié)果是coliider的集合)for(inti=0;i<colliders.Length;i++){if(colliders[i]!=null&&colliders[i].gameObject!=this.gameObject){Duilie_Partner.Add(colliders[i].gameObject);}}for(inti=0;i<Duilie_Partner.Count;i++){//計(jì)算位置距離
Vector3dir=transform.position-Duilie_Partner[i].transform.position;Lisan_Force+=dir.normalized/dir.magnitude;//計(jì)算所有鄰居向前的向量和
}if(Duilie_Partner.Count>0){Lisan_Force*=Lisan_Weight;SumForce+=Lisan_Force;}}定義計(jì)算合力的函數(shù)并添加分離的力:群組行為的實(shí)現(xiàn)定義隊(duì)列的力變量:publicfloatDuilie_Distance=6;//檢測(cè)距離publicList<GameObject>Duilie_Partner=newList<GameObject>();publicfloatDuilie_Weight=3;publicVector3Duilie_Force=Vector3.zero;SumForce=Vector3.zero;
Lisan_Force=Vector3.zero;Duilie_Partner.Clear();//清除隊(duì)列數(shù)據(jù)
Collider[]colliders=Physics.OverlapSphere(transform.position,Lisan_Distance);//physicis之后代碼的作用:用來檢測(cè)以某個(gè)位置為半徑發(fā)射一個(gè)圓以檢測(cè)球體內(nèi)有哪些游戲物體(用來做物理檢測(cè),得到的結(jié)果是coliider的集合)for(inti=0;i<colliders.Length;i++){if(colliders[i]!=null&&colliders[i].gameObject!=this.gameObject){Duilie_Partner.Add(colliders[i].gameObject);}}for(inti=0;i<Duilie_Partner.Count;i++){//計(jì)算位置距離Vector3dir=transform.position-Duilie_Partner[i].transform.position;Lisan_Force+=dir.normalized/dir.magnitude;//計(jì)算所有鄰居向前的向量和
}if(Duilie_Partner.Count>0){Lisan_Force*=Lisan_Weight;SumForce+=Lisan_Force;}}在合力計(jì)算中添加隊(duì)列的力:群組行為的實(shí)現(xiàn)定義聚集的力變量:publicTransformtarget;publicVector3velocity=Vector3.forward;privateVector3startVelocity;publicVector3SumForce=Vector3.zero;voidStart(){target=GameObject.Find("Target").transform;startVelocity=velocity;}ForceCompute(){SumForce=Vector3.zero;
Lisan_Force=Vector3.zero;Duilie_Partner.Clear();//清除隊(duì)列數(shù)據(jù)
Collider[]colliders=Physics.OverlapSphere(transform.position,Lisan_Distance);//physicis之后代碼的作用:用來檢測(cè)以某個(gè)位置為半徑發(fā)射一個(gè)圓以檢測(cè)球體內(nèi)有哪些游戲物體(用來做物理檢測(cè),得到的結(jié)果是coliider的集合)for(inti=0;i<colliders.Length;i++){if(colliders[i]!=null&&colliders[i].gameObject!=this.gameObject){Duilie_Partner.Add(colliders[i].gameObject);}}for(inti=0;i<Duilie_Partner.Count;i++){//計(jì)算位置距離
Vector3dir=transform.position-Duilie_Partner[i].transform.position;Lisan_Force+=dir.normalized/dir.magnitude;//計(jì)算所有鄰居向前的向量和
}if(Duilie_Partner.Count>0){Lisan_Force*=Lisan_Weight;SumForce+=Lisan_Force;}}在合力計(jì)算中添加聚集的力:群組行為的實(shí)現(xiàn)在合力中添加恒定飛行速度的力變量:ForceCompute(){…………//保持恒定飛行速度的力
Vector3engineForce=startVelocity-velocity;SumForce+=engineForce*0.1f;Vector3targetDir=target.position-transform.position;SumForce+=(targetDir.normalized-transform.forward)*speed*10f;}publicfloatTimer=0;publicfloatcheckTime=0.2f;publicfloatmass=1;voidUpdate(){Timer+=Time.deltaTime;if(Timer>checkTime){ForceCompute();//每0.2秒調(diào)用一次函數(shù)
Timer=0;}velocity+=(SumForce/mass)*Time.deltaTime*0.1f;transform.rotation=Quaternion.Slerp(transform.rotation,Quaternion.LookRotation(velocity),Time.deltaTime*3);transform.Translate(transform.forward*Time.deltaTime*velocity.magnitude,Space.World);}穩(wěn)定頻率調(diào)用計(jì)算合力的函數(shù):課后學(xué)習(xí)任務(wù)布置4課后學(xué)習(xí)任務(wù)布置學(xué)生分組討論,整理群組行為實(shí)現(xiàn)過程的筆記并理清整個(gè)功能的邏輯。THANKYOU人機(jī)交互技術(shù)Human-ComputerInteractionTechnology——基于LeapMotion的《夢(mèng)幻森林》案例學(xué)習(xí)目的和要求1
重點(diǎn)和難點(diǎn)2《夢(mèng)幻森林》LeapMotion和完善3
課后總結(jié)4目錄CONTENTS學(xué)習(xí)指導(dǎo)建議重點(diǎn)掌握LeapMotion基本手勢(shì)控制函數(shù),能夠替換不同的手部模型控制場(chǎng)景中的物體將LeapMotion與Unity3D進(jìn)行連接,能夠理解相關(guān)的參數(shù)設(shè)定,并且能夠熟練的掌握位移、換色等基本操作強(qiáng)化練習(xí)LeapMotion的使用,通過相關(guān)的粒子特效案例增加趣味性、通過群組行為的控制使其和其他知識(shí)單元能夠緊密結(jié)合,并且能夠掌握相關(guān)的可穿戴設(shè)備的優(yōu)缺點(diǎn),參加各項(xiàng)學(xué)科賽事本章的學(xué)習(xí)建議在實(shí)驗(yàn)室的環(huán)境中進(jìn)行,能夠結(jié)合相應(yīng)的設(shè)備進(jìn)行不斷的測(cè)試,同時(shí)本章的案例源代碼在本書的配套光盤中,課后的案例和課程回顧等保存在本書的慕課資源中,建議讀者先學(xué)習(xí)本章的基礎(chǔ)知識(shí),在最后通過線上教學(xué)資源進(jìn)行不斷的提升和課程的內(nèi)容的加強(qiáng)練習(xí)。
學(xué)習(xí)目的和要求1學(xué)習(xí)目的和要求目的:
通過對(duì)《夢(mèng)幻森林》案例的分析和學(xué)習(xí),了解完整項(xiàng)目的制作過程,學(xué)習(xí)交互設(shè)計(jì)思路。將素材與技術(shù)更好的結(jié)合。目的:
通過對(duì)《夢(mèng)幻森林》案例的分析和學(xué)習(xí),了解完整項(xiàng)目的制作過程,學(xué)習(xí)交互設(shè)計(jì)思路。將素材與技術(shù)更好的結(jié)合。要求:
基于《夢(mèng)幻森林》案例的了解結(jié)合對(duì)LeapMotion的學(xué)習(xí),設(shè)計(jì)并創(chuàng)新新的交互創(chuàng)意和ji'yu玩法。
重點(diǎn)和難點(diǎn)2重點(diǎn)和難點(diǎn)重點(diǎn):
掌握LeapMotion的基礎(chǔ)知識(shí),學(xué)會(huì)靈活運(yùn)用,完善項(xiàng)目。難點(diǎn):
對(duì)LeapMotion的運(yùn)用,研究出符合自己主題的功能,設(shè)計(jì)合理有趣。LeapMotion和項(xiàng)目完善3LeapMotion和項(xiàng)目完善本節(jié)主要是對(duì)《夢(mèng)幻森林》案例的最后一個(gè)交互模塊LeapMotion交互和整個(gè)項(xiàng)目最好完善部分的分析,在《夢(mèng)幻森林》的LeapMotion中,用簡(jiǎn)單的交互方式,實(shí)現(xiàn)蝴蝶群對(duì)LeapMotion手部的追蹤。LeapMotion和項(xiàng)目完善首先,先導(dǎo)入LeapMotion,進(jìn)入場(chǎng)景測(cè)試設(shè)備是否正常。,正常狀態(tài)如下圖所示將3D場(chǎng)景導(dǎo)入到LeapMotion場(chǎng)景中,導(dǎo)入蝴蝶資源包,添加進(jìn)入場(chǎng)景中。LeapMotion和項(xiàng)目完善LeapMotion和項(xiàng)目完善以下腳本負(fù)責(zé)控制蝴蝶的群組行為控制。usingSystem.Collections;usingSystem.Collections.Generic;usingunityEngine;publicclassBufferController:MonoBehaviour{publicfloatspeed=1;publicVector3velocity=Vector3.forward;privateVector3startVelocity;publicTransformtarget;publicVector3sumForce=Vector3.zero;
LeapMotion和項(xiàng)目完善
publicfloatm=10;publicfloatseparationDistance=3;publicList<GameObject>seprationNeighbors=newList<GameObject>();publicfloatseparationWeight=1;//publicVector3separationForce=Vector3.zero;//分離的力publicfloatalignmentDistance=6;publicList<GameObject>alignmentNeighbors=newList<GameObject>();publicfloatalignmentWeight=3;publicVector3alignmentForce=Vector3.zero;//隊(duì)列的力publicfloatcohesionWeight=1;publicVector3cohesionForce=Vector3.zero;//聚合的力publicfloatcheckInterval=0.2f;publicfloatanimRandomTime=2f;
privateAnimationanim;
LeapMotion和項(xiàng)目完善
privatevoidStart(){target=GameObject.Find("Target").transform;startVelocity=velocity;InvokeRepeating("CalcForce",0,checkInterval);anim=GetComponentInChildren<Animation>();Invoke("PlayAnim",Random.Range(0,animRandomTime));}voidPlayAnim(){anim.Play();}voidCalcForce(){print("calcForce");sumForce=Vector3.zero;separationForce=Vector3.zero;
LeapMotion和項(xiàng)目完善//計(jì)算分離的力seprationNeighbors.Clear();Collider[]colliders=Physics.OverlapSphere(transform.position,separationDistance);foreach(Collidercincolliders){if(c!=null&&c.gameObject!=this.gameObject){seprationNeighbors.Add(c.gameObject);}}foreach(GameObjectneighborinseprationNeighbors){Vector3dir=transform.position-neighbor.transform.position;separationForce+=dir.normalized/dir.magnitude;}if(seprationNeighbors.Count>0){separationForce*=separationWeight;sumForce+=separationForce;}
//計(jì)算隊(duì)列的力alignmentNeighbors.Clear();//清空鄰居每執(zhí)行一次清空一次colliders=Physics.OverlapSphere(transform.position,alignmentDistance);//物理檢測(cè)colliders的集合foreach(Collidercincolliders)//查找出來每一個(gè)Collider在colliders里找{if(c!=null&&c.gameObject!=this.gameObject)//c.gameObject!=this.gameObject是檢測(cè)本身,排除自己{alignmentNeighbors.Add(c.gameObject);//檢測(cè)到的添加到c.gameObject}}Vector3avgDir=Vector3.zero;//定義一個(gè)參數(shù)存儲(chǔ)平均朝向
LeapMotion和項(xiàng)目完善foreach(GameObjectninalignmentNeighbors)//遍歷所有的alignmentNeighbors{avgDir+=n.transform.forward;//把所有的n.transform都給平均朝向}if(alignmentNeighbors.Count>0)//如果隊(duì)列的鄰居大于0就是alignmentNeighbors不為空{(diào)avgDir/=alignmentNeighbors.Count;//得到平均朝向alignmentForce=avgDir-transform.forward;//alignmentForce平均朝向+transform.forward=avgDiralignmentForce*=alignmentWeight;sumForce+=alignmentForce;}//聚合的力if(alignmentNeighbors.Count>0){Vector3center=Vector3.zero;
LeapMotion和項(xiàng)目完善foreach(GameObjectninalignmentNeighbors){center+=n.transform.position;}center/=alignmentNeighbors.Count;Vector3dirToCenter=center-transform.position;cohesionForce+=dirToCenter.normalized*velocity.magnitude;cohesionForce*=cohesionWeight;sumForce+=cohesionForce;}//保持恒定飛行速度的力Vector3engineForce=velocity.normalized*startVelocity.magnitude;sumForce+=engineForce;Vector3targetDir=target.position-transform.position;sumForce+=(targetDir.normalized-transform.forward)*speed*20;}
LeapMotion和項(xiàng)目完善voidUpdate(){Vector3a=sumForce/m;velocity+=a*Time.deltaTime;//transform.rotation=Quaternion.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇海事職業(yè)技術(shù)學(xué)院《茶葉審評(píng)與檢驗(yàn)實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 華南理工大學(xué)《金蝶云ERP供應(yīng)鏈管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖北交通職業(yè)技術(shù)學(xué)院《地質(zhì)與地貌學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 遵義職業(yè)技術(shù)學(xué)院《工程軟件與程序設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 珠海藝術(shù)職業(yè)學(xué)院《建筑師業(yè)務(wù)基礎(chǔ)與實(shí)踐》2023-2024學(xué)年第一學(xué)期期末試卷
- 重慶青年職業(yè)技術(shù)學(xué)院《攝影報(bào)道》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江同濟(jì)科技職業(yè)學(xué)院《舞臺(tái)表演化妝與發(fā)型》2023-2024學(xué)年第一學(xué)期期末試卷
- 重慶安全技術(shù)職業(yè)學(xué)院《模擬電子技術(shù)實(shí)驗(yàn)B》2023-2024學(xué)年第一學(xué)期期末試卷
- 中南財(cái)經(jīng)政法大學(xué)《融媒體與節(jié)目策劃》2023-2024學(xué)年第一學(xué)期期末試卷
- 鄭州亞歐交通職業(yè)學(xué)院《裝配式建筑識(shí)圖與實(shí)務(wù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 中考英語(yǔ)688高頻詞大綱詞頻表
- GB/T 2315-2017電力金具標(biāo)稱破壞載荷系列及連接型式尺寸
- 標(biāo)準(zhǔn)工時(shí)基礎(chǔ)知識(shí)及應(yīng)用 課件
- 咽旁間隙腫瘤課件
- (完整版)中職數(shù)學(xué)習(xí)題及答案
- 高中語(yǔ)文 蘇軾導(dǎo)讀 課件
- 府谷縣恒陽(yáng)陽(yáng)建材有限公司-15萬(wàn)立方米-年混凝土攪拌站項(xiàng)目報(bào)告書
- 水中鋼管樁施工方案
- 上交所期權(quán)投資者綜合試卷考試及答案
- 超市日常工作檢查表
- 電纜熱穩(wěn)定校驗(yàn)計(jì)算書
評(píng)論
0/150
提交評(píng)論