Unity中Physics.Raycast 的使用

这篇具有很好参考价值的文章主要介绍了Unity中Physics.Raycast 的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Unity中Physics.Raycast 的使用,unity,游戏引擎,c#

Physics.Raycast 简介    ▼

Physics.Raycast 官方文档中提供的参数如下  

Unity中Physics.Raycast 的使用,unity,游戏引擎,c#

Unity中Physics.Raycast 的使用,unity,游戏引擎,c#

 Physics.Raycast 从指定的位置发射一条射线,如果射线与物体发生碰撞返回true否则返回false

其中射线的起点,方向是不可以省略的,其他参数可以省略

案例▼

  • 第1,2个参数定义了一条射线的起点与方向
  • 第3个参数为RaycastHi用以从射线获取参数
    RaycastHit hit;
    void Update()
    {
        //如果检测到物体
        if (Physics.Raycast(transform.position, transform.forward, out hit))
        {
             Debug.Log(hit.collider);//命中的 Collider。
            //打印一条从物体到碰撞点的红色射线,hit.point世界空间中射线命中碰撞体的撞击点
            Debug.DrawLine(transform.position, hit.point, Color.red);
        }
        else //没有检测到物体
        {
            //打印一条从物体出发的黄色射线
            Debug.DrawRay(transform.position, transform.position + transform.forward * 100, Color.yellow);
        }
    }

运行效果如下 可以看到射线与其他物体碰撞变成红色 ▼ 

Unity中Physics.Raycast 的使用,unity,游戏引擎,c#

也可以直接定义一条射线ray替换1,2条参数。下面的代码与上面的代码功能相同

    Ray ray;
    RaycastHit hit;
    void Update()
    {
        ray = new Ray(transform.position, transform.forward);
        //如果检测到物体
        if (Physics.Raycast(ray, out hit))
        {
             Debug.Log(hit.collider);//输出命中的 Collider。
            //打印一条从物体到碰撞点的射线,hit.point世界空间中射线命中碰撞体的撞击点
             Debug.DrawLine(ray.origin, ray.origin + ray.direction * 100,Color.red);
        }
        else //没有检测到物体
        {
            Debug.DrawLine(ray.origin, ray.origin + ray.direction * 100, Color.yellow);
        }
    }

给射线设置一个检测距离之后,射线距离之外的物体不会发生碰撞

 Physics.Raycast(ray, out hit,3)(可以看到射线碰撞到第一个方块之后变为红色,碰撞到第二个方块后没有改变,这是因为第二个方块超出了射线检测范围)▼

Unity中Physics.Raycast 的使用,unity,游戏引擎,c#

 给Physics.Raycast设置一个遮罩参数之后可以有选择的忽略碰撞体。

(Physics.Raycast(ray, out hit, 10, mask)

这里我们给正方体Layer设置为Default,球形Layer设置为Sphere。之后选定Mask为Sphere

Unity中Physics.Raycast 的使用,unity,游戏引擎,c#

    Ray ray;
    RaycastHit hit;
    public LayerMask mask;
    void Update()
    {
        ray = new Ray(transform.position, transform.forward);
        //如果检测到物体 
        if (Physics.Raycast(ray, out hit, 10, mask))
        {
            Debug.Log(hit.collider);//输出命中的 Collider。
            //打印一条从物体到碰撞点的射线,hit.point世界空间中射线命中碰撞体的撞击点
            Debug.DrawLine(ray.origin, ray.origin + ray.direction * 100,Color.red);
        }
        else //没有检测到物体
        {Debug.DrawLine(ray.origin, ray.origin + ray.direction * 100, Color.yellow);
        }
    }

 运行效果如下,射线在接触到正方体是没有发生改变,接触到球形时变为红色▼

Unity中Physics.Raycast 的使用,unity,游戏引擎,c#

为Physics.Raycast设置一个QueryTriggerInteraction.Ignore参数之后,射线不在检测触发器

 ▼操作如下▼

为红色方块选择Is Triggr属性。蓝色方块不选。

Unity中Physics.Raycast 的使用,unity,游戏引擎,c#

  •  QueryTriggerInteraction.Collide 检测触发器
  •  QueryTriggerInteraction.Ignore 不检测触发器
     Ray ray;
    RaycastHit hit;
    public LayerMask mask;
    void Update()
    {
        ray = new Ray(transform.position, transform.forward);
        //如果检测到物体  
        //QueryTriggerInteraction.Collide 检测触发器
        //QueryTriggerInteraction.Ignore 不检测触发器
        if (Physics.Raycast(ray, out hit, 10, mask, QueryTriggerInteraction.Ignore))
        {
            Debug.Log(hit.collider);//输出命中的 Collider。
            //打印一条从物体到碰撞点的射线,hit.point世界空间中射线命中碰撞体的撞击点
            Debug.DrawLine(ray.origin, ray.origin + ray.direction * 100,Color.red);
        }
        else //没有检测到物体
        {
            Debug.DrawLine(ray.origin, ray.origin + ray.direction * 100, Color.yellow);
        }
    }

运行效果如下▼ (射线碰撞到红色方块时没有发生改变,碰撞到蓝色方块变为红色)

Unity中Physics.Raycast 的使用,unity,游戏引擎,c#

Physics.Raycast 的使用   ▼

  • 配合寻路导航系统,做移动到鼠标点击位置功能

---Unity中寻路导航的基本使用

Unity中Physics.Raycast 的使用,unity,游戏引擎,c#文章来源地址https://www.toymoban.com/news/detail-716177.html

        using UnityEngine;
        using UnityEngine.AI;
    
        public class MoveToClickPoint : MonoBehaviour {
            NavMeshAgent agent;
        
            void Start() {
                agent = GetComponent<NavMeshAgent>();
            }
        
            void Update() {
                if (Input.GetMouseButtonDown(0)) {
                    RaycastHit hit;
                
                    if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit, 100)) {
                        agent.destination = hit.point;
                    }
                }
            }
        } 

