Unity_网格碰撞器-MeshCollider-触发器-Trigger 网格碰撞器(MeshCollider)内部没有触发检测 只在表面有触发检测

这篇具有很好参考价值的文章主要介绍了Unity_网格碰撞器-MeshCollider-触发器-Trigger 网格碰撞器(MeshCollider)内部没有触发检测 只在表面有触发检测。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Unity的触发器功能很好,但是也有问题。我来讲讲问题以及解决方案。

先上视频给大家看看效果:

自制触发器

首先约定几个特殊名词。

基元游戏物体:Cube、Sphere之类的。

基元碰撞器:BoxCollider、SphereCollider之类的。

基元触发器:把基元碰撞体的IsTrigger选中,就是基元触发器。

高精度网格碰撞器:网格碰撞器不选中Convex,选中Convex会把网格碰撞器凹陷处闭合掉的,这就谈不上高精度。

重叠:也就是触发状态。

用基元触发器来触发一个高精度网格碰撞器:

它只会在基元触发器与高精度网格碰撞器表面有接触时,才会认为是触发状态:

meshcollider,Unity3D,unity,游戏引擎,网格碰撞器,触发器,MeshCollider

一旦在基元触发器进入到高精度网格碰撞器内部,竟然会判定二者是不触发的,这就很不好:

meshcollider,Unity3D,unity,游戏引擎,网格碰撞器,触发器,MeshCollider

为了解决这个问题,我苦思冥想,总算想出来一个一定程度上还能行的通的办法,只能说一定程度上行的通,在某些复杂环境下会失效,具体怎么失效,最后再讲。

先讲解决方案的思路,那就是用多道射线来进行内外检测,就是这么朴实无华,我就以图中的Cube和牙齿模型为示例来讲解吧。

把Cube的BoxCollider移除掉,它是无用的东西。牙齿模型的高精度网格碰撞器仍然保留。然后给Cube设置六面点(六个面的中间点)和八顶点(八个角的顶点),这些点用空物体代替就行:

meshcollider,Unity3D,unity,游戏引擎,网格碰撞器,触发器,MeshCollider

重要的地方来了: 

1.首先从遥远处(我这里设置的一百米之外)给立方体的六面点和八顶点分别射出一道射线,总计十四道外围射线。如果十四道外围射线全部在中途被同一游戏物体遮挡住,那就认为立方体在牙齿的内部,设置立方体的触发状态为真。

2.再从立方体的内部检测,六面点和八顶点,那些互相对应的点(对顶点),来回发射射线,也是总计14道射线。为什么要来回发?不能只从A点给B点发,还需要B点给A点发,因为要考虑到万一A点到B点是从网格碰撞器内部到外部,这样会检测不到网格碰撞器的。最终,这14道射线,有任何一道射线被遮挡,那就认为立方体与牙齿表面重叠,设置立方体的触发状态为真。

满足上述两种状况中的任何一种,都认为立方体与牙齿发生了触发状态。

这个博客最重要讲思路,不要局限于是不是只有立方体可以这样做。事实上其他基元游戏物体和网格碰撞器、其他复杂模型和网格碰撞器之间,都可以用这样的思路去做。

或者对于内部检测这块,你可以不用射线,而是继续用Unity本身的触发器,因为内部检测本来就是检测表面重合的,而Unity自带的触发检测是可以做到的。

代码如下:文章来源地址https://www.toymoban.com/news/detail-771629.html

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

/// <summary>
/// 立方体与网格碰撞器的重叠检测
/// </summary>
public class Cube_MeshColliderTrigger : MonoBehaviour
{

    Transform selftTransform;
    public Transform SelftTransform
    {
        get
        {
            if (selftTransform == null)
            {
                selftTransform = transform;
            }
            return selftTransform;
        }
    }

    /// <summary>
    /// 六面点
    /// </summary>
    public Transform[] sixPoints;
    /// <summary>
    /// 八顶点
    /// </summary>
    public Transform[] eightPoints;

