• Unity -- 碰撞的产生与监听 / 碰撞与触发的区别


    碰撞的产生与监听

    1.collider -- 就是碰撞器,Unity中内置了许多的碰撞器组件

     每一个碰撞器组件的形状都是不一样的,而且也分为2d和3d两种类型

    只有在物体挂载了碰撞器组件的时候这个物体才能够发生碰撞

    碰撞器组件的基本模板都是差不多的,我们取其中一个模板来讲讲

     从上往下分别是:碰撞编译器,是触发器,材质,碰撞中心(这个中心是可以被我们调整坐标移动的,如果不调整的话默认为游戏物体的中心坐标),碰撞半径,(胶囊碰撞器特有的胶囊高度和胶囊指向)

     真正产生碰撞的是上面的绿色线框,我们调整的大小,半径,高度...等等参数都是对绿色线框的调整

    2.两个物体产生碰撞的条件的条件是(这两个物体都有碰撞器组件),两个物体中至少有一个具有刚体组件

    3.利用脚本监听碰撞 --- 假设物体A去碰撞物体B,我们该把脚本挂载到那个物体上来监听碰撞呢?

    答案是那个物体都可以(a撞到b的时候a可以监听到碰撞,b也可以监听到碰撞,所以挂那个都一样) ,脚本中监听碰撞的方法有下面三种

     第一种会去监听两个物体碰撞的一瞬间,如果监听到了就执行自己的括号里的方法

    第二种会去监听两个物体碰撞一瞬间之后是否发生连续碰撞(就一直挨在一起),如果监听到了就执行自己的括号里的方法

    第三种会去监听两个物体结束碰撞的一瞬间,如果监听到了就执行自己的括号里的方法

    函数里面的参数不需要我们去写,编译器会帮我们写的,这个参数承接的是当前脚本挂载的游戏物体a碰撞到的套在游戏物体b的碰撞体对象的信息对象,这个信息对象中存的是对应碰撞体对象的一系列信息

    (谁的事情谁去做,代码逻辑分清楚,不要把代码都混在一个脚本中)

     通过编译器自动传进去的碰撞体对象的信息对象我们可以调用gameObject属性的name属性获取碰撞体对象碰对应的游戏物体的物体名


    碰撞与触发的区别

    1.当两个物体发生碰撞之后引起某一个操作的发生 --- 我们把这样一个过程称为触发

    2.触发和碰撞检测不同的是,我们需要将两个发生碰撞的物体的其中一个的碰撞器组件的中的collider组件中的设为触发器选项打开

     3.假设物体a要和物体b发生碰撞,我们把b的碰撞器组件中的is trigger打开后,a去碰b的时候就会直接穿过b而不会发生碰撞!

    也就是说,碰撞器能够穿过触发器,二者之间不会发生碰撞

     当一个物体a的碰撞器组件如上打开了is trigger后,这个物体a就变成了一个触发器,没打开is trigger的物体b去碰撞a的时候会直接穿过a

    如果关闭了a的is trigger,a就会变回普通的碰撞器,又能够正常的和b碰撞了

    设置触发器的流程:

    1.创建一个游戏物体,在它的碰撞器组件中打开is trigger

    2.我们常常希望触发器不被看到,所以我们再把这个游戏物体的mesh render关闭,使其不被渲染,这样的话我们就看不到这个触发器了

    3.给触发器挂载一个监听脚本,监听触发的发生,持续和结束(这一部分和碰撞很相似)

     第一个方法在监听到触发发生的那一刻的时候会被执行

    第二个方法在监听到触发发生后依然在进行的时候执行、

    第三个方法在监听到触发结束的那一个的时候执行

     函数里的参数是一个碰撞器对象,这个参数承接的是与触发器发生碰撞的套在游戏物体上的碰撞器

  • 相关阅读:
    使用Markdown语法写矩阵
    【C/C++】程序环境,探索程序的执行过程(习得无上内功《易筋经》的第一步)
    覆盖libc.so.6的惨痛教训
    华为再次入选2022年Gartner® SIEM魔力象限
    阿里云全面降价,释放了什么信号?
    HTML5期末考核大作业,网站——旅游景点。 学生旅行 游玩 主题住宿网页
    微服务框架 SpringCloud微服务架构 16 SpringAMQP 16.3 入门案例的消息接收
    pm2 使用方法,常用命令,及设置vue等前端项目开启启动,node,eggjs 等node项目开机启动
    Miniconda 安装和使用笔记
    MyBatis
  • 原文地址:https://blog.csdn.net/qq_51947882/article/details/126516985