Unity物理系统常用知识总结

2023-11-03

碰撞器 XX Collider

在这里插入图片描述
碰撞器组件,有多种类型,图上的这个是盒状碰撞器,绿色边缘,表示这个物体可以接受碰撞。
常用API
1.MonoBehaviour.OnCollisionEnter(Collision collision) 当进入碰撞器
2.MonoBehaviour.OnCollisionExit(Collision collision) 当退出碰撞器
3.MonoBehaviour.OnCollisionStay(Collision collision) 当逗留碰撞器

触发器

在这里插入图片描述
当Collider组建中的 Is Trigger为True时,此时就代表这个物体为触发器。
触发信息检测:
1.MonoBehaviour.OnTriggerEnter(Collider collider)当进入触发器
2.MonoBehaviour.OnTriggerExit(Collider collider)当退出触发器
3.MonoBehaviour.OnTriggerStay(Collider collider)当逗留触发器
碰撞器与触发器最大的区别就是,当该物体有刚体时,碰撞器与物体碰撞,碰撞器与碰撞的那个物体都会受到力的作用,但是触发器不会,只是触发。例如我在华为项目中的弹幕功能,当弹幕从右向左飘,飘过制定的触发器时,就代表该行可以继续发送弹幕。

刚体 Rigidbody组件

在这里插入图片描述
刚体可以理解为“力”的组件,只有当物体拥有刚体组件的时候,才能受到力的作用。否则只能作为碰撞器或者触发器。
目前我用到过的API
rigidbody.AddForceAtPosition();
rigidbody.AddForce();
rigidbody.AddForceAtPosition()

Constant Force

如果想给物体施加一个恒定的力,可以添加Contant Force组件
在这里插入图片描述

射线

射线常用的情况:

第一种情况:
屏幕发射射线
        if (Input.GetMouseButton(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit, 100f))
            {
                cube = hit.collider.gameObject;
                Destroy(cube);
            }
        }

第二种
        从一个点向另一个点发射射线
        transform.Rotate(new Vector3(0, 1, 0));
        RaycastHit hit;
        if (Physics.Raycast(transform.position, transform.forward, out hit, 100f))
        {
            Destroy(hit.collider.gameObject);
        }

第三种
        从一个点向另一个点发射射线,并且筛选层级 ~是除了当前选中的所有层,相当于非,| 符号相当于或
        transform.Rotate(new Vector3(0, 1, 0));
        RaycastHit hit;
        if (Physics.Raycast(transform.position, transform.forward, out hit, 100f, 1 << 8))
        {
            Destroy(hit.collider.gameObject);
        }

第四种
        //针对物体速度过快,导致无法检测碰撞时,可以使用射线,每一帧都进行检测
        float speed = 1000f;
        float length = 10f;
        RaycastHit hit;
        Vector3 oldPosition = transform.position;
        transform.Translate(transform.forward * speed * Time.deltaTime);
        //行进的方向
        Vector3 dir = transform.position - oldPosition;
        //行进的距离
        float dis = dir.magnitude;
        if (Physics.Raycast(oldPosition,transform.forward,out hit,dis))
        {
            if (hit.collider.gameObject.name == "Cube")
            {
                Debug.Log("击中物体,坐标为" + hit.point);
            }
        }
        ps:枪战游戏如果是通过屏幕射击,希望留下的弹痕贴近表面,
        可以使用 transform.LookAt(hit.point - hit.normal);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity物理系统常用知识总结 的相关文章

  • 如何在 Vim 中保存并退出

    VIM 是 Vi 改进版的缩写形式 它是一个免费的开源文本编辑器 可以安装在任何操作系统上 无论是 Windows 还是 Linux 操作系统 它可以在 CMD 命令行 模式以及 GUI 图形用户界面 模式下使用 它使用起来非常灵活和可靠
  • 如何在 Windows 上安装 Maven

    Apache Maven 是适用于任何软件项目的优秀构建工具 它可以帮助您管理项目代码及其构建过程 以便您的软件项目保持井井有条并保持其重点 Windows 并不是最受开发人员欢迎的操作系统 但企业和最终用户仍然广泛使用它 幸运的是 有多种

