向量在游戲AI中的應(yīng)用
責(zé)任編輯:3D數(shù)媒 時(shí)間:2013-01-11 21:23
[導(dǎo)讀]
向量在游戲中的應(yīng)用是不可或缺的,今天我要做的筆記就是向量點(diǎn)乘在游戲AI中的應(yīng)用。
在做3D游戲時(shí),我們時(shí)常會(huì)想到當(dāng)敵人在我們前方時(shí)角色應(yīng)該做出什么反應(yīng),而當(dāng)角色在我們左方、右方或后方時(shí)我又該做出什么反應(yīng),這是游戲AI最基本的問(wèn)題,想是容易,但是計(jì)算機(jī)就是計(jì)算機(jī)它需要我用程序去表達(dá),如果沒(méi)有想法會(huì)讓我們不知從何寫起。
這里我們首先需要理解向量的點(diǎn)乘:兩個(gè)向量相乘=兩個(gè)向量的模 * 兩個(gè)向量夾角的余弦值,理解這個(gè)之后我開(kāi)始考慮我們需要解決的問(wèn)題。
首先我們先計(jì)算出由自身與目標(biāo)點(diǎn)得出的向量(向量=終點(diǎn) 減去 起點(diǎn)(小啰嗦一下)),然后把得出的向量單位化,這樣一來(lái),當(dāng)我們把這個(gè)得出方向向量 與我們自身的某一單位方向向量進(jìn)行點(diǎn)乘得出的結(jié)果不就是我們夾角的余弦值嗎?這時(shí)我們只要根據(jù)當(dāng)前所計(jì)算出得值便可確定出敵人現(xiàn)在在我們角色的什么方向了,樣例代碼:
Public Transform target; //敵人
Vector3 dir = (target.position - transform.position).normalized;
Float direction = vector3.Dot(dir,transform.forward) ;
If( direction > 0.9f)
{
Debug.log("敵人在前方");
}
Else
{
Debug.log("不知道");
}
dir = (target.position - transform.position).normalized;
direction = vector3.Dot(dir,transform.right) ;
If( direction > 0.3f)
{
Debug.log("敵人在右邊");
}
Else if(direction < -0.3f)
{
Debug.log("敵人在左邊");
}
Else
{
Debug.log("不知道");
}
……(剩下的一樣)
不過(guò)有時(shí)候我們會(huì)遇到這樣的問(wèn)題,但角色和敵人被某些東東擋住了,我們是不可能發(fā)現(xiàn)敵人的啊,這是當(dāng)然的,在游戲中我想應(yīng)該常用的是通過(guò)發(fā)射射線來(lái)檢測(cè),就是在自身的位置想敵人發(fā)射一條射線,檢測(cè)這條射線有沒(méi)有什么碰觸,有就說(shuō)明他們之間是看不到的,我們應(yīng)該怎么樣,沒(méi)有就說(shuō)明可能是看到的,因?yàn)檫@里還涉及到我們是否在敵人的視野范圍之內(nèi)。(發(fā)射物理射線是我很喜歡干的一件事,尤其是通過(guò)屏幕(也就是攝像機(jī))向三維場(chǎng)景發(fā)射射線來(lái)定位我們當(dāng)前點(diǎn)擊的位置然后做出相應(yīng)的反應(yīng),當(dāng)然正確的理解三維中的幾個(gè)空間關(guān)系更有助于我們處理這些空間的相互轉(zhuǎn)化(我現(xiàn)在都還沒(méi)理解透,因?yàn)槲以谟?jì)算機(jī)圖形學(xué)里沒(méi)遇到過(guò)像unity里面提到的一些空間,呵呵可能是自己學(xué)的還是太少了))
- 分享到:
- 有巨蟹座男朋友的女2017年06月21日
- 高校人才引進(jìn)看重“2016年08月23日
- 視覺(jué)設(shè)計(jì)該如何賦予2016年08月23日
- 如何創(chuàng)造設(shè)計(jì)經(jīng)典2016年08月23日
- MLikeasong答互聯(lián)網(wǎng)軟件2016年08月19日
- 工業(yè)設(shè)計(jì)創(chuàng)業(yè)的誤區(qū)2016年08月18日
- 2016年北京理工大學(xué)工2015年08月10日
- 中國(guó)一線城市近8成白2015年08月04日
- 2010宅男腐女們的杯洗2015年08月04日
- 深圳長(zhǎng)途搬家公司包2013年03月22日
您需要登錄后才可以發(fā)帖 登錄 | 立即注冊(cè)
- 用戶名:
- 密 碼:
- 驗(yàn)證碼:
看不清? 點(diǎn)擊更換
- 忘記密碼?
全部評(píng)論:0條
-
羅馬柱3d模型專題 環(huán)藝設(shè)計(jì)專題 3dsmax視頻教程專題 德國(guó)IF設(shè)計(jì)獎(jiǎng)專題 maya2011專題 壁燈3D模型專題 專題 自行車設(shè)計(jì)專題 創(chuàng)意小玩意專題 3d打印筆專題 護(hù)士節(jié)禮物專題 冰箱設(shè)計(jì)專題 創(chuàng)意手表專題 煙盒設(shè)計(jì)專題 超市創(chuàng)意陳列專題 創(chuàng)意婚紗照專題 小戶型空間創(chuàng)意設(shè)計(jì)專題 創(chuàng)意明信片專題 母親節(jié)禮物專題 sketchup教程專題