Unity 之 RaycastHit(存储射线投射操作)

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

unity 射线使用,Unity,unity,游戏引擎

总述

RaycastHit 类是 Unity 中的一个结构,用于存储射线投射操作的结果。射线投射是一种常用的技术,用于检测场景中的碰撞、获取碰撞点、获取碰撞对象的信息等。RaycastHit 提供了关于射线与场景中对象的交互信息,包括碰撞点、碰撞法线、碰撞对象等。以下是关于 RaycastHit 的详细介绍:

  1. 射线投射: 在 Unity 中,可以使用 Physics.RaycastPhysics.RaycastAll 方法来进行射线投射。这些方法将返回一个 RaycastHit 对象,其中包含有关射线与场景中对象的交互信息。

  2. 属性和方法: RaycastHit 类提供了许多属性和方法,用于获取射线与碰撞对象的相关信息,包括但不限于:

    • point:碰撞点的世界坐标。
    • normal:碰撞点处的法线向量。
    • distance:射线起点到碰撞点的距离。
    • collider:与射线相交的碰撞器。
    • transform:与射线相交的游戏对象的变换。
    • 等等…
  3. 多次投射: 如果使用 Physics.RaycastAll 进行多次射线投射,将返回一个 RaycastHit[] 数组,其中包含所有射线与场景中对象的交互信息。这在需要获取所有碰撞点信息的情况下很有用。

具体使用场景

当使用 RaycastHit 类进行射线投射时,有许多不同的使用场景,包括检测碰撞、拾取物体、瞄准检测、物体高亮等。在以下每个场景示例中,我将向您展示如何使用 RaycastHit,并加入一些粒子效果(“lizi”,即粒子效果在中文中的写法)来增强可视化效果。

  1. 检测碰撞并发射粒子:

在这个场景中,我们将使用射线投射来检测是否与一个可交互的对象发生碰撞,然后在碰撞点发射一些粒子效果。

using UnityEngine;

public class RaycastCollisionExample : MonoBehaviour
{
    public ParticleSystem collisionParticles; // 粒子效果

    void Update()
    {
        Ray ray = new Ray(transform.position, transform.forward);
        RaycastHit hitInfo;

        if (Physics.Raycast(ray, out hitInfo))
        {
            // 碰撞点发射粒子效果
            if (collisionParticles != null)
            {
                collisionParticles.transform.position = hitInfo.point;
                collisionParticles.Play();
            }

            Debug.Log("碰撞对象:" + hitInfo.collider.gameObject.name);
        }
    }
}

在这个示例中,我们在碰撞点发射了一个粒子效果,从而在用户与可交互对象发生碰撞时产生视觉效果。

  1. 物体拾取与交互:

在这个场景中,我们将使用射线投射来检测是否与一个可拾取的物体发生碰撞,然后可以将物体拾取并交互。

using UnityEngine;

public class ObjectPickupExample : MonoBehaviour
{
    private Transform pickedObject = null; // 当前拾取的物体

    void Update()
    {
        Ray ray = new Ray(transform.position, transform.forward);
        RaycastHit hitInfo;

        if (Physics.Raycast(ray, out hitInfo))
        {
            // 拾取物体
            if (Input.GetKeyDown(KeyCode.E))
            {
                if (hitInfo.collider.CompareTag("Pickable"))
                {
                    pickedObject = hitInfo.collider.transform;
                    Debug.Log("拾取了:" + pickedObject.name);
                }
            }

            // 交互
            if (Input.GetKeyDown(KeyCode.F))
            {
                if (pickedObject != null)
                {
                    Debug.Log("与 " + pickedObject.name + " 进行了交互。");
                }
            }
        }
    }
}

在这个示例中,我们使用 Input.GetKeyDown(KeyCode.E) 来拾取与射线相交的可拾取物体,并使用 Input.GetKeyDown(KeyCode.F) 来与拾取的物体进行交互。

  1. 物体高亮效果:

在这个场景中,我们将使用射线投射来检测是否与一个物体发生碰撞,然后在碰撞对象上显示一个高亮的粒子效果。

using UnityEngine;

public class ObjectHighlightExample : MonoBehaviour
{
    public ParticleSystem highlightParticles; // 高亮粒子效果

    private Transform lastHighlightedObject = null; // 上一个高亮的物体

    void Update()
    {
        Ray ray = new Ray(transform.position, transform.forward);
        RaycastHit hitInfo;

        if (Physics.Raycast(ray, out hitInfo))
        {
            // 高亮物体
            if (hitInfo.collider.CompareTag("Highlightable"))
            {
                if (lastHighlightedObject != hitInfo.collider.transform)
                {
                    if (lastHighlightedObject != null)
                    {
                        highlightParticles.Stop();
                    }

                    lastHighlightedObject = hitInfo.collider.transform;
                    highlightParticles.transform.position = lastHighlightedObject.position;
                    highlightParticles.Play();
                }
            }
            else if (lastHighlightedObject != null)
            {
                highlightParticles.Stop();
                lastHighlightedObject = null;
            }
        }
    }
}

