Unity之物理系统

news2024/12/26 0:21:43

专栏的上一篇角色控制器控制角色移动跳崖,这一篇来说说Unity的物理系统。 

 本篇小编还要带大家做一个碰撞检测效果实例,先放效果图:流星撞击地面产生爆炸效果


一、Rigidbody 

我们给胶囊添加了 Rigidbody 组件它才有的重力,我们来看看 Rigidbody组件中的参数。

  • 首先质量不用多说就是代表物体的质量
  • 阻力是物体下落时遇到的空气阻力
  • 角阻力是物体旋转时受到的阻力
  • 使用重力是判断物体单纯的受不受重力影响,重力只是物理特性之一,我们来做个实验:

 创建一个球体、立方体和平面,球体和立方体都挂载  Rigidbody  组件,立方体把  使用重力  取消勾选后运行,用球体去撞立方体。

然后立方体就说:我要当太空人,球体给了我爱吃的大嘴巴子。

立方体就这样飞走了

这就是物体在不受重力影响下的场景,那受重力影响就和我们现实生活差不多在这里就不说了,我们接着往下看:


  • Is Kinematic: 物体是否受到运动学的影响,除了重力,运动学也是物理特性之一。

注:IsKinematic = false 是受到运动学影响,IsKinematic = true 是不受影响

我们来接着实验 :还是立方体和球体,我们让立方体不受运动学影响即勾上  Is Kinematic  选项

立方体说:我不想当太空人了,我要当GTA(侠盗猎车手)里的树,能把我撞倒算你厉害 。

  • 碰撞检测离散的是节省性能、非连续性的检测 ,如果有高速物体产生碰撞,那么有可能检测不到这次碰撞;持续连续动态就是连续性检测但更耗费性能。Continuous Speculative  中间状态,性能低于持续高于离散

 这是我们上个动图的截图

可以看到用离散的碰撞检测在高速下碰撞这次就没有检测到,球体都进到立方体里了。大家有没有想到CF里的卡箱子😃

  •  Constraints  冻结位置、冻结旋转 是控制 X、Y、Z轴局部的不受运动学影响和旋转,当然如果你都勾选上效果就和  Is Kinematic  一样了。

二、碰撞检测的产生与监听

1. 产生碰撞的条件

  • 碰撞的两个物体都要有碰撞组件
  • 两个物体其中的一个有刚体(Rigidbody),没有刚体就不会产生运动也就不会发生碰撞
  • 碰撞检测脚本挂在两个物体的任意一个上都可以

碰撞组件有很多,比如:Mesh Collider网格碰撞器、Box Collider 立方体碰撞器、Terrain Collider 地形碰撞器、Sphere Collider球形碰撞器

比如图中我们挂载球形碰撞器,绿色边框 就是碰撞器的边框,我们也可以调节大小位置等参数

2. 做一个碰撞检测实例

我们先在资源商店导入免费资源:小编今天刚下的,资源还在

我们选择绿色的流星(Magic fire0)和爆炸物 (Explosion)

 

场景描述:流星落到地面上发生碰撞,检测到碰撞后流星销毁产生爆炸物,爆炸完后爆炸物销毁。

 给  流星 Magic fire0 挂载 Sphere Collider球形碰撞器Rigidbody刚体,这是碰撞检测产生的条件之一。

编写FireTest脚本,挂载到流星上用来做碰撞检测:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FireTest : MonoBehaviour
{
        //创建一个爆炸的预设体
        public GameObject Prefab;
        
        // Start is called before the first frame update
        void Start()
        {
            
        }
    
        // Update is called once per frame
        void Update()
        {
            
        }
        
        //监听发生碰撞: 只监听发生碰撞的一瞬间
        private void OnCollisionEnter(Collision collision)  //参数 collision 就是你碰撞到的物体的碰撞信息
        {
           //创建一个爆炸物体
           Instantiate(Prefab, transform.position, Quaternion.identity);   //参数: 预设体,爆炸位置是自身火焰位置,不旋转
           //销毁自身(流星): 流星撞击地面爆炸物产生流星销毁
           Destroy(gameObject);
           
           //获取碰撞到物体看一下参数collision —— 打印一下物体名称,这里打印的是地面的名称
           Debug.Log(collision.gameObject.name);
        }
        
        //持续碰撞中: 只要物体挨着就会执行该方法
        private void OnCollisionStay(Collision collisionInfo)
        {
            
        }
        
        //结束碰撞
        private void OnCollisionExit(Collision other)
        {
            
        }
}

