부자 관계를 변경할 때 변환하는 처리 방법

3344 단어 UnityVRChat

변환값 반환 현상


Unity는 Game Object의 부자 관계를 바꾸더라도 세계 좌표를 유지하기 때문에 위치와 각도는 일반적으로 변하지 않는다.
그러나 VRChat의 화신 등에서 Game Object의 부자 관계를 바꾸면 국부 좌표가 유지되고 세계 좌표의 위치와 각도에 이상한 현상이 발생한다.
이런 느낌인데.

※ 아내가 조정한실비아 씨 이미지 변경
며칠 전 제가 발표한 치마 Dynamic Bone 설정 보조 도구「SkirtSupporter」에 이런 현상이 발생했습니다.(수정됨)
아니오, 그 전에 다이나믹 본 드레스 이론을 발표했는데 그중에서도 이런 현상이 발생할 수 있습니다.
그거 생각하면 미안해.
우리가 이 현상을 깊이 연구했을 때, 우리는 그 중의 Dynamic Bone이 원인이 있다는 것을 발견했다.
무엇이 필요한지 모르겠지만 동적 골격의 시각화 기능은 내부에 유지되는 국부 좌표를 다시 써서 변환하는 과정을 포함한다.

손 조작 발생 시 대처법 1


이름이 X인 GameObject의 상위 항목을 A에서 B로 변경하려는 경우
전제 조건은 장면의 어느 위치에 뿌리에'X'DynamicBone이 있어야 한다는 것이다.대부분의 경우 "X"자체가 있고 다른 Game Object도 마찬가지입니다.
문제가 발생한 후 처리할 수 없습니다. Ctrl+Z 또는 사전 조립식 Revert 등 복구 상태에서 시작하십시오.
  • 해당 동적 Bone의 루트에 다른 객체를 설정합니다(부 객체는 아님)
  • X를 A에서 B로 이동
  • DynamicBone 루트를 X로 복원
  • 이렇게 하면 돼.

    손 조작 발생 시 처리 방법 2


    친자관계를 변경하고 싶은 대상이 많아 처리 방법 1에서 번거롭다.
    동적 골격 스크립트를 잠시 다시 쓰겠습니다.
    DynamicBone.cs
        void OnDrawGizmosSelected()
        {
            if (!enabled || m_Root == null)
                return;
    
            if (Application.isEditor && !Application.isPlaying && transform.hasChanged)
            {
                //InitTransforms();   <- 一時的にコメントアウト
                SetupParticles();
            }
               :
               :
    
    225줄마다 OnDrawGizmosSelects의 InitTransforms();문서 레지스트리에 항목을 추가합니다.
    이렇게 하면 GameObject를 참조할 때 다시 쓰기가 발생하지 않습니다.
    부자 관계를 변경하십시오.
    그러나 이렇게 도구의 코드를 파괴하는 것은 절대 바람직하지 않다.
    친자관계 변경이 끝난 후에는 반드시 원상태로 회복해 주십시오.

    스크립트 처리 방법


    그러면 편집기 등 스크립트를 구성하려는 상황에서
    결론은 Dynamic Bone의 코드를 파괴하지 않고 근본적으로 대응할 방법이 없다는 것이다.
    외부 작업을 통해 내부의 "p.m_InitLocalPosition""p.m_InitLocalRotation"값을 업데이트할 수 있다면...
    현재 이 값들을 다시 쓸 수 있는 일반적인 방법은 없다.
    좋은 방법이 있으면 알려주세요.
    우선 처리 방법은'변경 전후의 부모의 세계 좌표를 완전히 일치하게 하는 것'이다.
    부모 좌표가 일치하면 국부 좌표를 다시 쓸 수 있습니다.
    목표를 변경하는 Game Object 아래에 Game Object를 추가하여position과rotation(모두 세계 좌표)이 변경 전의 부모와 일치하도록 하고 그곳으로 이동합니다.

    좋은 웹페이지 즐겨찾기