欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 手游 > unity学习33:角色相关2,碰撞检测,collider 和 rigidbody,测试一个简单碰撞爆炸效果

unity学习33:角色相关2,碰撞检测,collider 和 rigidbody,测试一个简单碰撞爆炸效果

2025/6/18 17:16:55 来源:https://blog.csdn.net/xuemanqianshan/article/details/145507909  浏览:    关键词:unity学习33:角色相关2,碰撞检测,collider 和 rigidbody,测试一个简单碰撞爆炸效果

目录

1 给gameObject添加rigidbody

2 rigidbody的属性

2.1 基础属性

2.2 插值 详细

2.3 碰撞检测

2.4 constraints 冻结坐标轴的移动和旋转

2.5 layer Overrides

3 碰撞检测 collision Detection

3.1 每个gameObeject上都会创建时自带一个 Collider

3.2 Collider的绿色范围

3.3 两个物体要产生碰撞,至少1个物体需要有 rigidbody

4 用脚本去检测碰撞

4.1 脚本挂载的原则:谁的事情谁做的原则

4.2 脚本1: 挂在子弹上的 TestCollider.cs

4.3 脚本2: 挂在爆炸效果上的 TestColliderPeng.cs

4.4  测试效果

4.4.1 掉落爆炸前

4.4.2 碰撞到plane,发生碰撞,爆炸

4.4.3 爆炸后,爆炸效果自身也消失


1 给gameObject添加rigidbody

  • 给gameObject添加一个新的component:rigidbody 刚体
  • rigidbody 包含很多物理属性
  1. 重力
  2. 可碰撞
  3. 运动符合现实的物理原理

2 rigidbody的属性

2.1 基础属性

  • rigidbody的基础属性
  • mass: 质量
  • drag:垂直的重力方向的阻力
  • Angle drag: 角阻力,旋转阻力
  • use Gravity: 重力
  • is kinematic:  运动特性,不勾选则完全不受物理影响了
  • interpolate: 插值
  • collision Detection : 碰撞检测

2.2 插值 详细

  • none
  • interpolate      //按上一帧做插值
  • extrapolate     //按下一帧做插值

2.3 碰撞检测

碰撞检测

  • 离散的        //节省性能,非连续检测,离散的检测. 高速物体的碰撞检测可能失败
  • 持续的       //地面一般搞成持续监测
  • 连续动态    //子弹一般搞成连续动态
  • 连续           // 处于以上几种的中间

2.4 constraints 冻结坐标轴的移动和旋转

2.5 layer Overrides

3 碰撞检测 collision Detection

可进行碰撞检测的componenet

  • rigidbody
  • mesh Collider

3.1 每个gameObeject上都会创建时自带一个 Collider

不同的gameObeject都有不同的Collider

  • mesh Collider
  • sphere Collider
  • 。。。

3.2 Collider的绿色范围

  • 比如,创建一个球体,默认半径时0.5。 和gameObject是合一的
  1. 这个 collider,可以通过,修改其 x,y,z 坐标,
  2. 可以修改radius半径,使其扩大,
  • 可以把Collider 分离在外面,看的更清晰
  • 但是一般不需要这么干
  • 因为如果这么干,实际发生碰撞的是这个 Collider ,会和看到的不一致

3.3 两个物体要产生碰撞,至少1个物体需要有 rigidbody

  • 两个物体要产生碰撞,需要这几个条件
  1. 每个物体都需要有 collider
  2. 至少1个物体需要有 rigidbody


 

4 用脚本去检测碰撞

准备工作

  • 建1个子弹,黄色圆球
  • 建1个爆炸效果,黄色平面
  • 模拟爆炸过程

4.1 脚本挂载的原则:谁的事情谁做的原则

  • 谁的事情谁来做,代码挂在谁身上
  • 不要都写在一个脚本里
  • 比如 碰撞,则脚本挂在 地面上也可以,挂在物体上也可以

爆炸消失

  • 爆炸消失这个脚本,不适合挂在火焰本身上,而是挂在后续的爆炸上
  • 新建脚本,爆炸脚本写在爆炸效果上,

4.2 脚本1: 挂在子弹上的 TestCollider.cs

  • TestCollider.cs 挂在子弹上
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class TestCollider : MonoBehaviour
{//创建一个prefabpublic GameObject Prefab;// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){}//监听发生碰撞private void OnCollisionEnter(Collision collision){// 创建一个爆炸物体Instantiate(Prefab,transform.position,Quaternion.identity);//销毁自身Destroy(gameObject);//获取碰撞到的物体Debug.Log(collision.gameObject.name);}//监听碰撞持续private void OnCollisionStay(Collision collision){}//监听碰撞结束private void OnCollisionExit(Collision collision){Debug.Log("CollisionExit");}}

4.3 脚本2: 挂在爆炸效果上的 TestColliderPeng.cs

  • TestColliderPeng.cs 挂在爆炸效果上
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class TestColliderPeng : MonoBehaviour
{float timer=0;// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){timer=timer+Time.deltaTime;if(timer>1){//销毁自身,gameObject就是自身Destroy(gameObject);}}
}

4.4  测试效果

4.4.1 掉落爆炸前

4.4.2 碰撞到plane,发生碰撞,爆炸

  • 碰撞到plane,发生碰撞,爆炸
  • 爆炸后,黄球自动消失(子弹消失)

4.4.3 爆炸后,爆炸效果自身也消失

爆炸后,爆炸效果自身也消失(爆炸结束)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词