同时把爆炸物预设体挂载到FireTest脚本,就是我们在脚本里写的  Prefab  预设体。 

这里流星撞击地面销毁后爆炸物还没有销毁,我们在编写销毁爆炸物的脚本 ExplosionTest 挂在爆炸物上 :

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ExplosionTest : MonoBehaviour
{
    float timer = 0;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        //如果时间大于一秒就销毁爆炸物
        timer += Time.deltaTime;
        if (timer > 1)
        {
            Destroy(gameObject);
        }
    }
}

运行就是我们本篇开头演示的效果了,好了摸鱼结束下班小编要回家了,拜拜┏(^0^)┛

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1386949.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Docker] Dockerfile

文章目录 什么是 Dockerfile?使用 Dockerfile 定制镜像开始构建镜像上下文路径 指令详解COPYADDCMDENTRYPOINTENVARGVOLUMEEXPOSEWORKDIRUSERHEALTHCHECKONBUILD 什么是 Dockerfile? Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了…

Java SE入门及基础(15)

Java 中的标号(标签 label) 1. 语法规则 标号名称 : 循环结构 2. 作用 标号的作用就是给代码添加一个标记,方便后面使用。通常应用在循环结构中,与break 语句配合使用 3. 应用场景 有如下菜单: 实现其中返回主菜…

【UE Niagara 网格体粒子系列】03-大小变化的光圈

目录 效果 步骤 一、创建材质 二、创建渲染目标 三、使用蓝图将材质绘制到渲染目标 四、创建Niagara系统 4.1 设置网格体类型粒子 4.2 创建网格体粒子的材质 4.3 设置粒子初始颜色 4.4 设置粒子大小变化 效果 步骤 一、创建材质 1. 我们想要一个圆环的材质&…

数据管理-首选项

