效果展示

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

创建Ragdoll

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

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

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

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

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

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

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

通过代码控制

如果我需要的效果是:

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

代码

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

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

完整代码如下:

    public List<Rigidbody> ragdollRigidbodys = new List<Rigidbody>();public List<Collider> ragdollColliders = new List<Collider>();void InitRagdoll() {Rigidbody[] _rigidbodys = GetComponentsInChildren<Rigidbody>();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>();_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<Collider>();collidercontroller.enabled = false;rigidbody.isKinematic = true;StartCoroutine(CloseAnimator());}IEnumerator CloseAnimator() {yield return new WaitForEndOfFrame();animator.enabled = false;this.enabled = false;}

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

坑点总结

第一帧蒙皮拉伸,撕裂

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

解决方案:

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

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

死亡后蒙皮拉伸,撕裂

解决方案:

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

死亡后布娃娃不生效

解决方案

检查是否有关Animator组件

转载于:https://www.cnblogs.com/zhxmdefj/p/10764043.html

Unity Ragdoll 实现死亡效果 心得+坑点总结相关推荐

  1. Unity Ragdoll的坑

    最近做的项目中,使用到了Ragdoll去做死亡的效果,但是偶然会发现,蒙皮会被无限拉伸撕裂.刚开始以为节点绑的不对,或自动生成碰撞体大小不合适.试了好多方法还是没有解决.最后还是google寻找解决方 ...

  2. 关于Unity粒子系统碰撞的几个坑

    关于Unity粒子系统碰撞的几个坑 最近公司的项目正好要用到粒子系统的碰撞,所以特意研究了一下.在实践中遇到了很多问题,所以借此文记录一下学习的过程.而且学习过程中发现网上这方面文章极少,所以也算借这 ...

  3. Unity 实现物体破碎效果(转)

    感谢网友分享,原文地址(How to Make an Object Shatter Into Smaller Fragments in Unity),中文翻译地址(Unity实现物体破碎效果) In ...

  4. Unity中纹理启用SRGB的坑

    Unity中纹理启用SRGB的坑 __先说结论,在shader中不使用SRGB与Linear的转换函数的前提下,如果该纹理是Albedo.Emissive.Ramp或者其它颜色贴图,建议勾上SRGB, ...

  5. Unity ShaderGraph图片发光效果

    Unity ShaderGraph图片发光效果 前言 发光效果(Glow) 原理 ShaderGraph 前言 发光的基本原理,如何给图片施加不同颜色的光 公式讲解部分参考10行代码搞定"热 ...

  6. 如何使用unity制作雷达探测目标效果动画

    如何使用unity制作雷达探测目标效果动画 如何用unity制作动画或者可以展示的软件 因为如今许多制作软件的引擎,虚幻,unity,寒霜等,unity更加便捷. 在官网www.unity3D.com ...

  7. 2021-09-29 Unity WebGL平台开发遇到的坑

    内容简介:最近在用Unity做一个 WebGL 平台的项目,开发过程中遇到了各种各样的坑,这里简单记录一下,以免以后再踩.首先是Http请求的问题,我最开始想的是,直接用C#里的写法,编辑器里测试毫无 ...

  8. unity Text文字淡入效果

    unity Text文字淡入效果 CrossFadeAlpha()方法 先将alpha降为0,再改为1. public Text t;void Start() {t.CrossFadeAlpha(0f ...

  9. Water in Unity 使用Unity提供的水效果

    Water in Unity 使用Unity提供的水效果 需要Standard Asset 和 Pro Standard Asset 使用Standard Assets packages添加白天.夜里 ...

  10. unity实现翻页效果

    加粗样式本文实例为大家分享了unity实现翻页效果的具体代码,供大家参考,具体内容如下 一.示意图 二.步骤 创建物体ToPanel:添加组件ScrollRect, 在下面创c#教程建一个空物体用来装 ...

最新文章

  1. golang slice 切片 追加、删除、插入
  2. SQL Server 2005合并列成字符串 2008-11-07
  3. oracle 日累计月,Oracle按月份累计求和
  4. 利用 commit 理解镜像构成
  5. Oracle 表空间的段管理
  6. ArrayList 动态数组 0119
  7. [CTF]思维导向图
  8. 中高级开发面试必问的Redis面试题,看这篇就够了!
  9. 【心电信号】基于matlab NLM时间序列心电信号去噪【含Matlab源码 1547期】
  10. Asp.Net 4.0 新特性,输出更纯净的Html代码 ClientIDMode,ViewStateMode等
  11. Lambda表达式 对List集合去重
  12. Android 动态获取控件的宽高,并动态设置控件宽高
  13. 万彩办公大师多页PDF文档去掉空白部分合并到同一页
  14. [附源码]计算机毕业设计JAVA旅游管理系统
  15. 计算机机械硬盘的一个扇区,机械硬盘分区结构
  16. 企业网站seo优化有什么禁忌?
  17. 「解决方案」企业能源管控平台
  18. JavaScript之算法
  19. stm32驱动微雪墨水屏1.54inch e-Paper V2
  20. 全志H6开发板香橙派OrangePi 3 LTS在 Linux系统中安装Home Assistant的方法(上篇)

热门文章

  1. 运筹优化(三)--线性规划之单纯形法
  2. 2022 年考研数据结构_6 图
  3. python装饰器是什么意思_对Python装饰器的理解
  4. 电路——I/O口定时翻转电平驱动蜂鸣器注意事项
  5. Spring Boot -logback 使用
  6. ckeditor 触发事件(案例)
  7. Linux下处理BOM头和^M的简单方法
  8. 谈Dreamweaver和Webstorm
  9. [原译]一步步教你制作WPF圆形玻璃按钮
  10. open*** 跨平台部署