【Unity入门】24.碰撞检测

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

【Unity入门】碰撞检测

    大家好,我是Lampard~~

    欢迎来到Unity入门系列博客,所学知识来自B站阿发老师~感谢 

【Unity入门】24.碰撞检测

 

(一)碰撞体

(1)Collider组件

    上节课我们有学习到,unity的物理系统提供了更方便的碰撞检测机制,就是提供各种的Collider组件去检测碰撞需求

Unity 中有以下几种 Collider 组件:

1. Box Collider(盒子碰撞器):一个基于矩形的碰撞体,用于模拟长方体或立方体物体的碰撞。

2. Sphere Collider(球形碰撞器):一个基于球形的碰撞体,用于模拟球体物体的碰撞。

3. Capsule Collider(胶囊碰撞器):一个基于胶囊形状的碰撞体,用于模拟某些具有胶囊形状的物体的碰撞,比如人物角色。

4. Mesh Collider(网格碰撞器):一个基于游戏对象模型的碰撞体,用于模拟复杂的几何形状的物体的碰撞,比如地形、建筑等。

5. Terrain Collider(地形碰撞器):一个基于 Unity 地形的碰撞体,用于模拟地形的碰撞。

6. Wheel Collider(车轮碰撞器):一个专门针对车辆的碰撞体,用于模拟车辆的轮子与地面的碰撞。

7. Character Controller(角色控制器):一个专门为人物角色设计的碰撞体,用于模拟人物角色的移动和碰撞。

    我们就给篮球加上了球形的 Sphere Collider给草地加上了盒子立方体形的Box Collider,因此篮球和草地之间就可以检测到碰撞

【Unity入门】24.碰撞检测

(2)编辑碰撞体

    此时若我突发奇想,如果我想给篮球加一个矩形的碰撞体,不用球形的行不行呢?

【Unity入门】24.碰撞检测

    试试看就知道了, 我们发现,选用矩形的碰撞体组件同样会生成一个包裹住篮球的碰撞体结构(绿框),只不过它的样子是矩形罢了

【Unity入门】24.碰撞检测

    运行起来也是没有问题的,所以用哪一个碰撞体组件真的就没那么严格限制:

【Unity入门】24.碰撞检测

    在创建的时候,unity的物理引擎会自动计算出物体的大小,从而生成合适的碰撞体组件。那比如我们需要篮球在空中还有一定距离时就停下(监听到碰撞),如何调整这个组件大小呢? 

    很简单,选中collider组件,里面有一个Edit Collider选项点击之后我们就可以在场景编译器中调整碰撞体组件的大小了

【Unity入门】24.碰撞检测

    比如把组件调的那么大,就可以在绿框和草地接触的那一刻停下 

【Unity入门】24.碰撞检测

 

(二)碰撞体检测

(1)Kinematic运动学刚体

    刚体我们知道是物理学中研究的一个物体对象概念,那运动学刚体是什么呢

运动学刚体不受物理引擎的计算和影响,而是由开发者手动控制它的运动。运动学刚体可以设置为运动、旋转或缩放,但不会受到重力、碰撞等物理效果的影响。运动学刚体通常用于模拟精确的动画或特效效果,或者用于实现一些特定的游戏机制

    选中Rigidbody组件,里面有一个可以选择Is Kinematic的参数,选中就可以让它成为一个运动学刚体

【Unity入门】24.碰撞检测

(2)isTrigger触发器

    第二步需要设置碰撞体为触发器

isTrigger 是 Collider(碰撞体)组件中的一个属性,用于指定碰撞体是否为触发器。

当一个碰撞体的 isTrigger 属性被设置为 true 时,该碰撞体就不会影响游戏对象的物理运动,也不会产生碰撞效果,而只是用于检测游戏对象是否进入了该碰撞体的范围内。当游戏对象进入触发器时,就会触发 OnTriggerXXX 系列函数(比如 OnTriggerEnter、OnTriggerStay、OnTriggerExit)

    只需要选中Collider组件,勾线IsTrigger参数就可以了

【Unity入门】24.碰撞检测

    做完这两部后,我们就可以通过OnTriggerXXX 系列函数在脚本中检测碰撞的发生

    我们可以给篮球加一个脚本试试看效果:

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

public class BasketballLogic : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        float DisPreSec = 6f;
        this.transform.Translate(0, -DisPreSec * Time.deltaTime, 0);
    }

    void OnTriggerEnter()
    {
        Debug.Log("发生了碰撞");
    }
}

    看看输出,在碰撞的一霎那确实就打印出来了:

【Unity入门】24.碰撞检测

 

好啦今天就到这里,谢谢各位感谢阅读!!!
点赞,关注!!!