随机推荐

  • 如何在 Ubuntu 18.04 和 16.04 上使用 Nginx 安装多个 PHP 版本

    通常 网络托管管理器为每个 PHP 版本应用程序部署使用单独的服务器 这增加了托管成本 或者 您可以运行多个Docker多个 PHP 版本的容器 本教程帮助您在具有不同 PHP 版本的 Nginx Web 服务器上安装和配置两个 Virtu
  • 如何在 Python 中获取和更改当前工作目录

    在 Python 中处理目录中的文件时 使用绝对路径始终是一个好主意 但是 如果您使用相对路径 则需要了解当前工作目录的概念以及如何查找或更改当前工作目录 绝对路径指定从根目录开始的文件或目录位置 而相对路径从当前工作目录开始 当您运行 P
  • Grep 中的正则表达式 (Regex)

    grep是 Linux 中用于文本处理的最有用和最强大的命令之一 grep在一个或多个输入文件中搜索与正则表达式匹配的行 并将每个匹配行写入标准输出 在本文中 我们将探讨如何在 GNU 版本中使用正则表达式的基础知识grep 在大多数 Li
  • 如何在 Ubuntu 18.04 上安装和使用 Curl

    您正在学习使用以下命令下载文件的教程curl公用事业 您运行该命令并收到以下错误消息curl command not found 没有什么可担心的 这只是意味着curl您的 Ubuntu 计算机上未安装软件包 Curl 是一个命令行工具 允
  • 如何在 CentOS 上创建 sudo 用户

    The sudo命令旨在允许用户以另一个用户 默认为 root 用户 的安全权限运行程序 在本指南中 我们将向您展示如何在 CentOS 上创建具有 sudo 权限的新用户 您可以使用 sudo 用户在 CentOS 计算机上执行管理任务
  • 如何在 Linux 中挂载 NFS 共享

    网络文件系统 NFS 是一种分布式文件系统协议 允许您通过网络共享远程目录 使用 NFS 您可以在系统上安装远程目录并像使用本地文件一样使用远程文件 在 Linux 和 UNIX 操作系统上 您可以使用mount命令将共享 NFS 目录挂载
  • 如何使用 Rsync 排除文件和目录

    Rsync 是一种快速且多功能的命令行实用程序 可通过远程 shell 在两个位置之间同步文件和文件夹 使用 Rsync 您可以镜像数据 创建增量备份以及在系统之间复制文件 复制数据时 您可能需要根据名称或位置排除一个或多个文件或目录 在本
  • 如何在 CentOS 8 上安装 Slack

    Slack是世界上最受欢迎的协作平台之一 它将您的所有通信汇集在一起 Slack 中的对话按频道组织 您可以为您的团队 项目 主题或任何其他目的创建频道 您可以搜索频道或消息中发布的所有内容 Slack 还允许您通过音频或视频通话与队友交谈
  • 如何在 Debian 10 上安装 R

    R 是一种开源编程语言和免费环境 专门从事统计计算和图形表示 它由 R 统计计算基金会支持 主要供统计学家和数据挖掘人员用于开发统计软件和执行数据分析 本文提供有关如何在 Debian 10 上安装 R 的信息 先决条件 在继续本教程之前
  • 如何在 Ubuntu 20.04 上安装 MariaDB

    MariaDB 是一个开源关系数据库管理系统 它最初被设计为向后兼容的 二进制的 MySQL 直接替代品 MariaDB由MySQL的原始开发人员和开源社区开发和维护 本指南介绍了如何在 Ubuntu 20 04 上安装 MariaDB 先
  • 如何在 CentOS 8 上配置和管理防火墙

    防火墙是一种监视和过滤传入和传出网络流量的方法 它的工作原理是定义一组安全规则来确定是允许还是阻止特定流量 正确配置的防火墙是整个系统安全最重要的方面之一 CentOS 8 附带一个名为防火墙 它是一个带有 D Bus 接口的完整解决方案
  • 如何在 Debian 10 Linux 上安装 Jenkins

    Jenkins是一个开源自动化服务器 提供了一种设置持续集成和持续交付 CI CD 管道的简单方法 持续集成 CI 是一种 DevOps 实践 团队成员定期将代码更改提交到版本控制存储库 然后运行自动化构建和测试 持续交付 CD 是自动构建
  • 如何连接到 Docker 容器

    当您想查看容器内发生的情况时 连接到正在运行的 Docker 容器会很有帮助 如果 Docker 容器未按预期工作 您可以附加到容器或为容器获取 shell 并运行以下命令 ps or top 还可以进入容器 安装新的包 构建一个新的 Do
  • 【机器学习】支持向量机(2)——线性可分支持向量机(硬间隔最大化法,对偶算法)

    前言 此文中我们介绍了支持向量机用到的一些概念以及求解方法 接下来我们将分别介绍线性可分支持向量机 线性支持向量机以及非线性支持向量机 首先 我们考虑一个二类分类问题 假设输入空间与特征空间为两个不同的空间 输入空间为欧氏空间或离散集合 特
  • arduino实战 2——利用arduino做一个人体传感器

    arduino是较为简单的单片机 易上手 所以利用arduino开始探索之旅吧 目录 一 材料清单 一 模块介绍 1 HC SR501 2 HC SR04 二 实物展示 1 工作流程 2 连线 二 代码 1 代码展示 2 代码的理解 三 写
  • mybatisplus 修改某个字段为空值

    文章目录 前言 一 重现bug 二 解决方法 总结 前言 需求 移除企业 将ent id设置为null 一 重现bug 1 使用updateById 更新单独个字段为空值 结果报错 Override public void update S
  • Android:换肤框架Android-Skin-Support

    gihub地址 https github com ximsfei Android skin support 样例 默认 更换后 一 引入依赖 换肤依赖 implementation skin support skin support 4 0
  • 哈希表以及哈希冲突

    目录 哈希表 哈希冲突 1 冲突发生 2 比较常见的哈希函数 3 负载因子调节 重点 散列表的载荷因子概念 负载因子和冲突率的关系 冲突 解决 闭散列 线性探测 二次探测 冲突 解决 开散列 结尾 我们在前面讲解了TerrMap Set 的
  • linux查看进程号、端口号

    进程ID是由操作系统内核进行分配和管理的 而端口号是由通讯协议内核分配并进行管理的 Linux查看进程号 端口号 Linux 查看端口占用情况 linux命令 ps grep kill 1 已知程序名称查看进程号 ps ef grep 程序
  • Unity物理系统常用知识总结

    Unity物理系统常用知识总结 碰撞器 XX Collider 触发器 刚体 Rigidbody组件 Constant Force 射线 碰撞器 XX Collider 碰撞器组件 有多种类型 图上的这个是盒状碰撞器 绿色边缘 表示这个物体