? ? ? ?“射線檢測(cè)是在3D數(shù)字世界里選擇某個(gè)特定物體常用的一種技術(shù),如在3D、VR游戲中檢測(cè)子彈命中敵人情況或者從地上撿起一支槍,這都要用到射線檢測(cè),射線檢測(cè)是在3D數(shù)字空間中選擇虛擬物體的最基本方法。 ”
一:畫射線
效果:
我們先創(chuàng)建一個(gè)物體,掛腳本<RayTest>,代碼如下:
public class RayTest : MonoBehaviour
{
Ray ray; //聲明射線
void Start()
{
ray = new Ray();
ray.origin = transform.position; //射線起點(diǎn)
ray.direction = transform.forward; //射線方向
}
// Update is called once per frame
void Update()
{
Debug.DrawRay(ray.origin, ray.direction * 3, Color.green);
//三個(gè)參數(shù):起點(diǎn),方向(*3代表三個(gè)單位距離),顏色
}
}
二:射線檢測(cè)
1)檢測(cè)物體
是否可以檢測(cè)到物體呢?我們可以打印輸出看一看。
if(Physics.Raycast(ray))
{
print("檢測(cè)到了游戲?qū)ο?);
}
結(jié)果:只要有物體被此射線擊中,就會(huì)打印這句話。
?
2)相機(jī)(屏幕)發(fā)射射線
我們把這個(gè)圓球,命名為Target,想要實(shí)現(xiàn)鼠標(biāo)左鍵單擊這個(gè)球,會(huì)生成黃色的彈殼,效果如下:
代碼如下:
//如果單擊鼠標(biāo)左鍵
if(Input.GetMouseButtonDown(0))
{
//在鼠標(biāo)點(diǎn)擊處發(fā)射射線
Ray camRay = Camera.main.ScreenPointToRay(Input.mousePosition);
//如有有物體被檢測(cè)到
if(Physics.Raycast(camRay,out RaycastHit hits))
{
//如果被擊中的物體名字為Target
if(hits.transform.name == "Target")
{
//產(chǎn)生一個(gè)彈殼
GameObject bullet = GameObject.CreatePrimitive(PrimitiveType.Capsule);
bullet.transform.localScale = Vector3.one * 0.5f;
bullet.GetComponent<MeshRenderer>().material.color = Color.yellow;
//在鼠標(biāo)點(diǎn)擊處生成彈殼
bullet.transform.position = hits.point;
}
}
}
?3)點(diǎn)擊地面實(shí)現(xiàn)物體尋路(導(dǎo)航)
? ? ? ? 這里的前提是player需要有NavMeshAgent組件,地面Plane需要添加tag=“Ground”,地面還需要烘焙哦!
?文章來源地址http://www.zghlxwxcb.cn/news/detail-611770.html
?文章來源:http://www.zghlxwxcb.cn/news/detail-611770.html
?
?
到了這里,關(guān)于【超級(jí)入門】Unity如何實(shí)現(xiàn)畫射線+射線檢測(cè)+NavMeshAgent結(jié)合的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!