“射线检测是在3D数字世界里选择某个特定物体常用的一种技术,如在3D、VR游戏中检测子弹命中敌人情况或者从地上捡起一支枪,这都要用到射线检测,射线检测是在3D数字空间中选择虚拟物体的最基本方法。 ”
一:画射线
效果:
我们先创建一个物体,挂脚本<RayTest>,代码如下:
public class RayTest : MonoBehaviour
{
Ray ray; //声明射线
void Start()
{
ray = new Ray();
ray.origin = transform.position; //射线起点
ray.direction = transform.forward; //射线方向
}
// Update is called once per frame
void Update()
{
Debug.DrawRay(ray.origin, ray.direction * 3, Color.green);
//三个参数:起点,方向(*3代表三个单位距离),颜色
}
}
二:射线检测
1)检测物体
是否可以检测到物体呢?我们可以打印输出看一看。
if(Physics.Raycast(ray))
{
print("检测到了游戏对象");
}
结果:只要有物体被此射线击中,就会打印这句话。
2)相机(屏幕)发射射线
我们把这个圆球,命名为Target,想要实现鼠标左键单击这个球,会生成黄色的弹壳,效果如下:
代码如下:
//如果单击鼠标左键
if(Input.GetMouseButtonDown(0))
{
//在鼠标点击处发射射线
Ray camRay = Camera.main.ScreenPointToRay(Input.mousePosition);
//如有有物体被检测到
if(Physics.Raycast(camRay,out RaycastHit hits))
{
//如果被击中的物体名字为Target
if(hits.transform.name == "Target")
{
//产生一个弹壳
GameObject bullet = GameObject.CreatePrimitive(PrimitiveType.Capsule);
bullet.transform.localScale = Vector3.one * 0.5f;
bullet.GetComponent<MeshRenderer>().material.color = Color.yellow;
//在鼠标点击处生成弹壳
bullet.transform.position = hits.point;
}
}
}
3)点击地面实现物体寻路(导航)
这里的前提是player需要有NavMeshAgent组件,地面Plane需要添加tag=“Ground”,地面还需要烘焙哦!
文章来源地址https://www.toymoban.com/news/detail-611770.html
文章来源:https://www.toymoban.com/news/detail-611770.html
到了这里,关于【超级入门】Unity如何实现画射线+射线检测+NavMeshAgent结合的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!