![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/eac5e4ed1f9ea6024f4feadfb394925d.png)
刚体组件
- 刚体组件
- 刚体脚本
在刚体中添加恒定力:
注意:public class Rig : MonoBehaviour { private void FixedUpdate() { if (Input.GetMouseButtonDown(0)) { Rigidbody myrigidbody = GetComponent<Rigidbody>(); myrigidbody.AddForce(0.0f, 10.0f, 0.0f); } } }
GetComponent<Rigidbody>()
来获取刚体组件。直接使用rigidbody会显示
注意:
刚体碰撞
碰撞器分为Box、Sphere、Capsule(胶囊)、Terrain等碰撞器。
![](https://i-blog.csdnimg.cn/blog_migrate/a8e1629ec3597fd3f743377cb5c3580c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2d77e043a4c19b183fa50f208454af4f.png)
注意:在组件中没使用Rigidbody的物体,其碰撞方式不同
碰撞消息传递
OnCollisionEnter函数:private void OnCollisionEnter(Collision collision)
碰撞发生时调用
private void OnCollisionEnter(Collision collision)
{
Debug.Log(collision.gameObject);
if (collision.rigidbody)
{
//collisionPower为定义的public float值
collision.rigidbody.AddForce(0, collisionPower, 0);
}
}
将这个脚本挂靠在球体上,当球体与其他物体发生碰撞时,受到AddForce力的作用的是其他物体!
collision.gameObject传回来的信息也是其他物体的(应该是collision就是访问了其他物体)
所以这个函数一般用在主角中
触发器碰撞模式
触发器选项:Is Trigger
打开了触发器模式的物体,发生碰撞时,直接穿透,也不发消息
如果要对触发器碰撞发生时进行操作:调用OnTriggerEnter函数
OnTriggerEnter函数:private void OnTriggerEnter(Collider other)
private void OnTriggerEnter(Collider other)
{
Debug.Log(other.gameObject);
Destroy(other.gameObject);
}
当触发器碰撞发生时,销毁其他物体
注意!!!!!!!!!!!!!!!!
两个物体碰撞时,必须都要添加collider,其中一个添加rigidBody!
注意在project settings要注意有没有允许不同层级的碰撞
刚体关节
铰链关节
组件里:Hinge Joint,铰链关节会自动添加Rigidbody组件
。
如右图所示:添加的铰链为黄色箭头,可以控制铰链的位置。
如果想要用铰链连接两个物体,则其他物体添加在Connected Body内。
把use motor勾选上,并设置,就可以控制铰链的旋转。
固定关节
组件里:Fixed Joint
用固定关节添加在一起的两个物体,相当于一个整体。
如图所示,两片是贴在一起的。如果在重力作用下要倒,则是pia的拍在地上。
弹簧关节
组件里Spring Joint
当物体用弹簧关节时,在场景里就是一个小方块
。
物体相当于用弹簧拴在小方块的位置点(即使那个位置点什么都没有)
如果此时有外力撞击下面的板,就可以看到弹簧勾住的效果。同样,也可以设置break force(最大恒力)和break torque(最大扭矩力)来控制弹簧的断裂极值。
角色关节
用来模拟肢体
组件里Character Joint,出来是一个垂直坐标系:
Swing1 Limit和Swing2 Limit分别为绕Y轴和绕Z轴旋转的范围。Bounciness为到达最大值之后的反弹多少,Damper为阻尼选项。
可配置关节
组件里Configururable Joint
相当于自定义关节,其功能比较完善,可以在三轴方向上分别控制移动、旋转和加速。