unity学习笔记12

一、物理系统

如何让一个球体受到重力的影响?

只要给物体添加刚体组件(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",则物理引擎不会自动处理碰撞反应,需要通过代码来处理触发器事件。

③.触发器通常用于实现特定区域内的事件、触发检测等场景。

④.触发器不参与物理碰撞,因此不会导致物体的物理反应。

相关推荐
CCCC131016331 分钟前
嵌入式学习(day 28)线程
jvm·学习
星星火柴9361 小时前
关于“双指针法“的总结
数据结构·c++·笔记·学习·算法
小狗爱吃黄桃罐头1 小时前
正点原子【第四期】Linux之驱动开发篇学习笔记-1.1 Linux驱动开发与裸机开发的区别
linux·驱动开发·学习
艾莉丝努力练剑2 小时前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
武昌库里写JAVA3 小时前
JAVA面试汇总(四)JVM(一)
java·vue.js·spring boot·sql·学习
Cx330❀4 小时前
【数据结构初阶】--排序(五):计数排序,排序算法复杂度对比和稳定性分析
c语言·数据结构·经验分享·笔记·算法·排序算法
杜子不疼.4 小时前
《Python学习之字典(一):基础操作与核心用法》
开发语言·python·学习
小幽余生不加糖4 小时前
电路方案分析(二十二)适用于音频应用的25-50W反激电源方案
人工智能·笔记·学习·音视频
..过云雨5 小时前
01.【数据结构-C语言】数据结构概念&算法效率(时间复杂度和空间复杂度)
c语言·数据结构·笔记·学习
myzzb5 小时前
基于uiautomation的自动化流程RPA开源开发演示
运维·python·学习·算法·自动化·rpa