Unity之物理系统

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

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

Unity之物理系统,摸鱼学Unity,unity,游戏引擎

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

Unity之物理系统,摸鱼学Unity,unity,游戏引擎


一、Rigidbody 

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

Unity之物理系统,摸鱼学Unity,unity,游戏引擎

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

Unity之物理系统,摸鱼学Unity,unity,游戏引擎

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

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

Unity之物理系统,摸鱼学Unity,unity,游戏引擎立方体就这样飞走了

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


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

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

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

Unity之物理系统,摸鱼学Unity,unity,游戏引擎

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

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

Unity之物理系统,摸鱼学Unity,unity,游戏引擎

Unity之物理系统,摸鱼学Unity,unity,游戏引擎 这是我们上个动图的截图

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

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

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

1. 产生碰撞的条件

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

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

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

Unity之物理系统,摸鱼学Unity,unity,游戏引擎

2. 做一个碰撞检测实例

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

Unity之物理系统,摸鱼学Unity,unity,游戏引擎

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

 Unity之物理系统,摸鱼学Unity,unity,游戏引擎

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

 给  流星 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^)┛文章来源地址https://www.toymoban.com/news/detail-802597.html

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

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

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

相关文章

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

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

    2024年01月18日
    浏览(51)
  • Unity3D学习笔记——物理引擎

    1简介 刚体可以为游戏对象赋予物理特性,是游戏对象在物理系统的控制下接受推力和扭力,从而实现现实世界的物理学现象。 2属性 1简介 碰撞器是物理组件的一类,他与刚体一起促使碰撞发生 碰撞体是简单形状,如方块、球形或者胶囊形,在 Unity 3D 中每当一个 GameObjects

    2023年04月12日
    浏览(51)
  • Unity --- 物理引擎 --- 触发器 与 碰撞器详解

    对第一个条件进行补充 --- 不仅要两者都具有碰撞组件,同时还需要两者的碰撞组件中都没有勾选 Is Trigger属性  1.上一篇文章中说了那么多,其实也可以总结为两个碰撞条件 --- a.两个游戏物体都具有碰撞器组件 ,如果没有的话,连碰撞检测都不会发生,也就没有所谓的碰不

    2024年02月07日
    浏览(46)
  • Unity DOTS物理引擎的核心分析与详解

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

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

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

    2024年04月25日
    浏览(49)
  • Unity --- 物理引擎 ---- 刚体RigidBody 与 碰撞器 collider

      1.RigidBody(刚体)的作用是让物体具有物理特性(比如说重力,摩檫力等等) 2.如果想让物体能够与其它物体发生碰撞的话,我们还需要一个组件 --- Colider碰撞器组件 1.上图就是Unity中提供的已经准备好的各种形状的碰撞器组件 2.形成不同形状的碰撞器所需的面数不同,面数

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

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

    2024年03月18日
    浏览(57)
  • Unity3D 实现基于物理引擎的绳子关节解析详解

    在游戏开发中,有时候我们需要实现绳子关节效果,比如在射击游戏中射击绳子,或者在平衡游戏中使用绳子作为支撑。本文将详细介绍如何使用Unity3D的物理引擎实现绳子关节效果。 对惹,这里有一 个游戏开发交流小组 ,希望大家可以点击进来一起交流一下开发经验呀 首

    2024年02月21日
    浏览(90)
  • 游戏思考17:寻路引擎recast和detour学习三:客户端角度学习(unity专题导航系统,阶段三完结)

    1)导航系统作用 帮助角色进行AI智能移动:朝目标移动,绕过障碍物,上下台阶… 2)导航系统包括 ①导航网格(NavMesh):下图的蓝色地形,可以行走的表面 ②导航网格代理组件(NavMesh Agent):模拟人物移动和寻路 ③导航网格障碍物(NavMesh Obstacle):定义物体为障碍物,这样导航网

    2023年04月12日
    浏览(61)
  • 十八、Unity游戏引擎入门

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

    2024年02月16日
    浏览(79)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包