unity 布娃娃系统的开启关闭

unity 布娃娃系统的开启关闭_第1张图片
unity 布娃娃系统的开启关闭_第2张图片using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RangdollController : MonoBehaviour {

private Animator Anim;
// Use this for initialization
void Start () {
    Anim = GetComponent();
    InitRagdoll();
}

// Update is called once per frame
void Update () {
	
}

public List RagdollRigidbodys = new List();
public List RagdollColliders = new List();
/// 
/// 初始化,遍历角色身体上的所有ragdoll并存储 此时关闭布娃娃系统
/// 
void InitRagdoll()
{
    Rigidbody[] Rigidbodys = GetComponentsInChildren();
    for (int i = 0; i < Rigidbodys.Length; i++)
    {
        if (Rigidbodys[i] == GetComponent())
        {
            //排除正常状态的Rigidbody
            continue;
        }
        //添加Rigidbody和Collider到List
        RagdollRigidbodys.Add(Rigidbodys[i]);
        Rigidbodys[i].isKinematic = true;
        Collider RagdollCollider = Rigidbodys[i].gameObject.GetComponent();
        RagdollCollider.isTrigger = true;
        RagdollColliders.Add(RagdollCollider);
    }
}
/// 
/// 启动布娃娃系统
/// 
public void EnableRagdoll()
{
    //开启布娃娃状态的所有Rigidbody和Collider
    for (int i = 0; i < RagdollRigidbodys.Count; i++)
    {
        RagdollRigidbodys[i].isKinematic = false;
        RagdollColliders[i].isTrigger = false;
    }
    //关闭正常状态的Collider
    GetComponent().enabled = false;
    //下一帧关闭正常状态的动画系统
    StartCoroutine(SetAnimatorEnable(false));
}
/// 
/// 关闭布娃娃系统
/// 
public void DisableRagdoll()
{
    //关闭布娃娃状态的所有Rigidbody和Collider
    for (int i = 0; i < RagdollRigidbodys.Count; i++)
    {
        RagdollRigidbodys[i].isKinematic = true;
        RagdollColliders[i].isTrigger = true;
    }
    //开启正常状态的Collider
    GetComponent().enabled = true;
    //下一帧开启正常状态的动画系统
    StartCoroutine(SetAnimatorEnable(true));
}
IEnumerator SetAnimatorEnable(bool Enable)
{
    yield return new WaitForEndOfFrame();
    Anim.enabled = Enable;
}

}

你可能感兴趣的:(unity)