在这个示例中,我们使用高亮粒子效果来显示玩家当前所指的物体。粒子效果在物体上播放和停止,从而实现高亮效果。

这些场景示例演示了如何使用 RaycastHit 类来实现不同的功能,从检测碰撞到拾取物体以及物体高亮效果。粒子效果的添加使得交互和操作更加生动和有趣。根据您的需求,您可以在代码中添加其他功能和效果,以创造更丰富的游戏体验。文章来源地址https://www.toymoban.com/news/detail-744624.html

到了这里,关于Unity 之 RaycastHit(存储射线投射操作)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【游戏开发实战】Unity实现类似GitHub地球射线的效果(LineRenderer | 贝塞尔曲线)

    一、前言 嗨,大家伙,我是新发。 好久不见,这是2022年第一篇博客,今天有同学私信我,问我在 Unity 中如何实现这种地球辐射线的效果, 这一看,我就想到了 GitHub 主页的地球射线, 那么,今天就来讲讲如何实现这个效果吧~ 本文最终效果如下: 本文工程源码见文章末尾

    2024年02月06日
    浏览(96)
  • Unity使用反射机制和PlayerPrefs来存储游戏数据

    Unity中有一个PlayerPrefs用来给游戏存储数据。这个类有三个存储三种特定类型的方法:SetInt用来存储int类型的数据,SetFloat用来存储float类型的数据,SetString用来存储string类型的数据,虽然只能存储三种类型的数据,但是对于一般的游戏而言这三种类型完全够用了。本文封装了

    2024年02月04日
    浏览(46)
  • unity 2D射线的使用方法

    Ray2D ray;     void Update()     {         ray = new Ray2D(transform.position, Vector2.right);         RaycastHit2D info = Physics2D.Raycast(ray.origin, ray.direction,10);         //Debug.DrawRay(ray.origin,ray.direction,Color.blue);         if (info.collider != null)         {             if (info.transform.gameO

    2024年02月15日
    浏览(47)
  • Unity中使用VR手柄射线触发UI事件

    2024年02月11日
    浏览(46)
  • Unity UGUI的PhysicsRaycaster (物理射线检测)组件的介绍及使用

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

    2024年02月15日
    浏览(47)
  • Unity所以说是玩具, UGUI的PhysicsRaycaster (物理射线检测)组件的介绍及使用

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

    2024年02月22日
    浏览(43)
  • unity转微信小游戏数据存储

    unity程序转成微信小游戏以后 File.WriteAllText 和 File.ReadAllText由于路径问题不生效。 这个时候需要采用微信自己的存储路径来把用户信息保存下来。 private void LoadPlayerData() { #if UNITY_EDITOR || UNITY_ANDROID || UNITY_IOS if (File.Exists(filePath)) { playerDataString = File.ReadAllText(filePath); m_PlayerData

    2024年02月10日
    浏览(47)
  • Unity使用SteamVR2.0实现基本功能(瞬移,抓取物品,射线点击,UI交互等)

     把SteamVR的Player预制件拖到一个空场景,删掉场景内原本的相机 新建一个Plane,当做地板 找到SteamVR的人物瞬移控制器  Teleporting ,把它拖到场景里  我们需要在可以移动的区域,也就是碰撞器上,挂 TeleportArea 脚本 这个脚本会自动修改你的材质球 locked 该区域是否可以移动 markerAc

    2024年02月02日
    浏览(59)
  • Unity UGUI的Physi会随机改变csRaycaster (物理射线检测)组件的介绍及使用

    这里只介绍liteflow的简单基础使用以及作者对liteflow进行可视化扩展的相关阐述 背景:对于拥有复杂业务逻辑的系统承载着核心业务逻辑,这些核心业务逻辑涉及内部逻辑运算,缓存操作,持久化操作,外部资源调取,内部其他系统RPC调用等等。项目几经易手,维护的成本就

    2024年02月20日
    浏览(69)
  • 【图文详解】Unity存储游戏数据的几种方法

    在Unity中,常用的数据存储方法包括PlayerPrefs、ScriptableObject、JSON、XML和数据库等。 PlayerPrefs是Unity自带的一种简单的键值存储系统,适合存储一些简单的游戏数据。ScriptableObject是一种Unity类,可用于创建可序列化的对象并存储数据。JSON和XML是轻量级的数据交换格式,可以通过

    2023年04月08日
    浏览(51)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包