Unity 角色控制器重复使用Ragdoll布娃娃系统,动画控制和布娃娃状态切换
2023-06-13 09:15:15 时间
大家好,又见面了,我是你们的朋友全栈君。
大家好,今天开发游戏的时候做了Ragdoll相关的功能,于是写写心得。
如果要在单一物体重复使用Ragdoll布娃娃系统,那我们需要对物体设置两个状态,一个是正常状态,受动画系统控制,一个是布娃娃状态,受布娃娃节点控制。(Unity开发环境2018.4 LTS)
预览效果:
分为几个部分:
首先是初始化,我们要遍历角色身体上的所有ragdoll并存储。
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] == GetComponent<Rigidbody>())
{
//排除正常状态的Rigidbody
continue;
}
//添加Rigidbody和Collider到List
RagdollRigidbodys.Add(Rigidbodys[i]);
Rigidbodys[i].isKinematic = true;
Collider RagdollCollider = Rigidbodys[i].gameObject.GetComponent<Collider>();
RagdollCollider.isTrigger = true;
RagdollColliders.Add(RagdollCollider);
}
}
当角色死亡或击倒时,执行启用布娃娃系统
void EnableRagdoll()
{
//开启布娃娃状态的所有Rigidbody和Collider
for (int i = 0; i < RagdollRigidbodys.Count; i++)
{
RagdollRigidbodys[i].isKinematic = false;
RagdollColliders[i].isTrigger = false;
}
//关闭正常状态的Collider
GetComponent<Collider>().enabled = false;
//下一帧关闭正常状态的动画系统
StartCoroutine(SetAnimatorEnable(false));
}
当角色复活或站起来时,关闭布娃娃系统
void DisableRagdoll()
{
//关闭布娃娃状态的所有Rigidbody和Collider
for (int i = 0; i < RagdollRigidbodys.Count; i++)
{
RagdollRigidbodys[i].isKinematic = true;
RagdollColliders[i].isTrigger = true;
}
//开启正常状态的Collider
GetComponent<Collider>().enabled = true;
//下一帧开启正常状态的动画系统
StartCoroutine(SetAnimatorEnable(true));
}
延迟一帧执行开关动画状态
IEnumerator SetAnimatorEnable(bool Enable)
{
yield return new WaitForEndOfFrame();
Anim.enabled = Enable;
}
注:Anim是Animator
By 杨天睿TeraYang
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/234594.html原文链接:https://javaforall.cn
相关文章
- 35. 传输层TCP协议十大主要特性(5-6) —— 流量控制 / 拥塞控制
- 并发控制--悲观锁和乐观锁详解
- 【嵌入式开发】ARM 看门狗 Watchdog ( 看门狗概念 | 看门狗原理 | 时钟控制寄存器 | 定时器数据寄存器 | 定时器计数寄存器 | 定时器中断清理寄存器 | 关闭看门狗代码编写 )
- 【Groovy】循环控制 ( Java 语法循环 | 默认的 IntRange 构造函数 | 可设置翻转属性的 IntRange 构造函数 | 可设置是否包含 to 的构造函数 | 0..9 简写 )
- 不要让框架控制你的项目,过度依赖框架会害了你
- JS控制文本框只能输入数字和小数点详解编程语言
- 行Linux 驱动调整:命令行控制显卡(linux显卡命令)
- javascript tweenmax时间轴动画控制详解编程语言
- 控制使用Redis实现Java有效过期控制(redisjava过期)
- 控制Oracle 日志大小控制:实现最优体积管理(oracle日志大小)
- 远程控制Redis实现远程读写(远程redis读写)
- 服务指定端口启动Redis服务精准控制更便捷(指定端口启动redis)
- Oracle事务控制语句实现数据安全事务处理(oracle事物控制语句)
- 在这个“未来工厂”里, 人类仅凭脑电波控制机器
- JS控制图片翻转示例代码(兼容firefox,ie,chrome)