It's working OK now. Thanks for helping me. 🙂
I modified "SkeletonDataAsset.cs" like below.
protected SkeletonData skeletonData;
public SkeletonData GetSkeletonData(bool quiet)
{
// if (atlasAssets == null)
// {
// atlasAssets = new AtlasAsset[0];
// if (!quiet)
// Debug.LogError("Atlas not set for SkeletonData asset: " + name, this);
// Reset();
// return null;
// }
// if (skeletonJSON == null)
// {
// if (!quiet)
// Debug.LogError("Skeleton JSON file not set for SkeletonData asset: " + name, this);
// Reset();
// return null;
// }
//#if !SPINE_TK2D
// if (atlasAssets.Length == 0)
// {
// Reset();
// return null;
// }
//#else
// if (atlasAssets.Length == 0 && spriteCollection == null) {
// Reset();
// return null;
// }
//#endif
// Atlas[] atlasArr = new Atlas[atlasAssets.Length];
// for (int i = 0; i < atlasAssets.Length; i++)
// {
// if (atlasAssets[i] == null)
// {
// Reset();
// return null;
// }
// atlasArr[i] = atlasAssets[i].GetAtlas();
// if (atlasArr[i] == null)
// {
// Reset();
// return null;
// }
// }
// if (skeletonData != null)
// return skeletonData;
// AttachmentLoader attachmentLoader;
// float skeletonDataScale;
//#if !SPINE_TK2D
// attachmentLoader = new AtlasAttachmentLoader(atlasArr);
// skeletonDataScale = scale;
//#else
// if (spriteCollection != null) {
// attachmentLoader = new SpriteCollectionAttachmentLoader(spriteCollection);
// skeletonDataScale = (1.0f / (spriteCollection.invOrthoSize * spriteCollection.halfTargetHeight) * scale) * 100f;
// } else {
// if (atlasArr.Length == 0) {
// Reset();
// if (!quiet) Debug.LogError("Atlas not set for SkeletonData asset: " + name, this);
// return null;
// }
// attachmentLoader = new AtlasAttachmentLoader(atlasArr);
// skeletonDataScale = scale;
// }
//#endif
// try
// {
// //var stopwatch = new System.Diagnostics.Stopwatch();
// if (skeletonJSON.name.ToLower().Contains(".skel"))
// {
// var input = new MemoryStream(skeletonJSON.bytes);
// var binary = new SkeletonBinary(attachmentLoader);
// binary.Scale = skeletonDataScale;
// //stopwatch.Start();
// skeletonData = binary.ReadSkeletonData(input);
// }
// else
// {
// var input = new StringReader(skeletonJSON.text);
// var json = new SkeletonJson(attachmentLoader);
// json.Scale = skeletonDataScale;
// //stopwatch.Start(;)
// skeletonData = json.ReadSkeletonData(input);
// }
// //stopwatch.Stop();
// //Debug.Log(stopwatch.Elapsed);
// }
// catch (Exception ex)
// {
// if (!quiet)
// Debug.LogError("Error reading skeleton JSON file for SkeletonData asset: " + name + "\n" + ex.Message + "\n" + ex.StackTrace, this);
// return null;
// }
stateData = new AnimationStateData(skeletonData);
//FillStateData();
return skeletonData;
}
and defined "CustomSkeletonDataAsset" class which inherits "SkeletonDataAsset" class.
public class CustomSkeletonDataAsset : SkeletonDataAsset
{
public void SetSkeletonData(SkeletonData skelData)
{
skeletonData = skelData;
}
}
Now I use "CustomSkeletonDataAsset" like below.
var customSkeletonDataAsset = ScriptableObject.CreateInstance<CustomSkeletonDataAsset>();
customSkeletonDataAsset.SetSkeletonData(skeletonData);
var skelAnim = gameObject.AddComponent<SkeletonAnimation>();
skelAnim.skeletonDataAsset = customSkeletonDataAsset;
skelAnim.Reset();
var weapon = loader.NewRegionAttachment(null, "weapon", "weapon");
weapon.UpdateOffset();
skelAnim.skeleton.FindSlot("Weapon").attachment = weapon;
But I found that the skeleton had't been shown in the scene. I made sure the number of vertices had increased, so supposed the width and height of attachments had NOT been set properly.
So I added 2 lines in "AtlasAttachmentLoader.cs".
public RegionAttachment NewRegionAttachment (Skin skin, String name, String path)
{
AtlasRegion region = FindRegion(path);
if (region == null) throw new Exception("Region not found in atlas: " + path + " (region attachment: " + name + ")");
RegionAttachment attachment = new RegionAttachment(name);
attachment.RendererObject = region;
attachment.SetUVs(region.u, region.v, region.u2, region.v2, region.rotate);
attachment.regionOffsetX = region.offsetX;
attachment.regionOffsetY = region.offsetY;
attachment.regionWidth = region.width;
attachment.regionHeight = region.height;
attachment.regionOriginalWidth = region.originalWidth;
attachment.regionOriginalHeight = region.originalHeight;
attachment.width = region.width; //added.
attachment.height = region.height; //added.
return attachment;
}
Finally can have 1 draw call.