文章目录 1 概述2 什么是首选项3 首选项运作机制4 常用接口介绍常用接口使用前提保存数据(put)获取数据(get)是否包含指定的key(has)数据持久化(flush)删除数据(delete&a…

LabVIEW模拟荧光显微管滑动实验

LabVIEW模拟荧光显微管滑动实验 在现代生物医学研究中,对微观生物过程的精准模拟和观察至关重要。本案例展示了如何利用LabVIEW软件和专业硬件平台,创新地模拟荧光显微管在滑动实验中的动态行为,这一过程不仅提升了实验效率,还为…

express服务连接mysql数据库

下载mysql2依赖包 npm i mysql2 创建mysql连接实例并暴露出去 const mysql require(mysql2)const mysqlMode mysql.createPool({host: 127.0.0.1, //服务端hostuser: root, //用户名称,mysql一般默认rootpassword: 123456, //密码database: sqlTest1, //数据库名字…

网络编程day2

TCP的基本通信 服务器端 #include <head.h> #define SER_PORT 8888 //服务器端口号 #define SER_IP "192.168.125.193" //服务器客户端int main(int argc, const char *argv[]) {//1、创建用于连接的套接字int sfd socket(AF_INET, …

Qt QTableWidget表格控件

文章目录 1 属性和方法1.1 行列数目和行表头和列表头1.2 单元格1.3 隔行交替背景色1.4 选择模式和选择行为1.5 设置样式表 2 实例2.1 布局2.2 代码实现 QTableWidget是Qt中的表格控件。 1 属性和方法 QTableWidget有很多属性和方法&#xff0c;完整的可查看帮助文档。 在窗口…

牛客周赛 Round 3 解题报告 | 珂学家 | 贪心思维场

前言 寒之不寒无水也&#xff0c;热之不热无火也。 整体评价 感觉比较简单&#xff0c;更加侧重于思维吧。和前几场的Round系列&#xff0c;风格不太一样。 A. 游游的7的倍数 因为连续7个数&#xff0c;比如有一个数是7的倍数 因此从个位数中着手添加&#xff0c;是最好的选…

Matter - 体验,灯泡(1)

一、前言 Matter&#xff08;当时称为 Project Connected Home over IP 或 Project CHIP&#xff09;于2019年12月11日首次宣布。当时&#xff0c;它是由苹果、谷歌、亚马逊和联发科技等公司共同发起的一个项目&#xff0c;目的是创建一个开放标准&#xff0c;提高智能家居设备…

【Linux】Git - 新手入门

文章目录 1. git 版本控制器 - 该如何理解&#xff1f;2. git / gitee / github 区别&#xff1f;3. Linux 中 git 的使用3.1 安装 git3.2 使用 github 新建远端仓库3.2.1 账号注册3.2.2 创建代码仓库3.2.3 克隆仓库到本地3.2.4 .gitignore 文件 3.3 使用 git 提交代码到 githu…

【方法】Excel表格如何“限制编辑区域”?

在制作Excel表格的时候&#xff0c;你是否遇到这些情况&#xff1f;有时候需要限定部分区域让他人协助填写&#xff0c;有时候会有很多数据或公式&#xff0c;要防止误改&#xff0c;否则会引起错误。要保护好这些区域&#xff0c;我们可以给Excel表格设置“限制编辑区域”。 …

震惊!你还搞不懂PMP中的合同类型?

PMP中的合同类型包括固定总价合同、总价加激励费用合同、总价加经济价格调整合同、成本加固定费用合同、成本加激励费用合同和成本加奖励费用合同等。 下面分别针对各类合同进行详细的说明&#xff1a; 固定总价合同&#xff08;FFP&#xff09;&#xff1a;是最常用的合同类型…

ERP和MES对接的几种接口方式

在数字化工厂的规划建设中&#xff0c;信息化系统的集成&#xff0c;既是重点&#xff0c;但同时也是难点。ERP和MES对接时&#xff0c;ERP主要负责下达生产计划&#xff0c;MES是执行生产计划&#xff0c;二套系统在数据交互时&#xff0c;需要确保基础数据的一致性&#xff0…

mysql原理--redo日志2

1.redo日志文件 1.1.redo日志刷盘时机 我们前边说 mtr 运行过程中产生的一组 redo 日志在 mtr 结束时会被复制到 log buffer 中&#xff0c;可是这些日志总在内存里呆着也不是个办法&#xff0c;在一些情况下它们会被刷新到磁盘里&#xff0c;比如&#xff1a; (1). log buffer…

B端产品经理学习-B端产品的项目管理

项目管理的作用 指导Roadmap落地 每个节点的项目时间需要按照时间点落地&#xff0c;才不会影响后面的项目事件 为了明确需求&#xff0c;明确研发的工作 避免产研部门因为需求扯皮、研发部门抱怨需求文档不够清晰、在开发过程中增加很多细节需求、增加了研发的工作量、初次…

探寻爬虫世界01:HTML页面结构

文章目录 一、引言&#xff08;一&#xff09;背景介绍&#xff1a;选择爬取51job网站数据的原因&#xff08;二&#xff09;目标与需求明确&#xff1a;爬取51job网站数据的目的与用户需求 二、网页结构探索&#xff08;一&#xff09;51job网页结构分析1、页面组成&#xff1…

紫光展锐T770安卓核心板_展锐T770 5G核心板规格参数

紫光展锐T770安卓核心板是一款高性能的5G安卓智能模块&#xff0c;拥有先进的6nm制程工艺和强大的性能。板载8GB Ram 256GBROM的内存单元&#xff0c;支持4K H.265/ H.264视频编解码&#xff0c;搭载Android 13以上操作系统&#xff0c;功能丰富。除了支持5G NSA和SA双模式向下…

分布式搜索——Elasticsearch

Elasticsearch 文章目录 Elasticsearch简介ELK技术栈Elasticsearch和Lucene 倒排索引正向索引倒排索引正向和倒排 ES概念文档和字段索引和映射Mysql与Elasticsearch 安装ES、Kibana安装单点ES创建网络拉取镜像运行 部署kibana拉取镜像部署 安装Ik插件扩展词词典停用词词典 索引…

勾股数 - 华为OD统一考试

OD统一考试 题解&#xff1a; Java / Python / C 题目描述 如果三个正整数A、B、C &#xff0c;A B C 则为勾股数&#xff0c; 如果ABC之间两两互质&#xff0c;即A与B&#xff0c;A与C&#xff0c;B与C均互质没有公约数&#xff0c;则称其为勾股数元组。 请求出给定 n ~ …