您现在的位置是:首页 >技术杂谈 >【Unity入门】24.碰撞检测网站首页技术杂谈
【Unity入门】24.碰撞检测
【Unity入门】碰撞检测
大家好,我是Lampard~~
欢迎来到Unity入门系列博客,所学知识来自B站阿发老师~感谢
(一)碰撞体
(1)Collider组件
上节课我们有学习到,unity的物理系统提供了更方便的碰撞检测机制,就是提供各种的Collider组件去检测碰撞需求
Unity 中有以下几种 Collider 组件:
1. Box Collider(盒子碰撞器):一个基于矩形的碰撞体,用于模拟长方体或立方体物体的碰撞。
2. Sphere Collider(球形碰撞器):一个基于球形的碰撞体,用于模拟球体物体的碰撞。
3. Capsule Collider(胶囊碰撞器):一个基于胶囊形状的碰撞体,用于模拟某些具有胶囊形状的物体的碰撞,比如人物角色。
4. Mesh Collider(网格碰撞器):一个基于游戏对象模型的碰撞体,用于模拟复杂的几何形状的物体的碰撞,比如地形、建筑等。
5. Terrain Collider(地形碰撞器):一个基于 Unity 地形的碰撞体,用于模拟地形的碰撞。
6. Wheel Collider(车轮碰撞器):一个专门针对车辆的碰撞体,用于模拟车辆的轮子与地面的碰撞。
7. Character Controller(角色控制器):一个专门为人物角色设计的碰撞体,用于模拟人物角色的移动和碰撞。
我们就给篮球加上了球形的 Sphere Collider,给草地加上了盒子立方体形的Box Collider,因此篮球和草地之间就可以检测到碰撞
(2)编辑碰撞体
此时若我突发奇想,如果我想给篮球加一个矩形的碰撞体,不用球形的行不行呢?
试试看就知道了, 我们发现,选用矩形的碰撞体组件同样会生成一个包裹住篮球的碰撞体结构(绿框),只不过它的样子是矩形罢了
运行起来也是没有问题的,所以用哪一个碰撞体组件真的就没那么严格限制:
在创建的时候,unity的物理引擎会自动计算出物体的大小,从而生成合适的碰撞体组件。那比如我们需要篮球在空中还有一定距离时就停下(监听到碰撞),如何调整这个组件大小呢?
很简单,选中collider组件,里面有一个Edit Collider选项点击之后我们就可以在场景编译器中调整碰撞体组件的大小了
比如把组件调的那么大,就可以在绿框和草地接触的那一刻停下
(二)碰撞体检测
(1)Kinematic运动学刚体
刚体我们知道是物理学中研究的一个物体对象概念,那运动学刚体是什么呢?
运动学刚体不受物理引擎的计算和影响,而是由开发者手动控制它的运动。运动学刚体可以设置为运动、旋转或缩放,但不会受到重力、碰撞等物理效果的影响。运动学刚体通常用于模拟精确的动画或特效效果,或者用于实现一些特定的游戏机制
选中Rigidbody组件,里面有一个可以选择Is Kinematic的参数,选中就可以让它成为一个运动学刚体
(2)isTrigger触发器
第二步需要设置碰撞体为触发器
isTrigger 是 Collider(碰撞体)组件中的一个属性,用于指定碰撞体是否为触发器。
当一个碰撞体的 isTrigger 属性被设置为 true 时,该碰撞体就不会影响游戏对象的物理运动,也不会产生碰撞效果,而只是用于检测游戏对象是否进入了该碰撞体的范围内。当游戏对象进入触发器时,就会触发 OnTriggerXXX 系列函数(比如 OnTriggerEnter、OnTriggerStay、OnTriggerExit)
只需要选中Collider组件,勾线IsTrigger参数就可以了
做完这两部后,我们就可以通过OnTriggerXXX 系列函数在脚本中检测碰撞的发生
我们可以给篮球加一个脚本试试看效果:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BasketballLogic : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
float DisPreSec = 6f;
this.transform.Translate(0, -DisPreSec * Time.deltaTime, 0);
}
void OnTriggerEnter()
{
Debug.Log("发生了碰撞");
}
}
看看输出,在碰撞的一霎那确实就打印出来了:
好啦今天就到这里,谢谢各位感谢阅读!!!
点赞,关注!!!