UnityRagdoll实现死亡效果的心得+坑点总结是怎样的-成都快上网建站

UnityRagdoll实现死亡效果的心得+坑点总结是怎样的

这期内容当中小编将会给大家带来有关Unity Ragdoll 实现死亡效果的心得+坑点总结是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

创新互联网站建设提供从项目策划、软件开发,软件安全维护、网站优化(SEO)、网站分析、效果评估等整套的建站服务,主营业务为成都网站建设、做网站,成都App制作以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。创新互联深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

正文

回到顶部

效果展示

正如其名,Ragdoll可以让人物模型实现像布娃娃一样物理效果

Unity Ragdoll 实现死亡效果的心得+坑点总结是怎样的

Unity Ragdoll 实现死亡效果的心得+坑点总结是怎样的

Unity Ragdoll 实现死亡效果的心得+坑点总结是怎样的

回到顶部

创建Ragdoll

在场景中新建 3D Object → Ragdoll...

Unity Ragdoll 实现死亡效果的心得+坑点总结是怎样的

接下来是一个初见复杂的绑定界面,这里我做了简单翻译

Unity Ragdoll 实现死亡效果的心得+坑点总结是怎样的

我们需要将模型对应的关节部位一一拉进这个表

创建完成后,可以发现模型中的每个所选部位中多了一个Rigibody,一个Collider和一个Character Joint组件,在Joint面板里可以调节转动限制等

Unity Ragdoll 实现死亡效果的心得+坑点总结是怎样的

Unity Ragdoll 实现死亡效果的心得+坑点总结是怎样的

这里要注意的一个坑点是,root节点是没有Character Joint的,当你找不到root节点时,没有Character Joint但是添加了Box Collider和Rigibody的就是root节点

Unity Ragdoll 实现死亡效果的心得+坑点总结是怎样的

root节点应在这个位置,不熟悉朋友有可能将盆骨附近Pelvis 与 胸部附近Middle Spine的两个Collider互换位置,或者重叠,这将导致整个人物的抽搐,蒙皮拉伸

Unity Ragdoll 实现死亡效果的心得+坑点总结是怎样的

调整四肢Collider大小位置,如下:

Unity Ragdoll 实现死亡效果的心得+坑点总结是怎样的

回到顶部

通过代码控制

这时候我们需要:

  1. 让角色存活(isDead = false)时:每个部位的Rigibody的isKinematic一直为true,每个部位的Collider的isTrigger也为true

  2. 角色死亡(isDead = true)时:每个部位的Rigibody的isKinematic变为false,每个部位的Collider的isTrigger也变为false,同时,必须将角色的Animation组件去除

就可以实现这样的效果

Unity Ragdoll 实现死亡效果的心得+坑点总结是怎样的

代码

我的做法是使用GetComponentsInChildren函数获得所有刚体,再通过每个刚体获取这个部位上的Collider,用两个List将他们存储起来。就可以方便的设置isKinematic和isTrigger

同时在死亡的下一帧用协程关闭动画组件,(如果想让角色复活,Anmiaton组件的enable属性设置为true即可)

Unity Ragdoll 实现死亡效果的心得+坑点总结是怎样的

完整代码如下:

    public List ragdollRigidbodys = new List();
   public List ragdollColliders = new List();

   void InitRagdoll() {

       Rigidbody[] _rigidbodys = GetComponentsInChildren();

       for (int i = 0; i < _rigidbodys.Length; i++) {
           if (_rigidbodys[i] == rigidbody)
               continue;
           ragdollRigidbodys.Add(_rigidbodys[i]);
           _rigidbodys[i].isKinematic = true;

           Collider _collider = _rigidbodys[i].gameObject.GetComponent();
           _collider.isTrigger = true;
           ragdollColliders.Add(_collider);

       }
   }

   void EnableRagdoll() {
       for (int i = 0; i < ragdollRigidbodys.Count; i++) {
           ragdollRigidbodys[i].isKinematic = false;
           ragdollColliders[i].isTrigger = false;
       }

       Collider collidercontroller = rigidbody.gameObject.GetComponent();
       collidercontroller.enabled = false;
       rigidbody.isKinematic = true;

       StartCoroutine(CloseAnimator());
   }

   IEnumerator CloseAnimator() {
       yield return new WaitForEndOfFrame();
       animator.enabled = false;
       this.enabled = false;
   }

最终效果就是这样了,死亡之后的布娃娃状态真的很有意思

Unity Ragdoll 实现死亡效果的心得+坑点总结是怎样的

Unity Ragdoll 实现死亡效果的心得+坑点总结是怎样的

Unity Ragdoll 实现死亡效果的心得+坑点总结是怎样的

回到顶部

坑点总结

第一帧蒙皮拉伸,撕裂

Play之后的第一帧(先点暂停再Play可查看第一帧)可能出现角色关节撕裂,Play之后角色乱动

Unity Ragdoll 实现死亡效果的心得+坑点总结是怎样的

解决方案:

  • 检查pelvis和middle spine是否混淆,root节点设置错误(root节点是有刚体,有碰撞器没有Character Joint

  • 检查两个部位的collider是否产生重叠

死亡后蒙皮拉伸,撕裂

解决方案:

可以尝试勾选Character Joint组建的Enable Projection选项

Unity Ragdoll 实现死亡效果的心得+坑点总结是怎样的

死亡后布娃娃不生效

解决方案

检查是否有关Animator组件

上述就是小编为大家分享的Unity Ragdoll 实现死亡效果的心得+坑点总结是怎样的了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。


网页标题:UnityRagdoll实现死亡效果的心得+坑点总结是怎样的
地址分享:http://kswjz.com/article/iphjis.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流