Cocos Creator Spine動畫產生位移時,動畫位置獲取問題 (root的使用)


版本:2.3.4

參考:

CSDN Unity-Spine動畫位移問題

CNBolg 使用Spine動畫制作動作游戲

 

網上搜了一下Spine動畫位置的解決方案,參考了兩篇文章吧。在制作spine動作時,不可避免的動畫會產生位置,動畫師不能一直將動畫固定在原地。

比如跑步動畫,這個可以原地踏步,動畫做在原地就行了。

 

但是做出攻擊,或者一些炫酷動作時,難免會產生位移。這個位移可能是曲線的,非線性運動,直接讓程序或者策划去微調出和動畫師制作的一樣效果有些困難。

例如如下攻擊動畫。人物位置移動了,但是動畫位置還在原地呢。這樣做碰撞檢測或者其他位置相關判斷的時候,還在檢測原地的位置,這顯然是不合適的。

 

 

這個解決方案就是讓動畫師制作動畫時,讓根骨骼root跟隨動畫一起移動。

下圖root根骨骼就是人物腳下那個十字圖標

 

在cocos中獲取root的位置。在做位置相關判斷時,加上root的位置就行了。

    start() {
       let sk:sp.Skeleton = this.hero.getComponent(sp.Skeleton);
       sk.setAnimation(0,"attack1_1",true);

       let root = sk.findBone("root");
       let rootX = root.x;
       let rootY = root.y;
       console.log("root位置:",rootX , rootY);
       console.log("動畫位置:",sk.node.x + rootX, sk.node.y + rootY);
    }

  

如果要在人物身上掛載碰撞BoxCollider,選擇骨骼動畫,點擊生成掛點。

 

 

生成掛點,會顯示人物的骨骼樹

 

 

我們在root下掛上一個BoxCollider做碰撞檢測

 

 

在代碼里顯示碰撞檢測debugDraw

    onLoad(){
        var manager = cc.director.getCollisionManager();
        manager.enabled = true;
        manager.enabledDebugDraw = true;
    }

 

運行游戲,可以看到碰撞檢測的BoxCollider掛載root上后,是和人物顯示的位置是一致的。

這樣做使用BoxCollider做碰撞檢測,就不用擔心spine動畫里有位移了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM