精华内容
下载资源
问答
  • 碰撞体分为三类(触发器同理):静态碰撞体、刚体碰撞体、Kinematic刚体碰撞体。 静态碰撞体:不挂载刚体组件的碰撞体 常用于地形、障碍物等不会移动位置的物体,物理引擎会对此优化性能。在游戏运行时,不应当...

    碰撞体分为三类(触发器同理):静态碰撞体、刚体碰撞体、Kinematic刚体碰撞体。

    静态碰撞体:不挂载刚体组件的碰撞体

    常用于地形、障碍物等不会移动位置的物体,物理引擎会对此优化性能。在游戏运行时,不应当改变静态碰撞体的enabled选项或移动、缩放碰撞体,否则会给物理引擎带来额外的计算工作量,导致性能显著下降。

    刚体碰撞体:挂载了刚体组件(非Kinematic)的碰撞体

    物理引擎会一直模拟计算刚体碰撞体的物理状态,会对碰撞以及施加的力做出反应。

    Kinematic刚体碰撞体:挂载了刚体组件且刚体组件设置为 Kinematic 的碰撞体

    可以在脚本中修改物体的Transform属性来移动,不会对碰撞和力做出反应,不受物理系统影响,但依然会对其他刚体产生物理影响(比如可以撞击其他刚体)。可以用在经常需要移动等变化物理状态的碰撞体上。一个刚体碰撞体,可以随时开启或关闭Is Kinematic选项,不会像静态碰撞体的enabled开启或关闭那样引起物理系统的问题。


    两个物体发生碰撞,碰撞体/触发器不同,回调不同:

    展开全文
  • 刚体 碰撞体 刚体常用方法 刚体碰撞事件监测与处理

    刚体

    使用刚体移动物体Rigidbody.MovePosition(Vector3)

    r_Rigidbody = gameObject.GetComponent<Rigidbody>();
    
    r_Rigidbody.MovePosition(r_transform.position + Vector3.forward * 0.5f);
    

    使用刚体移动物体,物体是根据世界坐标系的方向移动的。

    参数
    MovePosition中的Vector3要使用“当前位置”+方向的方式。
    Transform.Position:属性当前物体的位置。

    碰撞体

    在这里插入图片描述

    刚体常用方法

    AddForce()

    给刚体添加一个力,让刚体按“世界坐标系”进行运动Rigidbody.AddForce(Vector3,ForceMode);

    private Rigidbody f_rigidbody = gameObject.GetComponent<Rigidbody>();
    f_rigidbody.AddForce(Vector3.forward, ForceMode.Force);
    

    ForceMode枚举值
    Acceleration:(加速度)
    Force:(力)这种模式通常用于设置真实的物理
    Impulse:(冲击力)这种模式通常用于瞬间发生的力
    VelocityChange:(速度的变化)

    AddRelativeForce()

    给刚体添加一个力,让刚体按“自身坐标系”进行运动。Rigidbody.AddRelativeForce(Vector3,ForceMode);

    	f_rigidbody.AddRelativeForce(Vector3.forward, ForceMode.Force);
        //为了避免球来回滚动(自身坐标系不断变化而导致的)
        if (Input.GetKeyDown(KeyCode.Space))
        {
            f_rigidbody.AddRelativeForce(Vector3.forward * 1000, ForceMode.Force);
            //只给一次力所以要很大
        }
    

    FixedUpdate()

    所有和物理相关的操作,代码都要写在FixedUpdate()方法体内。
    固定更新的时间间隔是0.02秒,1秒执行50次。可在Edit-->ProjectSettings-->Time面板中的FixedTimestep参数设置。

    • Update()方法是每帧执行一次。 画面每渲染完一次,就是一帧,每帧的时间是不固定的。
    • Update()方法中执行物理操作,会出现卡顿的情况。

    刚体碰撞事件监测与处理

    碰撞事件

    当一个用刚体控制的物体与另外一个物体碰撞时,就会触发碰撞事件。
    注:目标物体必须带有Collider组件。

    碰撞事件监测方法

    1.OnCollisionEnter(Collision)
    当碰撞开始时调用,只会调用该方法一次。

    2.OnCollisionExit(Collision)
    当碰撞结束时调用,只会调用该方法一次。

    3.OnCollisionStay(Collision)
    当碰撞进行中时,会持续调用该方法。

    4.Collision参数
    Collision.gameObject属性,与当前物体碰撞的物体的引用。
    gameObject.name属性,当前物体的名字。

    //这三个方法和start(), update()同级别
    void OnCollisionEnter(Collision coll){
        Debug.Log("撞到了" + coll.gameObject.name);
    }
    void OnCollisionStay(Collision coll){
        Debug.Log("接触" + coll.gameObject.name);
    }
    void OnCollisionExit(Collision coll){
        Debug.Log("溜了溜了");
    }
    

    触发事件

    触发器
    将碰撞体组件属性面板上的“IsTrigger”选项选中,当前的游戏物体的碰撞体就变成了触发器。

    • 移动的刚体物体会穿透碰撞体勾选了“IsTrigger”的物体。

    触发事件
    当一个用刚体控制的物体进入到另外一个物体的触发器范围内,就是触发事件。

    • 用途:不与目标物体发生直接的碰撞(接触),而是只要进入目标物体的“触发范围”就能执行某些特定操作。

    触发事件监测方法

    1.OnTriggerEnter(Collider)
    当进入触发范围时开始时调用,只会调用该方法一次。

    2.OnTriggerExit(Collider)
    当离开触发范围时开始调用,只会调用该方法一次。

    3.OnTriggerStay(Collider)
    在触发范围内,会持续调用该方法。

    4.Collider参数
    Collider.gameObject属性,进入触发范围内的目标物体的引用。
    gameObject.name属性,当前物体的名字。

    //这三个方法和start(), update()同级别
    void OnTriggerEnter(Collider coll){
    	Debug.Log("接触到了" + coll.gameObject.name);
    }
    void OnTriggerStay(Collider coll){
    	Debug.Log("接触" + coll.gameObject.name);
    }
    void OnTriggerExit(Collider coll){
    	Debug.Log("溜了溜了");
    }
    
    展开全文
  • 一、触发碰撞和刚体碰撞 共性:碰撞双方都需要加碰撞器组件,至少有一个添加了刚体组件rigidbody; 异同:触发碰撞需要在 碰撞器勾选is trigger选项,刚体碰撞需要使用物理动力模式(isKinematic 选项不能勾选) ...

    一、触发碰撞和刚体碰撞

    共性:碰撞双方都需要加碰撞器组件,至少有一个添加了刚体组件rigidbody;

    异同:触发碰撞需要在 碰撞器勾选is trigger选项,刚体碰撞需要使用物理动力模式(isKinematic 选项不能勾选)

    二、OnTriggerEnter事件执行特点;

    OnTriggerEnter事件不是每帧调用的,它是基于RigidBody物理碰撞后调用的,不管事件所在的脚本是否处于激活状态只要满足条件的碰撞OnTriggerEner都会被调用;

    三、所有碰撞都与刚体组件相关;

    经过测试发现:

    1、rigidbody组件会将加有碰撞器的子物体合成一体,比如父物体加有刚体,并且是处于物理动力状态,子物体没有加刚体,但加有刚体碰撞器;与其他物体进行刚体碰撞时,子物体和父物体就相当于整体作为碰撞个体;

    2、若是父物体以及子物体都加有RigidBody组件,在进行碰撞的时候他们都会作为独立的个体进行碰撞

    3、OnTriggerEnter事件的调用依赖于Collider以及Collider从属于的刚体rigdbody;同理,当两个物体 进行触发碰撞,其中一个没有刚体组件,另一个自身没有刚体组件,但是其父物体带有刚体组件;这两个物体的OnTriggerEnter会被调用,带有刚体且最近的一个父物体的OnTriggerEnter也会被调用。对于一对碰撞,两个物体没有加刚体但其父物体都加了刚体,这两个物OnTriggerEnter

    会被调用,其最近且加有刚体的父物体的OnTriggerEnter也会被调用。

    4、如果是两个物体进行检测,且都为子物体,最好都加上刚体组件,一对一发送消息。

     

     

     

    展开全文
  • C4D教程:刚体碰撞动力学教程 C4D、C4D教程、C4D资源
  • 碰撞体设置方式:点击刚体,点击需要设为碰撞体的对象,点击后粉色方框为实际碰撞识别范围,下图中仅识别一个面 如果选择球则为: 我们需要方框所以选择地板上下两个面标识方框 点击展开其它选项 类别:同...

    刚体:所有需要运动的物体都需要设为刚体

    碰撞体:有接触的物体需要设为碰撞体

    刚体设置方式:点击刚体,点击需要设为刚体的对象,点击确定

    碰撞体设置方式:点击刚体,点击需要设为碰撞体的对象,点击后粉色方框为实际碰撞识别范围,下图中仅识别一个面

    如果选择球则为:                                                                   

       

    我们需要方块所以选择地板上下两个面表示方块  

     

    点击三角展开其它选项

    类别:同类别碰撞体才可以发生碰撞,0与所有碰撞体都可以发生碰撞

    实验一:将两个小块一起设为刚体,一个小块设为碰撞体,一个小块不设为碰撞体,地板设为碰撞体,点击播放开始实验

    现象:一上一下

    原因:两小块一起设为刚体则两小块为一个物体,一个可以发生碰撞一个不可以发生碰撞

    实验二:将两个小块分别设为刚体,一块设为碰撞体类别1,一块设为碰撞体类别2,,地板设为碰撞体类别0

    现象:两小块均在上方,拖动小块可以重叠

    原因:碰撞类别导致,所以一般情况下所有碰撞体类别都设为默认0

    实验三:将两个小块分别设为刚体,均设为碰撞体,地板设为碰撞体,类别都默认为0

    现象:两小块均在上方,拖动小块可以发生碰撞

    其他:一个物体既是刚体又是碰撞体,碰撞体在刚体的子菜单中

     

    展开全文
  • box2d 刚体碰撞设定方法 fixtureDef.filter.categoryBits指自己所属的碰撞种类,fixtureDef.filter.maskBits指与其碰撞的种类;b2FixtureDef fixtureDef;注意 fixtureDef.filter.categoryBits 的值必须是2的倍数,...
  • 这篇博客中介绍了几个基础的动画,但是我们可以设置监听,通过鼠标控制实现更为高级的动画,在这里将绘制一个简单的桌面,桌面上再绘制一个刚体小球,我们可以给这个小球加上初速度,加速度,长尾效果…这是一个很...
  • [Unity]刚体碰撞检测刚体反弹次数

    千次阅读 2018-06-21 14:18:28
    NumberCollisions 即刚体碰撞的次数。   using System.Collections; using System.Collections.Generic; using UnityEngine; public class NumSave : MonoBehaviour { #region Singleton public static ...
  • 有时候需要避免刚体间的碰撞,那么可以使用filter。它是框架的一个属性,提供了碰撞筛选功能。用法比较有意思,经过了多次的试错,才找到其规则,因此有必要进行一些总结。  filter有三个属性,可以从引擎源代码...
  • Unity3d 刚体碰撞

    2015-07-13 17:49:21
    刚体(Rigidbody)的官方(摘自Unity3d的官方指导书《Unity4.x从入门到精通》)解释如下: Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可接受外力与扭矩力用来保证游戏对象像在真实世界中那样...
  • 1)当一个用刚体控制的物体与另外一个物体碰撞时,就会触发碰撞事件 注:目标物体必须带有 Collider 组件。 2)碰撞事件监测方法 1.OnCollisionEnter(Collision) 当碰撞开始时调用,只会调用该方法一次。 2....
  • 3DObject->Plane/Cube/Sphere分别创建一个平面/立方体/球体。摆放成如图所示: ...Rigidbody添加刚体属性。添加完了是这样的: 两个都要添加。这样立方体从上面掉落砸到球体使其滚动的画面就有了...
  • Unity3D 之防止刚体碰撞导致旋转

    千次阅读 2016-05-25 22:10:00
    有时候两个刚体发生碰撞的时候,其中一个质量小的会有发生旋转的情况 如果遇到这样的情况,只需要给刚体添加一个约束就行了。 添加这个就行了。...
  • 名称 意思 Rigidbody 让一个物体受到物理影响。比如添加Rigidbody组建后,物体会立马对重力作出反应,添加了Rigidbody组件后会带来很多的物理计算,所以只...不会有实际的碰撞阻挡,但是可以产生触发回调 ...
  • 刚体碰撞:OnCollisionEnter()方法只能写在碰撞主动方的js里 下图为不同特性物体碰撞,Collision碰撞式信息传递是否可用 触发碰撞模式:OnTriggerEnter()方法只能写在只能写在碰撞主动方的js里,另外碰撞...
  • 一个用刚体控制的物体与另一物体相撞,触发碰撞事件 目标物体必须带有Collider组件 碰撞 collision 保持一个物体不动,设置碰撞体,移除刚体 void OnCollisionEnter(Collision other) //物体与被撞物体相撞,...
  • 《使用Cocos2d-x 开发3D游戏》系列在线课程 第二十三节:3D物理引擎刚体碰撞 视频地址:http://edu.csdn.net/course/detail/1330/20822?auto_start=1 交流论坛:http://www.firestonegames.com/bbs/forum.php ...
  • Nape帮我们实现了物理碰撞模拟,通过Nape我们可以实现各种游戏模型。但是就像我在Box2D碰撞检测里讲的一样,只是碰撞是不够的,我还喜欢碰撞后的物体可以消失、变小等等,按照游戏需求执行任何需要的动作。这就需要...
  • Unity3D入门(九):刚体常用方法介绍AddForce()AddRelativeForce()FixedUpdate() AddForce() 1.作用 给刚体添加一个力,让刚体按 世界坐标系 进行运动,例如游戏中发射的子弹。 2.代码 Rigidbody.AddForce(Vector3...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,352
精华内容 540
关键字:

刚体碰撞