Spine Skeleton의 이미지를 전환하는 방법 (Unity)
소개
Spine에서 본은 공통으로 스킨만을 바꾸고 싶을 때가 있으므로, 그 방법의 메모입니다.
(SpineUnityRunTime 버전은 4.0입니다)
스킨 이미지에 Spine Atlas용 이미지 프리셋 적용
평소와 같이 이미지를 추가한 경우 저작물을 Texture로 가져올 수 없으므로 해결 방법을 작성합니다.
(Unity는 2D 프로젝트이며 뭔가 설정이 잘못되었을 수 있습니다)
Spine 매뉴얼대로 각종 데이터를 추가한 경우의 이미지는 올바른 설정으로 추가되는 것 같습니다.
여기에서 설정을 사전 설정으로 저장하고,
추가한 이미지도 같은 버튼에서 프리셋을 적용할 수 있습니다.
설정을 동일하게 함으로써 문제 없이 이미지를 사용할 수 있었습니다.
SkeletonAnimation의 경우
이것은 2D 월드 공간에서 해골을 표시하는 데 사용되는 구성 요소입니다.
다음 확장 메소드를 정의하고,
public static class SpineExtension {
public static void SetAtlasTexture(this SkeletonAnimation skeletonAnimation, string materialName, Texture texture) {
foreach (var atlas in skeletonAnimation.skeletonDataAsset.atlasAssets) {
foreach (var mat in atlas.Materials) {
if (mat.name == materialName) {
var newMat = new Material(mat) {
mainTexture = texture
};
skeletonAnimation.CustomMaterialOverride[mat] = newMat;
}
}
}
}
}
전화할 때는
[SerializeField] SkeletonAnimation _skeletonAnimation;
var texture = Resources.Load<Texture>("chara2");
_skeletonAnimation.SetAtlasTexture("chara_Material", texture);
로 스킨을 바꿀 수 있었습니다.
SkeletonGraphic의 경우
이것은 UiCanvas에서 해골을 표시하고자 할 때 사용하는 구성 요소입니다.
아틀라스가 하나라면
이 경우는 OverrideTexture 프로퍼티로 새로운 텍스처를 세트 하면 괜찮을까 생각합니다.
skeletonGraphic.OverrideTexture = texture;
아틀라스가 여러 개 있는 경우
Multiple CanvasRenderers에 체크 표시
확장 함수 구현
public static class SpineExtension {
public static void SetAtlasTexture(this SkeletonGraphic skeletonGraphic, string materialName, Texture texture) {
skeletonGraphic.allowMultipleCanvasRenderers = true;
skeletonGraphic.OverrideTexture = texture;
foreach (var atlas in skeletonGraphic.skeletonDataAsset.atlasAssets) {
foreach (var mat in atlas.Materials) {
if (mat.name == materialName) {
skeletonGraphic.CustomTextureOverride[mat.mainTexture] = texture;
}
}
}
}
}
호출시
[SerializeField] SkeletonGraphic _skeletonGraphic;
var texture = Resources.Load<Texture>("chara2");
_skeletonGraphic.SetAtlasTexture("chara_Material", texture);
Reference
이 문제에 관하여(Spine Skeleton의 이미지를 전환하는 방법 (Unity)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/KyoheiOkawa/items/152ecf2f71de4c6b55f6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
평소와 같이 이미지를 추가한 경우 저작물을 Texture로 가져올 수 없으므로 해결 방법을 작성합니다.
(Unity는 2D 프로젝트이며 뭔가 설정이 잘못되었을 수 있습니다)
Spine 매뉴얼대로 각종 데이터를 추가한 경우의 이미지는 올바른 설정으로 추가되는 것 같습니다.
여기에서 설정을 사전 설정으로 저장하고,
추가한 이미지도 같은 버튼에서 프리셋을 적용할 수 있습니다.
설정을 동일하게 함으로써 문제 없이 이미지를 사용할 수 있었습니다.
SkeletonAnimation의 경우
이것은 2D 월드 공간에서 해골을 표시하는 데 사용되는 구성 요소입니다.
다음 확장 메소드를 정의하고,
public static class SpineExtension {
public static void SetAtlasTexture(this SkeletonAnimation skeletonAnimation, string materialName, Texture texture) {
foreach (var atlas in skeletonAnimation.skeletonDataAsset.atlasAssets) {
foreach (var mat in atlas.Materials) {
if (mat.name == materialName) {
var newMat = new Material(mat) {
mainTexture = texture
};
skeletonAnimation.CustomMaterialOverride[mat] = newMat;
}
}
}
}
}
전화할 때는
[SerializeField] SkeletonAnimation _skeletonAnimation;
var texture = Resources.Load<Texture>("chara2");
_skeletonAnimation.SetAtlasTexture("chara_Material", texture);
로 스킨을 바꿀 수 있었습니다.
SkeletonGraphic의 경우
이것은 UiCanvas에서 해골을 표시하고자 할 때 사용하는 구성 요소입니다.
아틀라스가 하나라면
이 경우는 OverrideTexture 프로퍼티로 새로운 텍스처를 세트 하면 괜찮을까 생각합니다.
skeletonGraphic.OverrideTexture = texture;
아틀라스가 여러 개 있는 경우
Multiple CanvasRenderers에 체크 표시
확장 함수 구현
public static class SpineExtension {
public static void SetAtlasTexture(this SkeletonGraphic skeletonGraphic, string materialName, Texture texture) {
skeletonGraphic.allowMultipleCanvasRenderers = true;
skeletonGraphic.OverrideTexture = texture;
foreach (var atlas in skeletonGraphic.skeletonDataAsset.atlasAssets) {
foreach (var mat in atlas.Materials) {
if (mat.name == materialName) {
skeletonGraphic.CustomTextureOverride[mat.mainTexture] = texture;
}
}
}
}
}
호출시
[SerializeField] SkeletonGraphic _skeletonGraphic;
var texture = Resources.Load<Texture>("chara2");
_skeletonGraphic.SetAtlasTexture("chara_Material", texture);
Reference
이 문제에 관하여(Spine Skeleton의 이미지를 전환하는 방법 (Unity)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/KyoheiOkawa/items/152ecf2f71de4c6b55f6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
public static class SpineExtension {
public static void SetAtlasTexture(this SkeletonAnimation skeletonAnimation, string materialName, Texture texture) {
foreach (var atlas in skeletonAnimation.skeletonDataAsset.atlasAssets) {
foreach (var mat in atlas.Materials) {
if (mat.name == materialName) {
var newMat = new Material(mat) {
mainTexture = texture
};
skeletonAnimation.CustomMaterialOverride[mat] = newMat;
}
}
}
}
}
[SerializeField] SkeletonAnimation _skeletonAnimation;
var texture = Resources.Load<Texture>("chara2");
_skeletonAnimation.SetAtlasTexture("chara_Material", texture);
이것은 UiCanvas에서 해골을 표시하고자 할 때 사용하는 구성 요소입니다.
아틀라스가 하나라면
이 경우는 OverrideTexture 프로퍼티로 새로운 텍스처를 세트 하면 괜찮을까 생각합니다.
skeletonGraphic.OverrideTexture = texture;
아틀라스가 여러 개 있는 경우
Multiple CanvasRenderers에 체크 표시
확장 함수 구현
public static class SpineExtension {
public static void SetAtlasTexture(this SkeletonGraphic skeletonGraphic, string materialName, Texture texture) {
skeletonGraphic.allowMultipleCanvasRenderers = true;
skeletonGraphic.OverrideTexture = texture;
foreach (var atlas in skeletonGraphic.skeletonDataAsset.atlasAssets) {
foreach (var mat in atlas.Materials) {
if (mat.name == materialName) {
skeletonGraphic.CustomTextureOverride[mat.mainTexture] = texture;
}
}
}
}
}
호출시
[SerializeField] SkeletonGraphic _skeletonGraphic;
var texture = Resources.Load<Texture>("chara2");
_skeletonGraphic.SetAtlasTexture("chara_Material", texture);
Reference
이 문제에 관하여(Spine Skeleton의 이미지를 전환하는 방법 (Unity)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/KyoheiOkawa/items/152ecf2f71de4c6b55f6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)