300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Unity 角色控制器重复使用Ragdoll布娃娃系统 动画控制和布娃娃状态切换

Unity 角色控制器重复使用Ragdoll布娃娃系统 动画控制和布娃娃状态切换

时间:2021-02-22 00:04:40

相关推荐

Unity 角色控制器重复使用Ragdoll布娃娃系统 动画控制和布娃娃状态切换

大家好,今天开发游戏的时候做了Ragdoll相关的功能,于是写写心得。

如果要在单一物体重复使用Ragdoll布娃娃系统,那我们需要对物体设置两个状态,一个是正常状态,受动画系统控制,一个是布娃娃状态,受布娃娃节点控制。(Unity开发环境.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>()){//排除正常状态的Rigidbodycontinue;}//添加Rigidbody和Collider到ListRagdollRigidbodys.Add(Rigidbodys[i]);Rigidbodys[i].isKinematic = true;Collider RagdollCollider = Rigidbodys[i].gameObject.GetComponent<Collider>();RagdollCollider.isTrigger = true;RagdollColliders.Add(RagdollCollider);}}

当角色死亡或击倒时,执行启用布娃娃系统

void EnableRagdoll(){//开启布娃娃状态的所有Rigidbody和Colliderfor (int i = 0; i < RagdollRigidbodys.Count; i++){RagdollRigidbodys[i].isKinematic = false;RagdollColliders[i].isTrigger = false;}//关闭正常状态的ColliderGetComponent<Collider>().enabled = false;//下一帧关闭正常状态的动画系统StartCoroutine(SetAnimatorEnable(false));}

当角色复活或站起来时,关闭布娃娃系统

void DisableRagdoll(){//关闭布娃娃状态的所有Rigidbody和Colliderfor (int i = 0; i < RagdollRigidbodys.Count; i++){RagdollRigidbodys[i].isKinematic = true;RagdollColliders[i].isTrigger = true;}//开启正常状态的ColliderGetComponent<Collider>().enabled = true;//下一帧开启正常状态的动画系统StartCoroutine(SetAnimatorEnable(true));}

延迟一帧执行开关动画状态

IEnumerator SetAnimatorEnable(bool Enable){yield return new WaitForEndOfFrame();Anim.enabled = Enable;}

注:Anim是Animator

By 杨天睿TeraYang

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。