zoukankan      html  css  js  c++  java
  • unity物理检测的几种方式

    (由于本人大多做2d游戏,因此以下以2d为主介绍,但是具体和3d相差不大)

    在unity中有很多不同的物理检测方式,但是大致可以分为以下几种:

    1.Physics2d检测系列

      Physics2d.LineCast   //linecast与raycast相同,只是表现的方式不同,适合用于枪械的激光射线等

      Physics2D.RayCast

      Physics2D.LineCastAll   //获得两点之间的所有碰撞体,适合做视野检测

      Physics2D.RayCastAll

      Physics2D.BoxCast    //往给定的方向的方形区域中的检测,这里适合检测前方是否有墙体等

      Physics2D.OverlapArea  //覆盖范围检测

    2.RigidBody2D检测系列

      rigidbody2D.cast        //往某一个方向检测除了自身和子物体意外的所有碰撞体,获得所有碰撞点,这种方式的好处是可以检测玩家是否站在某一个碰撞体上,从而决定是否可以进行跳跃操作,具体见我的博客《unity中利用纯物理工具制作角色移动跳跃功能》

      rigidbody2D.overlapxx  //覆盖范围检测

    3.碰撞器与触发器物理事件(常用)

    在物理参数中常常遇到ContactFilter,这个参数其实是多个参数的集合体,为的是使得函数使用起来更加简洁,最典型的参数:lanyermask和是否可以检测触发器

    另外说一下,官方的手册真的很清晰,即使是英文的,总体上也比较易懂

    这里介绍一下BoxCast中的distance参数,这个distance是否可以理解为矩形往这个方向移动的一小段距离,在这个距离,或者说把这个矩形看作是一个很粗的射线的一个片元,好吧,我没有做个相关检测,这里我瞎猜一下。换种说法,这个矩形就好像一个photoshop画笔的形状,distance就是画笔画过的距离,当画笔画到终点,所覆盖的区域所检测到的碰撞体就是检测到的结果;或者类似手电筒,distance是手电筒光的长度。简单说,这是个有宽度的射线检测。但是需要注意一个常常犯的错误,因为在一帧内BoxCast如果监测到碰撞了就会立刻停止向前,所以常常会出现box的size过大导致立即碰撞到了东西而返回,造成distance参数失去效果。

  • 相关阅读:
    HDU6397
    容斥原理推导错排通项公式
    重复排列的证明
    圆排列证明
    rock-paper-scissors
    The more, The Better
    趁着情人节写点东西
    分层图最短路问题
    背包问题是否装满问题
    Python面向对象编程扑克牌发牌程序,另含大量Python代码!
  • 原文地址:https://www.cnblogs.com/xiaoahui/p/10403923.html
Copyright © 2011-2022 走看看