版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
人機交互技術(shù)AI尋路系統(tǒng)(進階)目錄Catalog1教學目的與要求2重點、難點3教學進程安排4課后學習任務布置教學目的與要求01.本章將更深入地介紹AI尋路系統(tǒng),更有深度的探究尋路組件的其他功能。目的:教學目的與要求學生能夠深入了解尋路系統(tǒng),完成課堂的學習與討論,并且能夠積極完成課后作業(yè)。要求:重點、難點02.在尋路系統(tǒng)入門的基礎上進行進階學習,學習尋路系統(tǒng)的其他功能。重點:重點、難點尋路系統(tǒng)的整理。難點:教學進程安排03.梯子效果爬坡功能允許攀爬的只有最大限度為60°的坡度,當面對更大的坡度時,MaxSlope就已經(jīng)無法滿足我們的需求了。這時我們需要用到一個新的組件:OffMeshLink。我們只需要給梯子添加OffMeshLink組件并掛載底端和頂端的空物體,我們就可以完成爬梯子的效果,實現(xiàn)垂直爬坡了。尋路路線限制到此為止我們學習的尋路都是在同一片烘焙區(qū)域,通過最短路徑自行尋找目標的AI行為,但有時候我們需要限定不同的AI可以走的路線進行區(qū)分,這種情況我們就需要用到Navigation組件的Areas功能了。在Areas中我們可以添加烘焙區(qū)域名稱,添加后Object中可以給烘焙區(qū)域限定區(qū)域名稱,最后就可以在NavmeshAgent里面選擇行走區(qū)域來限定AI的行走路線了。道路阻斷在尋路系統(tǒng)中,只要AI開始尋路,就會“一去不回頭”。要怎么做才能在它尋路過程中對它進行中途阻止呢,我們只需要在相應的路段上添加一個名為NavMeshObstacle的組件,這一段路就會阻止AI通過了,再通過代碼控制該組件的顯隱性,就可以控制AI尋路時,相應路段的阻斷和連通了。課后學習任務布置學生分組討論,并整理進階尋路實現(xiàn)過程的筆記。人機交互技術(shù)群組行為教學目的與要求1重點難點2教學進程安排3課后學習任務布置4目錄CONTENTS教學目的與要求1教學目的與要求目的:本章將介紹群組行為功能的實現(xiàn)方法,讓學生了解群組行為的實現(xiàn)流程。要求:學生能夠使用群組行為模擬AI行為,完成課堂的學習與討論,并且能夠積極完成課后作業(yè)。重點難點2重點難點重點:在本章中我們要學會力學的簡單運算,組的管理方法,完成對整個群組的控制。難點:整理邏輯的整理,權(quán)重的把控。教學進程安排3群組行為的作用群組行為隊列聚集分離力學計算距離檢測碰撞組管理當有一群的人或者動物與環(huán)境進行真實的交互的時候,我們要想模擬出最真實的行為,就要讓群體的行為符合群體的特征。在不加入unity3d環(huán)境中的人工智能的情況下,用簡單的視覺模糊來進行鳥群的行為模擬。主要方法隊列的力力學計算聚集的力距離檢測分離的力碰撞組管理整個集體的前進方向恒定,不會因為個體而進行變動。每個個體都會向集體匯聚,不會脫離大部隊,分散太遠。每個個體都會與其他個體保持一定距離,不會非??拷?。通過牛頓第二定律計算每一個個體的前進方向和速度每一個個體通過距離檢測判斷自身附近是否有其他個體將附近的同類放到一個碰撞組中進行管理。群組行為的實現(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();//清除隊列數(shù)據(jù)
Collider[]colliders=Physics.OverlapSphere(transform.position,Lisan_Distance);//physicis之后代碼的作用:用來檢測以某個位置為半徑發(fā)射一個圓以檢測球體內(nèi)有哪些游戲物體(用來做物理檢測,得到的結(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++){//計算位置距離
Vector3dir=transform.position-Duilie_Partner[i].transform.position;Lisan_Force+=dir.normalized/dir.magnitude;//計算所有鄰居向前的向量和
}if(Duilie_Partner.Count>0){Lisan_Force*=Lisan_Weight;SumForce+=Lisan_Force;}}定義計算合力的函數(shù)并添加分離的力:群組行為的實現(xiàn)定義隊列的力變量:publicfloatDuilie_Distance=6;//檢測距離publicList<GameObject>Duilie_Partner=newList<GameObject>();publicfloatDuilie_Weight=3;publicVector3Duilie_Force=Vector3.zero;SumForce=Vector3.zero;
Lisan_Force=Vector3.zero;Duilie_Partner.Clear();//清除隊列數(shù)據(jù)
Collider[]colliders=Physics.OverlapSphere(transform.position,Lisan_Distance);//physicis之后代碼的作用:用來檢測以某個位置為半徑發(fā)射一個圓以檢測球體內(nèi)有哪些游戲物體(用來做物理檢測,得到的結(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++){//計算位置距離Vector3dir=transform.position-Duilie_Partner[i].transform.position;Lisan_Force+=dir.normalized/dir.magnitude;//計算所有鄰居向前的向量和
}if(Duilie_Partner.Count>0){Lisan_Force*=Lisan_Weight;SumForce+=Lisan_Force;}}在合力計算中添加隊列的力:群組行為的實現(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();//清除隊列數(shù)據(jù)
Collider[]colliders=Physics.OverlapSphere(transform.position,Lisan_Distance);//physicis之后代碼的作用:用來檢測以某個位置為半徑發(fā)射一個圓以檢測球體內(nèi)有哪些游戲物體(用來做物理檢測,得到的結(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++){//計算位置距離
Vector3dir=transform.position-Duilie_Partner[i].transform.position;Lisan_Force+=dir.normalized/dir.magnitude;//計算所有鄰居向前的向量和
}if(Duilie_Partner.Count>0){Lisan_Force*=Lisan_Weight;SumForce+=Lisan_Force;}}在合力計算中添加聚集的力:群組行為的實現(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)用計算合力的函數(shù):課后學習任務布置4課后學習任務布置學生分組討論,整理群組行為實現(xiàn)過程的筆記并理清整個功能的邏輯。THANKYOU人機交互技術(shù)Human-ComputerInteractionTechnology——基于LeapMotion的《夢幻森林》案例學習目的和要求1
重點和難點2《夢幻森林》LeapMotion和完善3
課后總結(jié)4目錄CONTENTS學習指導建議重點掌握LeapMotion基本手勢控制函數(shù),能夠替換不同的手部模型控制場景中的物體將LeapMotion與Unity3D進行連接,能夠理解相關(guān)的參數(shù)設定,并且能夠熟練的掌握位移、換色等基本操作強化練習LeapMotion的使用,通過相關(guān)的粒子特效案例增加趣味性、通過群組行為的控制使其和其他知識單元能夠緊密結(jié)合,并且能夠掌握相關(guān)的可穿戴設備的優(yōu)缺點,參加各項學科賽事本章的學習建議在實驗室的環(huán)境中進行,能夠結(jié)合相應的設備進行不斷的測試,同時本章的案例源代碼在本書的配套光盤中,課后的案例和課程回顧等保存在本書的慕課資源中,建議讀者先學習本章的基礎知識,在最后通過線上教學資源進行不斷的提升和課程的內(nèi)容的加強練習。
學習目的和要求1學習目的和要求目的:
通過對《夢幻森林》案例的分析和學習,了解完整項目的制作過程,學習交互設計思路。將素材與技術(shù)更好的結(jié)合。目的:
通過對《夢幻森林》案例的分析和學習,了解完整項目的制作過程,學習交互設計思路。將素材與技術(shù)更好的結(jié)合。要求:
基于《夢幻森林》案例的了解結(jié)合對LeapMotion的學習,設計并創(chuàng)新新的交互創(chuàng)意和ji'yu玩法。
重點和難點2重點和難點重點:
掌握LeapMotion的基礎知識,學會靈活運用,完善項目。難點:
對LeapMotion的運用,研究出符合自己主題的功能,設計合理有趣。LeapMotion和項目完善3LeapMotion和項目完善本節(jié)主要是對《夢幻森林》案例的最后一個交互模塊LeapMotion交互和整個項目最好完善部分的分析,在《夢幻森林》的LeapMotion中,用簡單的交互方式,實現(xiàn)蝴蝶群對LeapMotion手部的追蹤。LeapMotion和項目完善首先,先導入LeapMotion,進入場景測試設備是否正常。,正常狀態(tài)如下圖所示將3D場景導入到LeapMotion場景中,導入蝴蝶資源包,添加進入場景中。LeapMotion和項目完善LeapMotion和項目完善以下腳本負責控制蝴蝶的群組行為控制。usingSystem.Collections;usingSystem.Collections.Generic;usingunityEngine;publicclassBufferController:MonoBehaviour{publicfloatspeed=1;publicVector3velocity=Vector3.forward;privateVector3startVelocity;publicTransformtarget;publicVector3sumForce=Vector3.zero;
LeapMotion和項目完善
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;//隊列的力publicfloatcohesionWeight=1;publicVector3cohesionForce=Vector3.zero;//聚合的力publicfloatcheckInterval=0.2f;publicfloatanimRandomTime=2f;
privateAnimationanim;
LeapMotion和項目完善
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和項目完善//計算分離的力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;}
//計算隊列的力alignmentNeighbors.Clear();//清空鄰居每執(zhí)行一次清空一次colliders=Physics.OverlapSphere(transform.position,alignmentDistance);//物理檢測colliders的集合foreach(Collidercincolliders)//查找出來每一個Collider在colliders里找{if(c!=null&&c.gameObject!=this.gameObject)//c.gameObject!=this.gameObject是檢測本身,排除自己{alignmentNeighbors.Add(c.gameObject);//檢測到的添加到c.gameObject}}Vector3avgDir=Vector3.zero;//定義一個參數(shù)存儲平均朝向
LeapMotion和項目完善foreach(GameObjectninalignmentNeighbors)//遍歷所有的alignmentNeighbors{avgDir+=n.transform.forward;//把所有的n.transform都給平均朝向}if(alignmentNeighbors.Count>0)//如果隊列的鄰居大于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和項目完善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和項目完善voidUpdate(){Vector3a=sumForce/m;velocity+=a*Time.deltaTime;//transform.rotation=Quaternion.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024牛肉供應鏈優(yōu)化與物流配送合同
- 二零二五年鮑魚海鮮產(chǎn)品進出口合同2篇
- 2025年度中小企業(yè)財務輔導與融資對接服務合同3篇
- 2025年工藝品FOB出口合同標準范本2篇
- 2024年相機設備采購正式協(xié)議樣本
- 2024特定事項補充協(xié)議范本版B版
- 2025年度淋浴房安全檢測與安裝服務合同4篇
- 2025年環(huán)保型小區(qū)車棚租賃與充電樁建設合同3篇
- 2025年度綠色生態(tài)園林景觀項目苗木采購合同樣本3篇
- 2025年度消防設施設備安全性能評估合同3篇
- 軟件項目應急措施及方案
- 2025河北邯鄲經(jīng)開國控資產(chǎn)運營管理限公司招聘專業(yè)技術(shù)人才5名高頻重點提升(共500題)附帶答案詳解
- 2024年民法典知識競賽考試題庫及答案(共50題)
- 2025老年公寓合同管理制度
- 2024-2025學年人教版數(shù)學六年級上冊 期末綜合卷(含答案)
- 2024中國汽車后市場年度發(fā)展報告
- 鈑金設備操作培訓
- 感染性腹瀉的護理查房
- 天津市部分區(qū)2023-2024學年高二上學期期末考試 物理 含解析
- 水利工程招標文件樣本
- 第17課 西晉的短暫統(tǒng)一和北方各族的內(nèi)遷(說課稿)-2024-2025學年七年級歷史上冊素養(yǎng)提升說課稿(統(tǒng)編版2024)
評論
0/150
提交評論