到了这里,关于Unity中Physics.Raycast 的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • DOTS Unity.Physics物理引擎碰撞事件处理

    最近DOTS发布了正式的版本,同时基于DOTS的理念实现了一套高性能的物理引擎,今天我们给大家分享和介绍一下这个物理引擎的碰撞事件处理以及核心相关概念。 Unity.Physics 物理引擎的主要流程与P ipeline   Unity.Physics物理引擎做仿真迭代计算的时候主要通过以下步骤来执行:   

    2024年01月18日
    浏览(39)
  • DOTS Unity.Physics物理引擎碰撞查询核心分析

      最近DOTS发布了正式的版本,同时基于DOTS的理念实现了一套高性能的物理引擎,今天我们给大家分享和介绍一下这个物理引擎的碰撞查询以及核心相关概念。 Unity.Physics碰撞查询概述   碰撞查询(Collison Qurey)是Unity.Physics物理引擎中的一个很重要的功能。很多游戏逻辑都需

    2024年04月25日
    浏览(37)
  • DOTS Unity.Physics物理引擎的核心分析与详解

    最近DOTS发布了正式的版本,同时基于DOTS的理念实现了一套高性能的物理引擎,今天我们来给大家分享和介绍一下这个物理引擎的使用。 Unity.Physics 的设计哲学 Unity.Physics是基于DOTS设计思想的一个高性能C#物理引擎的实现,  包含了物理刚体的迭代计算与碰撞检测等查询。Unity.

    2024年03月18日
    浏览(42)
  • 使用团结引擎开发Unity 3D射击游戏

           本案例是初级案例,意在引导想使用unity的初级开发者能较快的入门,体验unity开发的方便性和简易性能。       本次我们将使用团结引擎进行开发,帮助想体验团结引擎的入门开发者进行较快的环境熟悉。      本游戏是一个俯视角度的射击游戏。主角始终位于屏幕

    2024年01月19日
    浏览(52)
  • Unity 关于Ray、RaycastHit、Raycast及其使用

    Unity中,我们要进行物理模拟和碰撞检测时,有三个重要的概念Ray、RaycastHit、Raycast。 其中,Ray可以理解为射线,它是一条从起点沿着特定方向延伸的无限长线段。 它的语法是: 它定义了两个参数,一个起点位置和一个方向,通过Ray射线,可以用来模拟子弹、光线、玩家视线

    2024年02月03日
    浏览(35)
  • Physics.Raycast

    Physics.Raycast 是 Unity 中用于检测物体之间碰撞的函数之一。它使用一条射线来检测场景中的物体,返回一个 bool 值表示是否检测到了碰撞,以及一个 RaycastHit 结构体存储着射线碰撞到的物体的信息。 Physics.Raycast 的完整签名如下: 该函数的参数如下: ray :一条用于检测碰撞的

    2024年02月12日
    浏览(31)
  • 关于Unity Physics.CheckBox的使用方法

    在UnityAPI手册中Physics.CheckBox是Unity Physics类中的一个方法,该方法拥有四个重载,用于检查给定的盒体是否与其他碰撞体重叠。 public static bool CheckBox (Vector3 center, Vector3 halfExtents, Quaternion orientation= Quaternion.identity, int layermask= DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteracti

    2024年01月21日
    浏览(29)
  • 十八、Unity游戏引擎入门

    1、下载     首先需要下载Unity Hub,下载网址:https://unity.com/cn。     然后在其中下载Unity编辑器并安装,可选择最新版本。     接着需要选择适合的开发环境,例如Android Studio或Xcode,以便进行手机游戏开发。在安装完Unity后,需要根据项目需求下载对应的模块和插件,例

    2024年02月16日
    浏览(51)
  • Unity、UE、Cocos游戏开发引擎的区别

    Unity、Unreal Engine(UE)和Cocos引擎是三个常用的游戏开发引擎,它们在功能和特性上有一些区别。以下是它们之间的主要区别: 编程语言:Unity使用C#作为主要的编程语言,开发者可以使用C#脚本进行游戏逻辑编写。Unreal Engine主要使用C++作为编程语言,但也支持蓝图系统,允许

    2024年02月22日
    浏览(47)
  • Unity UGUI的Physics2DRaycaster (2D物理射线检测)组件的介绍及使用

    Physics2DRaycaster是Unity中的一个UGUI组件,用于在2D场景中进行物理射线检测。它可以检测鼠标或触摸事件在UI元素上的碰撞,并将事件传递给相应的UI元素。 Physics2DRaycaster通过发射一条射线来检测UI元素的碰撞。当射线与UI元素相交时,Physics2DRaycaster会将事件传递给相应的UI元素,

    2024年02月15日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包