Unity中碰撞行为
在unity世界中,可以模拟现实世界的碰撞行为。 通过给GameObject添加Collider碰撞体组建即可。 unity中的Collider有比较多中,这里我们先介绍Box Collider。
Box Collider
Box Collider(盒碰撞体)是一种用于物体碰撞检测和触发事件的组件。
它是一个简单的几何形状,以立方体的形式包围游戏对象,用于模拟物体的碰撞形状。
Box Collider 是 Unity 中常用的碰撞检测组件之一,可以帮助你实现游戏中物体的碰撞、触发和交互功能。
如何使用 Box Collider:
添加 Box Collider: 将 Box Collider 组件添加到游戏对象上。你可以在 Unity 编辑器中选择游戏对象,然后点击 Add Component -> Physics -> Box Collider,或者通过代码动态添加。
调整属性: 在 Box Collider 组件的属性面板中,你可以调整碰撞体的大小(Size)、中心点(Center)、是否是触发器(Is Trigger)等属性。
事件处理: 你可以通过编写脚本来处理 Box Collider 的碰撞事件或触发事件。例如,你可以实现 OnCollisionEnter、OnTriggerEnter 等方法来响应碰撞或触发事件,并在其中编写相应的逻辑代码。
测试和调试: 在场景中运行游戏,观察 Box Collider 的行为,并根据需要进行调整和优化,确保它能够准确地模拟物体的碰撞和触发行为。
调整碰撞体大小
通过点击Box Collider组件 > Edit Collider 旁边的小按钮即可。
它默认会有一个正方体产生,可以选中正方体六个面上的点进行大小缩放。调整后的正方体就是碰撞体的范围。
让对象可以穿过碰撞体
对于部分游戏,比如吃金币。我们希望主角可以穿过金币,那么我们可以把碰撞体的is Trigger
钩上即可。
钩上后,可以通过脚本的OnCollisionEnter
、OnTriggerEnter
监听是否进入。
销毁Collider对象
//触发碰撞
void OnTriggerEnter(Collider other) {
if (other.gameObject.CompareTag("powerup")){
Destroy(other.gameObject);
hasPower = true;
StartCoroutine("PowerupCountdownRoutine");
}
}
IEnumerator PowerupCountdownRoutine () {
yield return new WaitForSeconds(7);
hasPower = false;
}
//触发碰撞后,触发进入
private void OnCollisionEnter(Collision other) {
if (other.gameObject.CompareTag("enemy") && hasPower){
//这里方向上other 到player的方法
Vector3 foce_direct = other.transform.position - transform.position;
Rigidbody rgbody = GetComponent<Rigidbody>();
//给刚体添加推力
rgbody.AddForce(foce_direct * 10.0f,ForceMode.Impulse);
}
}
给碰撞对象添加一个反方向的力
Vector3 foce_direct = other.transform.position - transform.position;
rgbody.AddForce(foce_direct * 10.0f,ForceMode.Impulse);
Box Collider 的特点和用途:
碰撞检测: Box Collider 可以检测游戏对象之间的碰撞,当两个物体的 Box Collider 重叠时,Unity 将触发碰撞事件,你可以在代码中捕获这些事件并执行相应的操作。
物理模拟: Box Collider 与 Unity 的物理引擎结合使用,可以模拟真实世界中的物体碰撞和反应。当两个物体的 Box Collider 相交时,它们之间会施加物理力,并且可能会发生反弹、摩擦等效果。
触发器: 除了用于物体的实际碰撞检测外,Box Collider 还可以作为触发器使用。你可以将其设置为 Is Trigger,使其不再响应物理碰撞,而是在其他物体进入或退出其区域时触发 OnTrigger 事件。
可视化调整: 在 Unity 编辑器中,你可以直观地调整 Box Collider 的大小、位置和旋转,以确保它与物体的形状和大小相匹配。