Unity【RaycastHit】- 关于射线投射碰撞信息中normal法线向量的运用

简介: Unity【RaycastHit】- 关于射线投射碰撞信息中normal法线向量的运用

当我们使用射线投射检测到碰撞时,可以从RaycastHit中获取射线投射返回的信息,其中normal变量表示碰撞物体表面的法线向量:

using UnityEngine;
public class Example : MonoBehaviour
{
    private void Update()
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        bool flag = Physics.Raycast(ray, out RaycastHit hit);
        if (flag)
        {
            //法线信息 
            Debug.Log(hit.normal);
        }
    }
}

image.gif

Unity圣典中的介绍:

image.gif

例如子弹击中物体时,会在物体表面生成一个弹孔,该弹孔的朝向可以通过normal法线向量进行设置,同样,击中物体时产生的溅射粒子特效的朝向也需要根据该法线信息进行设置。

image.gif

image.gif

我们通过鼠标点击来模拟上面的效果,从鼠标位置发出一条射线进行检测,点击鼠标时在碰撞点生成一个弹孔及溅射粒子特效,代码如下:

usingUnityEngine;
usingUnityEditor;
publicclassExample : MonoBehaviour{
    [SerializeField] privateGameObjectdecal;
    [SerializeField] privateGameObjecteffect;
privateboolflag;
privateRaycastHithit;
privatevoidUpdate()
    {
Rayray=Camera.main.ScreenPointToRay(Input.mousePosition);
flag=Physics.Raycast(ray, outhit);
if (flag)
        {
if (Input.GetMouseButtonDown(0))
            {
vardecalInstance=Instantiate(decal);
decalInstance.transform.position=hit.point+hit.normal* .02f;
decalInstance.transform.forward=hit.normal;
vareffectInstance=Instantiate(effect);
effectInstance.transform.position=hit.point+hit.normal* .02f;
effectInstance.transform.forward=hit.normal;
            }
        }
    }
privatevoidOnDrawGizmos()
    {
Handles.color=Color.cyan;
if (flag)
        {
Handles.DrawLine(hit.point, hit.point+hit.normal);
        }   
    }
}

image.gif

image.gif

image.gif

目录
相关文章
|
图形学
Unity射线检测的避坑指南
Unity射线检测的避坑指南
|
5月前
|
存储 图形学
【unity小技巧】unity中导入下载的3D模型及albedo/baseColor、normal 、AO/Occlus、metallic、roughness贴图纹理设置
【unity小技巧】unity中导入下载的3D模型及albedo/baseColor、normal 、AO/Occlus、metallic、roughness贴图纹理设置
100 0
|
6月前
|
C# 图形学
【Unity 3D】元宇宙案例之虚拟地球信息射线实战(附源码、演示视频和步骤 超详细)
【Unity 3D】元宇宙案例之虚拟地球信息射线实战(附源码、演示视频和步骤 超详细)
114 0
|
11月前
|
图形学
Unity 向量
Unity 向量
|
11月前
|
数据可视化 图形学
Unity射线编程详解
Unity射线编程详解
102 0
|
图形学
unity基础-坦克炮管旋转发射炮弹(向量基础,射线碰撞,物体实例化)
unity基础-坦克炮管旋转发射炮弹(向量基础,射线碰撞,物体实例化)
401 0
|
图形学
Unity基础——向量
Unity基础——向量
504 0
UGUI系列-鼠标移动到按钮上显示信息(Unity3D)
有时候图标不能很好的说明这个功能的解释,就需要一些说明性文字显示。就比如可以在鼠标移动到UI上面的时候显示文字。 那么如何在UGUI上,鼠标移动上去显示文字说明呢。 大家都知道,当鼠标移动到button按钮上面的时候会出现变化,主要是button这个组件在控制
|
JSON Java API
获取天气信息以及地方位置(Unity3D)
前段时间有小伙伴问到如何用Unity制作天气预报,博主也是在网上找了很多资料,发现天气API接口稳定的确实没有,除非是天气官方提供的, 但是我观察了下,要是合作伙伴才有开放的可能。 其他的,例如:百度 APIStore、一些同学在其他网站上抓包下来的接口,以及什么各种收费的 API,都没有稳定的。 找了很多接口API,发现了一个比较好用的免费天气API,就分享一下
|
API vr&ar 图形学
【100个 Unity小知识点】☀️ | Unity中使用代码查询Draw call、Tris和Verts等信息
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。 也可以简单把 Unity 理解为一个游戏引擎,可以用来专业制作游戏!
【100个 Unity小知识点】☀️ | Unity中使用代码查询Draw call、Tris和Verts等信息