unity ragdoll实现拾取道具的核心代码

  • 给手的骨骼添加碰撞组件
void OnCollisionEnter(Collision col)
{
  if (col.gameObject.tag == "weapon")
  {
      // 有一些逻辑需要判断
      // 当前武器是否有玩家拥有 (如果一个武器只能被一个玩家拾取)
      //  武器当前的玩家不是他自己的时候才可以捡起
      if( !hasJoint)
      {
        hasJoint = true;
        leftHand.AddComponent<FixedJoint>();
        leftHand.GetComponent<FixedJoint>().breakForce = Mathf.Infinity;
        
        leftHand.GetComponent<FixedJoint>().connectedBody = col.gameObject.GetComponent<Rigidbody>();
      }
      
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

丢掉武器的逻辑

  • 力量清零
rightHand.GetComponent<FixedJoint>().breakForce = 0;
hasJoint = false;
1
2
  • 销毁组件

  Destroy(rightHand.GetComponent<FixedJoint>());
1
2