Unity 两物体的碰撞 OnTriggerEnter和OnCollisionEnter

目录

1 加脚本

2 Collision.cs

3 另一个碰撞体设计 

4. 运行时拖动有rigidbody的cube1,如果移动没有rigidbody的则没有效果。

5, 要把cube1的x,y,z固定了,不然一撞就飞了。

6 Refs

6.1 unity3D OnTriggerEnter和OnCollisionEnter的一点个人心得(主要讲区别)

6.2 关于Unity3d中物体之间碰撞检测的方法

6.3 Collider.OnCollisionEnter(Collision) 当碰撞进入

6.4 查看unity的官方帮助文档。


 

1 加脚本

2 Collision.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CollisionTest : MonoBehaviour {

	// Use this for initialization
	void Start () {
		
	}

	 void OnCollisionEnter(Collision other)
	{
		print ("When one door of happiness closes, another opens; " +
			"but often we look so long at the closed door that we do not see the one which has been opened for us. ");
	}


	void OnCollisionStay(Collision other)
	{
		print ("A choice each must make for themselves, something no hero will ever defeat.");

	}

	void OnCollisionExit(Collision other)
	{
		print ("A charming woman doesn't follow the crowd. She is herself.");
	}
	
	// Update is called once per frame
	void Update () {
		
	}
}

3 另一个碰撞体设计 

is kinematic不能打勾

 

4. 运行时拖动有rigidbody的cube1,如果移动没有rigidbody的则没有效果。

 

5, 要把cube1的x,y,z固定了,不然一撞就飞了。

这时如果让cube1静止,cube运动靠近,也可以。

6 Refs

6.1 unity3D OnTriggerEnter和OnCollisionEnter的一点个人心得(主要讲区别)

6.2 关于Unity3d中物体之间碰撞检测的方法

6.3 Collider.OnCollisionEnter(Collision) 当碰撞进入

6.4 查看unity的官方帮助文档。

 

 

### Unity 中实现两个物体碰撞检测并让其中一个物体消失 在 Unity 中,可以通过设置 `Collider` `Rigidbody` 组件来启用碰撞检测功能。为了实现在两个物体发生碰撞时使其中的一个物体消失,可以利用 Unity 提供的碰撞事件方法 `OnCollisionEnter` 或者 ` OnTriggerEnter` 来编写逻辑。 以下是具体的实现过程: #### 1. 添加必要的组件 确保参与碰撞两个物体都有以下组件: - **Collider**:用于定义物体碰撞范围。可以选择不同的形状(如 Box Collider、Sphere Collider 等),具体取决于物体的实际需求[^1]。 - **Rigidbody**:至少一个物体需要附加 Rigidbody 组件以便物理引擎能够识别其运动状态受力情况[^3]。 如果希望物体仅作为触发器而不受到物理作用力的影响,则可以在 Collider 上勾选 `Is Trigger` 属性。 #### 2. 编写脚本处理碰撞事件 创建一个新的 C# 脚本文件,并将其挂载到目标物体上。在此脚本中覆盖合适的碰撞响应方法。 对于非触发器类型的碰撞,使用 `OnCollisionEnter` 方法;如果是触发器类型,则应使用 `OnTriggerEnter` 方法。 下面是一个简单的例子展示如何销毁特定条件下的碰撞对象: ```csharp using UnityEngine; public class DestroyOnCollision : MonoBehaviour { private void OnCollisionEnter(Collision collision) { // 检查碰撞对象标签是否为 "Destroyable" if (collision.gameObject.CompareTag("Destroyable")) { // 销毁符合条件的碰撞对象 Destroy(collision.gameObject); } } private void OnTriggerEnter(Collider other) { // 如果是触发器模式下工作,同样检查标签 if (other.gameObject.CompareTag("Destroyable")) { // 销毁符合条件的碰撞对象 Destroy(other.gameObject); } } } ``` 此代码片段中的 `Destroy()` 函数负责立即删除指定的游戏对象及其所有子级[^4]。 #### 3. 设置场景配置 为了让上述机制生效,请执行以下操作: - 将该脚本分配给任何可能与其他标记为 `"Destroyable"` 的游戏对象接触的角色或项目。 - 对那些应该被摧毁的目标赋予相同的标签名称——即 `"Destroyable"`。 完成这些步骤之后,在运行状态下当满足设定好的条件时就会自动消除对应实体。 --- ### 注意事项 - 当设计复杂的交互行为时考虑性能优化策略比如分层遮罩(layer mask),它允许开发者精确控制哪些层次之间会发生相互影响从而避免不必要的运算负担[^4]。 - 测试过程中注意调整各参数值以达到理想效果,例如刚体的质量大小会影响撞击力度进而改变最终表现形式。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值