kindezen

안녕하세요. 각 캐릭터마다 어깨 너비를 기준으로 몸의 근육과 몸집을 구분하고자 사진과 같이 구현하였습니다.

TC_LeftShoulder, TC_RightShoulder는 각각 해당 Skeleton의 TransformConstraint 입니다.
Show_OffsetX_L, Show_OffsetX_R은 데이터를 직접 확인하고자 만든 float 필드입니다.

캐릭터 하나만 두고 하면 잘 되는데 여러명을 배치하게 되면 이상하게 적용됩니다.

1. 캐릭터 별로 Offset 값을 확인했을 때, 인스턴스마다 고유의 값을 가지는 것을 확인했습니다.

2. Offset 값에 따라서 스킨 변경은 제대로 작동 됩니다.

3. 캐릭터 형태가 자신의 Offset 값에 반응하지 않고 다른 캐릭터의 Offset 값에 반응하는 경우가 나타납니다. (첨부한 사진이 그 예시입니다. 첫번째 캐릭터는 형태가 자신의 Offset에 반응하지 않고 두번째 캐릭터의 Offset에 반응합니다.)

게임의 핵심이어서 해결하고 싶습니다. 답변 부탁드립니다!
添付ファイルを見るにはパーミッションが必要です
kindezen
  • 記事: 3

Harald

여기서bone.Data.OffsetX를 수정하고 있습니다. 이름에 'data'가있는 모든 것은 단일 인스턴스의 매개 변수가 아닌 공유 스켈레톤 데이터에 액세스합니다. 따라서 귀하의 경우에는bone.Data.OffsetX를 설정하지 말고 대신bone.X를 설정하여 로컬 뼈 X 오프셋을 조정하십시오.

기본 디자인과 API 사용 방법을 이해하려면 여기에서 '데이터 개체'및 '인스턴스 개체'에 대한 문서를 참조하세요.
Runtime Architecture - Spine Runtimes Guide: Data objects

Update ()에서 본 위치 수정에 관하여 :
애니메이션 중 하나라도bone.X 오프셋을 수정하는 경우 여기에 설명 된대로SkeletonAnimation.UpdateLocal 콜백 델리게이트를 사용해야합니다.
spine-unity Runtime Documentation: Life cycle
// 업데이트 본 위치 델리게이트 메서드
void AdjustLocalBoneLocations (ISkeletonAnimation anim) {
// 로컬 애니메이션 업데이트가 완료된 후에 호출됩니다.
bone.X = ..;
}

// 델리게이트 메소드 등록
void Start () {
skeletonAnimation.UpdateLocal-= AdjustLocalBoneLocations;
skeletonAnimation.UpdateLocal + = AdjustLocalBoneLocations;
}
-----

You are modifying bone.Data.OffsetX here. Anything with data in its name is accessing shared skeleton data, not a single instance's parameters. So for your case, don't set bone.Data.OffsetX but instead set bone.X to adjust local bone X offset.

Please see the documentation about Data objects and Instance objects here to understand the basic design and how the API shall be used:
Runtime Architecture - Spine Runtimes Guide: Data objects

Regarding modifying bone location in Update():
If any of your animations are also modifying the bone.X offset, you need to use the SkeletonAnimation.UpdateLocal callback delegate as described here:
spine-unity Runtime Documentation: Life cycle
// your update bone location delegate method
void AdjustLocalBoneLocations (ISkeletonAnimation anim) {
// this is called after local animation updates have been completed.
bone.X = ..;
}

// register your delegate method
void Start() {
skeletonAnimation.UpdateLocal -= AdjustLocalBoneLocations;
skeletonAnimation.UpdateLocal += AdjustLocalBoneLocations;
}
アバター
Harald

Harri
  • 記事: 3353

kindezen

감사합니다! 덕분에 해결했습니다.
kindezen
  • 記事: 3

Harald

천만에요.
You're welcome.
アバター
Harald

Harri
  • 記事: 3353


Return to 한국어 Spine 사용자