网络营销网站,听小说的网站哪个好,c 可以做网站吗,wordpress制作rss一、物理系统
如何让一个球体受到重力的影响#xff1f; 只要给物体添加刚体组件#xff08;Rigidbody#xff09;#xff0c;就可以使其受到重力影响 1.刚体#xff08;Rigidbody#xff09;#xff1a; 刚体是一个组件#xff0c;用于使游戏对象受到物理引擎的控制。…一、物理系统
如何让一个球体受到重力的影响 只要给物体添加刚体组件Rigidbody就可以使其受到重力影响 1.刚体Rigidbody 刚体是一个组件用于使游戏对象受到物理引擎的控制。它可以给对象添加质量、速度、角速度等属性从而模拟物体的运动。 2.碰撞检测有三种主要的模式离散Discrete、持续Continuous、和连续动态Continuous Dynamic。
①离散Discrete
描述 离散碰撞检测是一种基本的碰撞检测模式。在每一帧结束时系统会检测物体的碰撞情况。如果两个物体在当前帧的某个时刻发生了碰撞系统将在下一帧中处理这个碰撞。
用途 适用于大多数情况性能较高。但对于非常高速的物体可能会导致穿透的问题因为它们可能在两次检测之间穿越其他物体。
②持续Continuous
描述 持续碰撞检测会检查物体在整个运动过程中是否会发生碰撞。它通过检测物体的整个运动路径以确保在任何时刻都能够准确地检测到碰撞。
用途 适用于高速运动的物体可以防止高速运动时的穿透问题。但相对来说计算成本较高可能会对性能产生一定影响。
③连续动态Continuous Dynamic
描述 连续动态碰撞检测是持续碰撞检测的一种改进版本专门为高速运动的物体设计。它通过预测物体在整个帧期间的运动轨迹以提高性能减少计算成本。
用途 适用于需要高性能同时又需要防止高速运动穿透问题的场景。
如何检测碰撞
产生碰撞的两个条件
①只有当两个物体身上都有碰撞器组件时才能产生碰撞。比如这个球体的 Sphere Collider。
②至少有一个物体身上有存在刚体 这个中心属可以控制碰撞器的位置真正产生碰撞是这个线框。 通过脚本去监听碰撞。
监听碰撞发生了
private void OnCollisionEnter(Collision collision){} 持续碰撞中
private void OnCollisionStay(collision collision){}
结束碰撞
private void OnCollisionExit(Collision collision){}
代码中的 collision 包含了碰撞信息比如可以获取碰撞者的 name
Debug.Log(collision.gameObject.name);
现在有个要求是当物体产生碰撞后产生爆炸效果并销毁自己
创建一个爆炸预设体并将预设体关联 public GameObject Prefab; 监听碰撞发生
private void OnCollisionEnter(Collision collision){ lnstantiate (Prefab, transform.position,Quaternion.identity); Destroy (gameObject);
}
效果如下 二、触发器
触发器Trigger是一种用于检测物体之间相互接触的机制。与碰撞器不同触发器不会导致物体的物理交互但它允许你在物体之间进行交互检测。触发器通常用于实现触发事件、检测进入或退出区域等场景。
触发条件与刚体相似区别是要把一个物体的碰撞器的属性设置为触发器这样物体之间就不会产生碰撞了。 通过脚本监听触发
监听触发发生了
private void OnTriggerEnter(Collision other){} 持续触发中
private void OnTriggerStay(collision other){}
结束触发
private void OnTriggerExit(Collision other){}
这里的 Other 参数表示进入触发的碰撞器
举例 当这个物体到达这个位置的时候前面的墙消失。
代码如下 private void OnTriggerEnter(Collider other) { GameObject door GameObject.Find(Door); if(door ! null) { door.SetActive(false); } }
触发后的效果 触发器的注意事项
①.触发器需要至少一个物体有Collider组件并且其中一个必须勾选Is Trigger。
②.如果勾选了Is Trigger则物理引擎不会自动处理碰撞反应需要通过代码来处理触发器事件。
③.触发器通常用于实现特定区域内的事件、触发检测等场景。
④.触发器不参与物理碰撞因此不会导致物体的物理反应。