【Unity入门】24.碰撞检测文章来源地址https://www.toymoban.com/news/detail-460517.html

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

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

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

相关文章

  • Unity碰撞器检测失败

    1.1tag错误 看看是不是误删tag或者tag改变导致碰撞器无法检测 2.1无法触发碰撞检测方法 2.1.1 OnCollisionEnter、OnTriggerEnter、OnTriggerStay方法 OnCollisionEnter:检测与被检测方都应有Collider或者Rigibody,如果都有Rigibody,需勾选isKinematic。 OnTriggerEnter:检测与被检测方至少有一个Rigibody(

    2024年02月20日
    浏览(33)
  • Unity 3D之碰撞检测

    一、碰撞器 碰撞检测两大必备条件:1.其中一方具备刚体,碰撞双方碰撞器 1、刚体 2、盒子碰撞器   3、碰撞检测方法  二、触发器 触发检测两大必备条件:1.其中一方具备刚体,碰撞双方触发器 1、刚体 2、盒子触发器  3、触发检测方法

    2024年02月11日
    浏览(49)
  • Unity碰撞检测(3D和2D)

    碰撞检测可以说时学习Unity中最重要的一个部分,以为在游戏中,想要游戏进行交互,碰撞时非常重要的,而我在网上查了很多教程,但是都没有成功,后来经过我的仔细检查代码与修改,终于成功了 简单Unity跑酷游戏 简单跑酷游戏 在 zhong_dot 和 Player 两个实体都加上 碰撞体

    2024年02月10日
    浏览(42)
  • unity中的射线碰撞检测

    在Unity中,射线碰撞检测是一种常用的技术,通常用于确定射线与场景中的物体是否相交,并获取相交点的信息。 1.创建射线: 使用 Ray 类或 RaycastHit 结构体创建射线。 Ray 表示射线的起点和方向,而 RaycastHit 用于存储射线与物体相交的信息,如相交点、法线等。 2.发射射线:

    2024年03月17日
    浏览(41)
  • Unity中解决碰撞无法检测问题

    Unity版本2021.3.21 提示:这里描述项目中遇到的问题: Unity中两物体碰撞后,没有执行碰撞检测内的代码 两个物体的组件都是齐全的 代码也没有问题 最后看了一下Project Setting界面中的Physics,发现里面碰撞的层级没有勾选 将红框内的勾选上,就正常了

    2024年02月11日
    浏览(56)
  • Unity中实现碰撞检测的方式

    Unity内置了物理引擎,如Unity Physics和Unity Physics 2D,可以通过给物体添加刚体组件和碰撞体组件来实现碰撞检测。 物理引擎使用物理模拟和碰撞检测算法,可以处理物体之间的物理交互、碰撞响应和力学效果。 物理引擎适用于需要真实物理模拟和动态交互的场景,但对性能要

    2024年02月16日
    浏览(30)
  • Unity常用方法-- Collision碰撞检测

    LayerMask 描述 指定要在 Physics.Raycast 中使用的层。 代码 Physics2D.Raycast 函数结构 public static RaycastHit2D Raycast  (Vector2 origin,  Vector2 direction, float distance= Mathf.Infinity, int layerMask= DefaultRaycastLayers, float minDepth= -Mathf.Infinity, float maxDepth= Mathf.Infinity); 参数 origin 射线在 2D 空间中的

    2024年02月03日
    浏览(41)
  • unity碰撞检测的几种函数

    OnCollisionEnter(Collision collision):这个函数用于检测两个物体之间的碰撞事件,当两个物体发生碰撞时被调用。其中,参数collision包含了碰撞的详细信息,例如碰撞点、碰撞法线等等。 OnCollisionStay(Collision collision):这个函数用于检测两个物体之间的持续碰撞事件,当两个物体持

    2024年02月04日
    浏览(34)
  • Unity碰撞检测/触发器触发问题

    在制作2D平板冒险游戏的攻击模块时,遇到攻击敌人后无法产生触发器事件的问题。 在玩家游戏对象下有一攻击子对象。子对象碰撞器默认处于禁用状态,当按下攻击键时,通过代码: 来对碰撞器进行激活,敌人有刚体,且并非Static状态。两个物体均有碰撞体,但此时并未触

    2024年02月11日
    浏览(47)
  • 【Unity 2D AABB碰撞检测】铸梦之路

    视屏教程地址:https://www.taikr.com/user/192182 AABB 代表的是轴对齐碰撞盒 (Axis-aligned Bounding Box) AABB碰撞盒是指与场景基础坐标轴(2D中的是x和y轴)对齐的长方形的碰撞外形。与坐标轴对齐意味着这个长方形 没有经过旋转 并且它的边线和场景中基础坐标轴平行(例如,左右边线和

    2024年02月16日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包