1、重力
刚体组件
英文 | 中文 | 描述 |
---|---|---|
RigidBody | 刚体组件 | physics->rigidbody ,刚体组件使一个物体有了质量,重力等。,use gravity 勾选后,物体才会受到重力,会自动下落,取消勾选就不会。,,is kinematic 表示运动学刚体,此时物体质量为0,就不会受重力的影响。 |
1. 质量2. 阻力3. 角阻力4. 使用重力(取消后,只是不受重力影响,阻力等还是受影响的)5. Is Kinematic(是运动学的,勾选后,不受物理影响)6. 插值(一般不用修改,插值是按照上一帧做插值,外推是按照下一帧做插值)7. 碰撞检测(离散的节省性能非连续检测高速物体检测不到,持续和连续动态是相对的快速的物体是连续动态不动的选择持续比较好但是浪费性能,没有翻译的Co...是连续检测性能低于持续和连续高于离散)8. Constraints(冻结位置是值某个方向不能运动,冻结旋转同理)
2、碰撞的产生和监听
英文 | 中文 | 描述 |
---|---|---|
Mesh Collider | 网格碰撞器 | |
Sphere Collider | 球体碰撞器 |
- 碰撞中心(修改了碰撞中心会发生偏移)
- 碰撞半径(大了会间隔碰撞,下了会穿透一部分)
碰撞组件实际碰撞发生的是碰撞线框
碰撞条件
- 至少有一个物体有刚体组件
- 只有物体都有碰撞器的时候才会发生碰撞
//设置一个爆炸的预设体
public gameObject Prefab;
//监听发生碰撞private void OnCollisionEnter(Collision collision){ //创建一个新的爆炸物体Instantiate(Prefab, transform.position, Quaternion.identity)//销毁自身(火焰物体) Destroy(gameObject); //碰撞到的物体信息Debug.Log(colision.gameObject.name);Debug.Log("碰撞发生!");}
//持续碰撞中private void OnCollisionStay(Collision collision){ Debug.Log("持续碰撞中!");}
//结束碰撞private void OnCollisionExit(Collision collision){ Debug.Log("结束碰撞!");}
3、触发
触发条件 和碰撞器一样
- 至少有一个物体有刚体组件
- 只有物体都有碰撞器的时候才会发生碰撞,只是其中一个碰撞器设置成触发器;一般触发器设置成看不见的
可移动的游戏物体脚本
void Update(){//水平轴float horizontal = Input.GetAxis("Horizontal");//垂直轴float vertical = Input.GetAxis("Vertical");//创建成一个方向向量Vector3 dir = new Vector3(horizontal, 0, vertical);//朝向量方向移动Translate是平移,*Time.dalteTime是指每秒transform.Translate(dir*Time.dalteTime);}
触发器物体的脚本
物体Cube (1)是墙壁,触发后执行的物体,下面代码是触发后Cube (1)墙体消失
private void OnTriggerEnter(Collider other){GameObject cube = GameObject.Find("Cube (1)");if (cube != null){cube.SetActive(false);}}private void OnTriggerStay(Collider other){}private void OnTriggerExit(Collider other){}
4、物理关节(铰链,弹簧等)
添加组件的时候搜索关节,会有很多,
铰链关节
可以做固定轴旋转
Anchor 是轴的位置
轴是轴的方向
Use Motor 自动
弹簧关节
需要两个物体链接,在a物体加弹簧组件,把b物体拖入刚体Connected Body 就链接了,其他属性不细说了
固定关节
和弹簧类似, 需要两个物体链接,在a物体加弹簧组件,把b物体拖入刚体Connected Body 就链接了,其他属性不细说了
但是性质不同,就会固定在一个物体上,无法移动等;类似胶水,可以设置断开力,到达足够力时就断开链接
其他关节暂时不讲
5、物理材质
不同材质有不同的效果、如冰面和土地的摩擦力不同;
新建-》物理材质,可以设置摩擦力弹力等;
给物体添加材质