10
28

 

유니티 래그돌 적용법

 

1. 뼈대 Bone에 Ragdoll를 추가

 

 

 

맨 오른쪽 사진와 같은 창이 뜰텐데,

 

본인 뼈구조에 맞는 뼈 오브젝트를 넣으면 된다.

 

해당 뼈가 없을 경우 중복되지않게만 유사한 뼈를 넣어주면 됨.

 

해당 뼈에 컴포넌트(리지드바디, 캐릭터조인트, 콜라이더)가 생성된 것을 확인할 수 있다.

 

2. 스크립트

 

래그돌은 이벤트(죽을때 등등)가 있을 때만 작동하여야한다.

 

첨부터 래그돌이 적용되어선 안된다.

    public GameObject skeleton;
    void Start()
    {
            setRigidbodyState(true);
            setColliderState(false);
    }

    void setRigidbodyState(bool state)
    {
// 뼈 안에 있는 리지드바디 상태를 제어한다.
        Rigidbody[] rigidbodies = skeleton.GetComponentsInChildren<Rigidbody>();
        foreach(Rigidbody rigidbody in rigidbodies)
        {
            rigidbody.isKinematic = state;
        }
    }

    void setColliderState(bool state)
    {
// 뼈 안에 있는 콜라이더 상태를 제어한다.
        Collider[] colliders = skeleton.GetComponentsInChildren<Collider>();
        foreach (Collider collider in colliders)
        {
            collider.enabled= state;
        }
    }

 

setRigidbodyState()의 경우 iskinematic,

isKinematic이 활성화 되어있는 경우에, 힘, 충돌 또는 조인트등의

물리효과가 리지드바디에 영향을 주지 않는다. 그래서 초기값 true

setColliderState는 그냥 콜라이더 끄나 안끄냐 이기때문에 초기값 false로 해주고

죽었을때만 반대로 해주는 함수를 해주면 된다.

 

    void DestroyRPC()
    {
        gameObject.GetComponent<Animator>().enabled = false;
        Destroy(gameObject, 5f);
        setRigidbodyState(false);
        setColliderState(true);
    }

 

애니메이터도 반드시 꺼줘야함.

 

좀 더 화끈하게 죽는 걸 원하면 Addforce로 밀쳐내는 효과를 주던지 하면 더 좋을듯

 

COMMENT