unity3d 刚体不碰撞_unity 3d 刚体碰撞检测代码 - CSDN
  • 孙广东 2015.8.15目的: 这篇文章的主要目的是为了让您了解有关于在Unity内如何使用没有刚体碰撞检测。在这里,检查的只是垂直运动方向,但可以通过修改脚本,将对象添加到场景检查其他方向 (或更改cube 的位置。...

    孙广东  2015.8.15


    目的: 这篇文章的主要目的是为了让您了解有关于在Unity内如何使用没有刚体的碰撞检测。
    在这里,检查的只是垂直运动方向,但可以通过修改脚本,将对象添加到场景检查其他方向 (或更改cube 的位置。


    unity就是 3D 的游戏引擎,带有内置物理Nvidia PhysX。游戏对象应用物理模拟必须具有刚体。它常用于碰撞检测。
             假设我们只想要碰撞检测模拟物理学,然后只对碰撞检测使用物理引擎可能会降低整体性能。
    有两个解决办法:
    解决办法-1: 使刚体运动学和捕获触发器事件。
    解决方案-2: 不使用的刚体 (可能是最好的解决办法)!!!   使用 Raycast 是一个很好的选择。
             你可以投数以百计的每帧的光线而多降低性能。这是(提供)一种casting来源射线的方向,然后确定光线如果投射与任何碰撞器的方法。我们可以使用这个处理碰撞检测,通过casting射线在 x 和 y 轴,以得到确认的游戏物体的周围环境。
    我们将按照下面给出的步骤:
               1、获得游戏对象的方向。
                2、投射光线。
               3、从命中结果确定碰撞体。
    简单的 raycast 代码看起来像这样:
    if (Physics.Raycast(transform.position, Vector3.forward, 10))
    print("There is something in front of the object!");


    在这里,第一个参数是射线的原点,第二个参数是射线的方向和第三个参数是射线的长度。Unity允许获取结果,
    RaycastHit hitInfo;
    if (Physics.Raycast(transform.position, Vector3.down, out hitInfo))
    print(“There is something ” + hitInfo.distance +”m away from gameobject”);


    例如,让我们使Cube,当它与另一个Cube相撞的可以回去。

    1.  3个Cube,如下图所示。




    添加 Box Collider。将 CollisionDetector 脚本添加到中间的Cube,放置在其他两个Cube (在上面的图像中选取) 之间的。在 CollisionDetector 脚本中,使之Cube与上方或下方的碰撞 就相反。
    CollisionDetector.cs
    using UnityEngine;
    using System.Collections;
    public class CollisionDetector : MonoBehaviour
    {
    public float MovingForce;
    Vector3 StartPoint;
    Vector3 Origin;
    public int NoOfRays = 10;
    int i;
    RaycastHit HitInfo;
    float LengthOfRay, DistanceBetweenRays, DirectionFactor;
    float margin = 0.015f;
    Ray ray;
    void Start ()
    {
    //Length of the Ray is distance from center to edge
    LengthOfRay = collider.bounds.extents.y;
    //Initialize DirectionFactor for upward direction
    DirectionFactor = Mathf.Sign (Vector3.up.y);
    }
     
    void Update ()
    {
    // First ray origin point for this frame
    StartPoint = new Vector3 (collider.bounds.min.x + margin,transform.position.y,transform.position.z);
    if (!IsCollidingVertically ()) {
    transform.Translate (Vector3.up * MovingForce * Time.deltaTime * DirectionFactor);
    }
    }
     
    bool IsCollidingVertically ()
    {
    Origin = StartPoint;
    DistanceBetweenRays = (collider.bounds.size.x - 2 * margin) / (NOofRays - 1);
    for (i = 0; i<NOofRays; i++) {
    // Ray to be casted.
    ray = new Ray (Origin, Vector3.up * DirectionFactor);
    //Draw ray on screen to see visually. Remember visual length is not actual length.
    Debug.DrawRay (Origin, Vector3.up * DirectionFactor, Color.yellow);
    if (Physics.Raycast (ray, out HitInfo, LengthOfRay)) {
    print ("Collided With " + HitInfo.collider.gameObject.name);
    // Negate the Directionfactor to reverse the moving direction of colliding cube(here cube2)
    DirectionFactor = -DirectionFactor;
    return true;
    }
    Origin += new Vector3 (DistanceBetweenRays, 0, 0);
    }
    return false;
     
    }
    }

    解释
    在这里 NoOfRays 和Moving force 是公共变量,所以它可以在运行时根据需要改变了。请确保移动速度不超过该Cube在顶部和底部之间的距离。




    DirectionFactor 成倍增加的运动力和射线的方向,因为它用来决定的方向。最初,它设置为向上 (正 y 轴) 方向。尽快移动相撞其他Cube的Cube被扭转这个方向决胜局。通过改变方向矢量,可以根据要求改变方向。DirectionFactor 仅用于反转方向。












    展开全文
  • unity3d刚体 了解Unity 3D刚体 (Understanding Unity 3D Rigidbodies) A rigidbody is a property, which, when added to any object, allows it to interact with a lot of fundamental physics behaviour, like ...

    unity3d刚体

    A rigidbody is a property, which, when added to any object, allows it to interact with a lot of fundamental physics behaviour, like forces and acceleration. You use rigidbodies on anything that you want to have mass in your game.

    刚体是一种属性,将其添加到任何对象后,便可以使其与许多基本物理行为(例如力和加速度)相互作用。 您要在游戏中要增加质量的任何物体上使用刚体。

    In other words, adding a Rigidbody to a gameObject is the way of telling Unity,

    换句话说,向游戏对象添加刚体是告诉Unity的方法,

    Okay, see this object here? I want it to behave like it has some mass and weight, and that it should react to forces and collisions in a realistic manner.
    好吧,在这里看到这个物体吗? 我希望它的行为像它具有一定的质量和重量一样,并且它应该以逼真的方式对力和碰撞做出React。

    When we work with 2D game design, we use Rigidbody2D, not Rigidbody. They're different in the sense that Rigidbody2D interacts only in the XY axis and overall, works in 2 dimensions. The Rigidbody 2D component overrides the Transform and updates it to a position/rotation defined by the Rigidbody 2D. This helps in adding velocities and accelerations to the object when needed.

    在进行 2D游戏设计时,我们使用Rigidbody2D而不是Rigidbody 。 它们的区别在于Rigidbody2D仅在XY轴上相互作用,并且总体而言在2维上起作用。 刚体2D组件将覆盖变换并将其更新为刚体2D定义的位置/旋转。 这有助于在需要时为对象增加速度和加速度。

    To further understand Rigidbodies, here's an example. Consider you have a normal cardboard box, shaped like a cube. Consider that the box itself doesn't have a defined weight for now, it's just a box that exists. If you wanted to move around the box, you could do it in a variety of different ways. Imagine that you want the cardboard box to behave like it's an actual, real world object with some mass. Let's say we filled it with sand. Then, we have a cardboard box that has actual mass, and feels heavy. If you pull or push it, you can expect to have to apply some effort before it moves. Rigidbodies act like the sand in this example. They add a sense of mass to the gameObject (that is, your cardboard box) so that it can interact with forces and other physics fundamentals like gravity and friction.

    为了进一步了解刚体,这里有一个例子。 考虑您有一个普通的纸板箱,形状像一个立方体。 考虑一下盒子本身目前没有确定的重量,它只是一个存在的盒子。 如果您想在包装盒中四处移动,则可以采用多种不同的方式进行操作。 想象一下,您希望纸板箱的行为就像是一个具有一定质量的真实物体。 假设我们用沙子填充了它。 然后,我们得到一个具有实际质量并感觉很重的纸板箱。 如果您拉动或推动它,则可能需要在移动之前付出一些努力。 在此示例中,刚体的作用就像沙子 。 它们为游戏对象(即您的纸板箱)增加了质感,使其可以与力和其他物理原理(例如重力和摩擦)相互作用。

    Enough about describing what a Rigidbody is, let's dig into the game. In the inspector for the gameObject, like Mr. Star, click on Add Component on the bottom. If you didn't modify the gameObject, the button should be just below the Sprite Renderer component.

    足够描述刚体是什么了,让我们深入研究一下游戏。 在GameObject检查器中,例如Star先生,单击底部的“ 添加组件 ”。 如果您未修改gameObject,则该按钮应位于Sprite Renderer组件下方。

    Understanding Rigidbodies

    From there, go to Physics 2D → RigidBody2D. This will add a Rigidbody2D component to your gameObject.

    从那里转到Physics 2D→RigidBody2D 。 这会将Rigidbody2D组件添加到您的gameObject中。

    Understanding Rigidbodies

    And a new row of RigidBody 2D features is added in the interaction view, just below the Sprite Renderer.

    然后,在Sprite Renderer下方的交互视图中添加了新的RigidBody 2D功能行。

    Understanding Rigidbodies

    Let's run our game and see what happens. "Uh...What?" is probably what comes out of your mouth at this point. You'll notice that your gameObject drops like a rock! That's not really fun, is it?

    让我们运行我们的游戏,看看会发生什么。 “呃...什么?” 此时可能是从您的嘴里出来的。 您会注意到您的gameObject像石头一样掉落! 那不是很有趣吗?

    To fix that, simply set the Gravity Scale value of the Rigidbody's properties to 0.

    要解决此问题,只需将刚体属性的“ 重力比例”值设置为0

    Understanding Rigidbodies

    Although there's nothing really different, is there? You had a sprite in the game before, and adding a Rigidbody and setting its gravity to zero seems to have brought us back to the exact same point.

    尽管没有什么真正的不同,是吗? 您以前在游戏中有一个精灵,添加刚体并将其重力设为零似乎使我们回到了完全相同的点。

    Well, not really. You see, by changing the gravity scale of that Rigidbody, you're basically defining how much the object is affected by gravity. In fact, try changing around the mass and gravity scale to different values and see what happens. The object still has a mass, it just doesn't care for the forces of gravity acting on it, and thus remains where it is.

    好吧,不是真的。 您会看到,通过更改该刚体的重力比例,基本上可以定义物体受重力影响的程度。 实际上,尝试将质量和重力比例更改为不同的值,然后看看会发生什么。 物体仍然具有质量,它只是不在乎重力作用在其上,因此保持在原处。

    Feel free to explore more options of Rigidbody by changing values of other attributes ans seeing its affects on the gameObiect.

    可以通过更改其他属性的值来随意探索Rigidbody的更多选项,并查看其对gameObiect的影响。

    翻译自: https://www.studytonight.com/game-development-in-2D/rigid-bodies

    unity3d刚体

    展开全文
  • unity3d刚体属性解析

    2018-08-23 18:23:05
    1.1 Mass表示物体的质量,数值类型为float,默认值为1。大部分物体的质量属性接近于0.1才符合日常生活感官感受,超过10 ,则失去了仿真效果。 2.2 Drag表示平移阻力,其数值类型为float,初始值为0,用来表示物体...

    这里写图片描述
    1.1
    Mass表示物体的质量,数值类型为float,默认值为1。大部分物体的质量属性接近于0.1才符合日常生活感官感受,超过10 ,则失去了仿真效果。
    2.2
    Drag表示平移阻力,其数值类型为float,初始值为0,用来表示物体因受阻力而速度衰减的状态。
    3.3
    Angular Drag 旋转阻力,其数值类型为float,初始值为0.05,用于模拟物体因旋转而受到的各方面的影响的现象。
    4.4
    Use Gravity使用重力,表示物体是否受到重力影响,其数据类型是boolean ,初始值为true,该属性设置为false时用来模拟失重现象。
    5.5
    Is Kinematic是否遵循运动学,该属性表示对象是否遵循牛顿运动学物理定理,其数据类型是boolean ,初始值为false。如果该属性设置为true表示该物体运动状态不受外力,碰撞和关节的影响,而只受到动画以及附加在物体上的脚本影响,但是该物体仍然能改变其他物体运动状态,例如游戏中倒下的敌人始终不动 ,就是利用这个属性 。
    6.6
    Interpolate 插值,还属性表示的是该物体运动的插值模式,默认状态下是被禁用的。选择该模式时,在此模式下物理引擎会在物体的运动帧之间进行插值,使得运动更加自然。另外插值导致了物理模拟和渲染的不同步,进而产生物体轻微抖动现象,建议可以对主要角色使用插值,而其他的则禁用此功能,以达到折中的效果。
    None表示没有插值,Interpolate表示根据上一桢的位置来做平滑插值,Extrapolate表示根据预测的下一桢的位置来做平滑插值

    7.7
    Freeze Rotation冻结旋转,该属性表示的是该物体的旋转是否受到物理定理的约束。默认状态下任意轴的旋转是受物理定律控制的,该属性的值是修改在每个轴上的旋转属性来实现的。例如在第一人称射击游戏中,通过去除该属性的控制,可以使玩家完全控制视角旋转。
    8.8
    Collision Detection碰撞检测模式,默认状态时Discrete。在没有发生碰撞检测的情况下,碰撞物体会穿过对方,产生所谓 穿透现象。碰撞模式有不连续模式(Discrete),连续模式(Continuous)和动态连续模式(ContinuousDynamic),动态连续模式适用于高速运动的物体,连续模式仅仅可以用于球体,胶囊和盒子碰撞者的刚体,而且会严重影响物体的运动表现,因此大部分采用不连续模式。
    Continuous Collision Detection

    CCD用来防止快速移动的物体穿过其他对象。

    当使用默认的离散式碰撞检测时,如果前一桢时对象在墙这一面,下一桢时对象已到到了墙另一面,那么碰撞检测算法将检测不到碰撞的发生,你可以将该对象的碰撞检测属性设置为Continuous,这时碰撞检测算法将会防止对象穿过所有的静态碰撞体,设置为Continuous Dynamic将还会防止穿过其他也设置为Continuous或者Continuous Dynamic的刚体。

    展开全文
  • http://forum.unity3d.com/threads/getting-impact-force-not-just-velocity.23746/ 转载于:https://www.cnblogs.com/yaohj/p/4896802.html

    http://forum.unity3d.com/threads/getting-impact-force-not-just-velocity.23746/

    转载于:https://www.cnblogs.com/yaohj/p/4896802.html

    展开全文
  • Unity刚体碰撞器、实验和总结 碰撞盒与刚体分类
  • 上一章讲到为物体粘贴图片,如果有同学运行下会发现物体会悬在空中动,那是因为还没有添加物理规律,没有重力当然不会下落。 这里有一个名词叫做“刚体”,既Rigidbody,我们要把这个东西添加在物体上面,物体才会...
  • 对于刚接触Unity3D的新手,部分人会在物理组件的的理解中弄混刚体(rigidbody)和碰撞体(collider)这两者。网络上很多相关文章,个人认为逻辑条理清晰,但推荐给别人后仍然会有人说没有很大帮助。究其原因,应该是大...
  • 本来想说今天学习一下unity3d中的物理的,学到刚体碰撞这一章,就想说先在场景里面摆一个平面(plane)和一个球体(sphere),然后让球体落下来砸在平面上然后反弹,看各种效果,步骤如下: 一、新建一个plane对象...
  • 做一个小demo的时候遇到这个问题,查了许多资料终于搞明白了,特此记录一下: 刚体是发生碰撞发生形变的物体,当然这是一种理想状态。 先看刚体,在physics里,rigidbody,翻译还是很直白的 参数说明: Mass...
  • 打开unity进入如空的界面后,点击GameObject->3DObject->Plane/Cube/Sphere分别创建一个...Rigidbody添加刚体属性。添加完了是这样的: 两个都要添加。这样立方体从上面掉落砸到球体使其滚动的画面就有了...
  • 有时候两个刚体发生碰撞的时候,其中一个质量小的会有发生旋转的情况 如果遇到这样的情况,只需要给刚体添加一个约束就行了。 添加这个就行了。 转载于:https://www.cnblogs.com/sunxun/p/5528716.html...
  • 一:触发器和碰撞器、刚体之间的联系 1、碰撞器如果勾了is trigger 就变成了 触发器 2、触发器和刚体之间碰撞会穿透, 3、触发器和触发器之间的碰撞也是直接穿透 4、触发器和碰撞碰撞还是直接穿透   二:...
  • Unity3D 碰撞与休眠

    2019-08-21 21:00:39
    刚体碰撞分为三种:进入碰撞碰撞中和结束碰撞。 下面是关于碰撞的三个系统方法: OnCollisionEnter():刚体刚体刚开始接触时,立即调用此方法。 OnCollisionStay():刚体刚体碰撞过程中,每帧都会调用...
  • 刚体(Rigidbody)的官方(摘自Unity3d的官方指导书《Unity4.x从入门到精通》)解释如下: Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可接受外力与扭矩力用来保证游戏对象像在真实世界中那样...
  • 做了一个碰撞的小Demo,用一个球去撞击一堵墙,结果在球和墙都设置了刚体碰撞体的情况下,球穿过了墙。移动球的位置,球有时能穿过墙,有时会被墙阻挡。 对于球穿过了墙,这个问题,在网上找了一下答案,基本可以...
  • Add Component添加Box Collider 2D(碰撞体)Add Component添加Rigidbody(刚体)首先对碰撞体和刚体做一个简单的区分两句话概括碰撞体: 碰撞体才能被射线检测到,否则无法被检测 碰撞体是产生碰撞的前提两句话...
  • Unity3d非物理引擎模拟碰撞效果,做了开放修改,可以在u3d的编辑面板改属性,属性建议值在图片中
  • 刚体(Rigidbody)的官方(摘自Unity3d的官方指导书《Unity4.x从入门到精通》)解释如下: Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可接受外力与扭矩力用来保证游戏对象像在真实世界中那样...
  • Unity3D刚体碰撞体以及is Trigger属性的意义 刚体:个人理解就是具有物理属性(如:质量),接受物理作用(如:重力)的组件。 碰撞体:个人理解就是计算碰撞后的物理量(如:弹力)。 刚体碰撞...
1 2 3 4 5 ... 20
收藏数 3,218
精华内容 1,287
关键字:

unity3d 刚体不碰撞