人機(jī)交互技術(shù) 課件9群組行為_第1頁
人機(jī)交互技術(shù) 課件9群組行為_第2頁
人機(jī)交互技術(shù) 課件9群組行為_第3頁
人機(jī)交互技術(shù) 課件9群組行為_第4頁
人機(jī)交互技術(shù) 課件9群組行為_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

人機(jī)交互技術(shù)群組行為教學(xué)目的與要求1重點難點2教學(xué)進(jìn)程安排3課后學(xué)習(xí)任務(wù)布置4目錄CONTENTS教學(xué)目的與要求1教學(xué)目的與要求目的:本章將介紹群組行為功能的實現(xiàn)方法,讓學(xué)生了解群組行為的實現(xiàn)流程。要求:學(xué)生能夠使用群組行為模擬AI行為,完成課堂的學(xué)習(xí)與討論,并且能夠積極完成課后作業(yè)。重點難點2重點難點重點:在本章中我們要學(xué)會力學(xué)的簡單運(yùn)算,組的管理方法,完成對整個群組的控制。難點:整理邏輯的整理,權(quán)重的把控。教學(xué)進(jìn)程安排3群組行為的作用群組行為隊列聚集分離力學(xué)計算距離檢測碰撞組管理當(dāng)有一群的人或者動物與環(huán)境進(jìn)行真實的交互的時候,我們要想模擬出最真實的行為,就要讓群體的行為符合群體的特征。在不加入unity3d環(huán)境中的人工智能的情況下,用簡單的視覺模糊來進(jìn)行鳥群的行為模擬。主要方法隊列的力力學(xué)計算聚集的力距離檢測分離的力碰撞組管理整個集體的前進(jìn)方向恒定,不會因為個體而進(jìn)行變動。每個個體都會向集體匯聚,不會脫離大部隊,分散太遠(yuǎn)。每個個體都會與其他個體保持一定距離,不會非??拷?。通過牛頓第二定律計算每一個個體的前進(jìn)方向和速度每一個個體通過距離檢測判斷自身附近是否有其他個體將附近的同類放到一個碰撞組中進(jì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.rotati

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論