    /// <summary>
    /// 从远至近-六面点射线检测结果
    /// </summary>

到了这里,关于Unity_网格碰撞器-MeshCollider-触发器-Trigger 网格碰撞器(MeshCollider)内部没有触发检测 只在表面有触发检测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • WPF 触发器Trigger

    Trigger:当某些条件满足时会触发一个行为。 一、触发器的类型 数据变化触发型:Trigger / DataTrigger 多条件触发型:MultiTrigger / MultiDataTrigger 事件触发型:EventTrigger 二、Trigger Trigger:Property用来指明关注目标控件的哪个属性,Value则是触发条件。 Setter:一旦触发条件被满足,这

    2024年02月11日
    浏览(26)
  • MySQL触发器Trigger加载以及目前局限

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。 GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。 作者: 亮 文章来源:GreatSQL社区原创 首先需要知道MySQL中触发器特点,以及表table相关触发器加载方式 MySQL中单个trigger仅支持单事件触发即单个触发

    2024年02月05日
    浏览(29)
  • mysql 、sql server trigger 触发器

    sql server mySQL NEW与OLD详解 MySQL 中定义了 NEW 和 OLD,用来表示触发器的所在表中,触发了触发器的那一行数据,来引用触发器中发生变化的记录内容,具体地: 在INSERT型触发器中,NEW用来表示将要(BEFORE)或已经(AFTER)插入的新数据; 在UPDATE型触发器中,OLD用来表示将要或已

    2024年02月12日
    浏览(28)
  • MySQL数据库——MySQL创建触发器(CREATE TRIGGER)

    触发器是与 MySQL 数据表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性。 在 MySQL 5.7 中,可以使用 CREATE TRIGGER 语句创建触发器。 语法格式如下: 语法说明如下。 1) 触发器名 触发器

    2024年02月10日
    浏览(30)
  • Unity之触发器

    目录 📕一、触发器概念  📕二、碰撞与触发的区别 📕三、触发器小实例  第一次玩侠盗猎车手是在小学,从那以后就开启了我的五星好市民之路。  下面是小编在小破站截的图,这是罪恶都市最开始的地方,大家一定很熟悉: 老市民们都知道走到粉红色圈里会触发剧情,

    2024年01月17日
    浏览(30)
  • unity 触发器的使用

    为了实现物体碰撞后执行代码 将图片中的IsTrigger 勾选,该对象就是拥有触发器了 触发触发器的物体需要带有刚体(Rigidbody) 例如:飞机碰到建筑物触发一段代码,则飞机需要带有Rigidbody属性,建筑物需要将IsTrigger勾选。 Rigidbody添加:在Inspector里,点击Add Component,搜索Rig

    2024年02月13日
    浏览(33)
  • Unity3D教程:触发器实现简单的场景跳转

    首先,需确保有一个想要跳转的目标场景。在本案例中,目标场景是ending。 第一步:创建一个碰撞体,放置在需要的触发场景跳转的位置。 第二步:删除多余的脚本,并且新建自己的脚本: 第三

    2024年02月12日
    浏览(37)
  • 【100个 Unity实用技能】☀️ | 关于触发器互相检测的必要前提条件配置

    老规矩,先介绍一下 Unity 的科普小知识: Unity 是 实时3D互动内容创作和运营平台 。 包括 游戏开发 、 美术 、 建筑 、 汽车设计 、 影视 在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和

    2023年04月09日
    浏览(51)
  • 脉冲触发的触发器(主从触发器)

    脉冲触发的动作特点: (1)触发器的翻转分两步动作。 第一步:当CLK以高电平为有效信号时,在CLK= 1期间主触发器接收输入端(S、R或J、K)的信号,被置成相应的状态,而从触发器不动。 第二步: CLK下降沿到来时从触发器按照主触发器的状态翻转,所以Q、Q’端状态的改变发生在

    2024年02月04日
    浏览(34)
  • 【FGPA】Verilog:JK 触发器 | D 触发器 | T 触发器 | D 触发器的实现

    0x00 JK 触发器 JK 触发器是 RS 触发器和 T 触发器的组合,有两个输入端 J 和 K,如果两个输入端都等于 1,则将当前值反转。 行为表

    2024年02月05日
    浏览(33)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包