モーリーのメモ

アプリ開発等(プログラミング、CG作成)、興味を持ったことを実践してまとめるブログです。

モーリーのメモ

マリオみたいな2Dアクションゲームを作る! その9 コインのプレハブ(Prefab)を作成する:Cocos Creator

 ◆ Cocos Creatorスーパーマリオみたいな2Dアクションゲームを作ります。◆
 ◆ このシリーズの他の記事を見るには『PlatformerGame』タグをクリックして下さい。◆
 ◆ 最初から読みたい場合はココをクリックして下さい。◆
 
 こちらの記事の続きです。

 
 今回は、ステージに設置するコインを作成します。
 コインは複数設置するので、Cocos Creatorのプレハブ(Prefab)という機能を使います。
 
【 注意 】この記事で使用しているCocos Creator v2.3.3は、VS Codeデバッグ実行でブレークポイントが機能しないバグがあので、v.2.3.2を使用して下さい。
 v.2.3.2は、Cocos DashboardのEditorのDownloadボタンからインストール出来ます。
 既存のプロジェクトのEditor Versionは、下図のように切り替えます。一度確認のメッセージが表示されます。
    f:id:mmorley:20200422191834p:plain

使用環境

 私が使用している環境です。

コインの実装方法

 プレハブ(Prefab)という機能を利用して、コインを作成します。
 プレハブは"事前に編集したオブジェクト"の型です。同じ機能を持ったオブジェクトをシーンに複数配置する時に使用します。
 
 下記のように実装します。

  • 2つのアニメーションを作成します。
    • 上下にわずかに揺れる(往復移動する)アニメーションを追加します。
    • プレイヤーが取得した際に徐々に透明になるアニメーションを追加します。
  • 接触判定用のコライダーを設定します。
  • プレイヤーが取得した際に自ノードを削除します。
  • 子ノードを作ってアニメーションを設定します。
     移動するアニメーションで指定する座標は、親ノードの座標系です。
     子ノードを作らなかった場合、コインの親はステージです。
     この場合、(0, 0)から(0, 32)に移動するアニメーションは、ステージの(0, 0)から(0, 32)に移動します。
     従って、コインをいろいろな場所に設置しても、アニメーションが始まると全てステージの(0, 0)から(0, 32)に移動することになります。
     これを防ぐため、"アニメーションするノード"の親ノードとして空のノードを作成します。
    • ステージのノード
      • 空のノード:プレハブでは一番上の階層
        • アニメーションするノード

コインのノードを作成する

 プレハブはシーンの中で作成します。
 ノードを編集してから最後にプレハブにします。
 空のノードを作成して、その子ノードにコインの機能を実装していきます。
 

    Windows、Cocos Creatorで作業

  1. Windowsエクスプローラーで下記のフォルダ選択して、『Assets』パネルの『texture』にドラッグ&ドロップします。
    • Platformer Pack Redux (360 assets)\PNG\items\coinGold.png
      その1で入手した画像素材ファイルです。
    f:id:mmorley:20200424105819p:plain

    Cocos Creatorで作業

  2. 『Node Tree』パネルで『Canvas』を右クリック→『Create』→『Create Empty Nodes』をクリックしてノードを作成し、名前を”coinGold”にします。
    f:id:mmorley:20200424110819p:plain
  3. 『Assets』パネルから『coinGold』を『Node Tree』パネルにドラッグ&ドロップします。
    f:id:mmorley:20200424112015p:plain
  4. 『Node Tree』パネルで『Canvas/coinGold/coinGold』を選択して、『Properties』パネルの『Add Component』→『Other Component』→『Animation』をクリックします。
    f:id:mmorley:20200420151428p:plain

コインが跳ねるアニメーションを作成する

 ステージ上でコインが静止しているのはさみしいので跳ねるようにします。

    f:id:mmorley:20200424212900g:plain
 

    Windows、Cocos Creatorで作業

  1. 『Timeline』パネルに切り替えて、『Create a new Clip file.』をクリックします。
    f:id:mmorley:20200424114116p:plain
  2. 『assets/animation』フォルダに”coinBouncing”と名前を付けて『保存』をクリックします。
    f:id:mmorley:20200424124514p:plain
  3. 『Timeline』パネルで『Open/Close Record mode』ボタンをクリックします。
    f:id:mmorley:20200424125718p:plain
  4. 『Timeline』パネルで『Add Property』→『position』をクリックします。
    f:id:mmorley:20200424130521p:plain
  5. 『Timeline』パネルで『coinGold』をクリックして選択して、タイムラインの赤線を『0:00』に置いた後、『position』の横の『≡』→『Insert keyframe』をクリックします。
    f:id:mmorley:20200424141438p:plain
    0:00の位置にキーフレームが追加されます。
  6. 続けて『0:05』と『0:10』の位置にキーフレームを追加します。
    f:id:mmorley:20200424164711p:plain
  7. 『Timeline』パネルでタイムラインの赤線を『0:05』に置いた後、『Properties』パネルで『Node』の『Position』を下図のように設定します。
    f:id:mmorley:20200424135851p:plain
    キーフレーム同士が青い線で結ばれます。
  8. 『Timeline』パネルで『WrapMode:』と『Sample:』を下図のように設定します。
    f:id:mmorley:20200424142307p:plain
  9. 『Timeline』パネルで『position』の列の『0:00』と『0:05』の間の青い線をダブルクリックして、タイムカーブエディタを開きます。
    f:id:mmorley:20200424143008p:plain
  10. タイムカーブの青い線の両端にある灰色の制御点をマウスでドラッグしてタイムカーブを下図のようにして、保存ボタンをクリックした後、閉じるボタンでエディタを閉じます。
    f:id:mmorley:20200424145905p:plain
  11. 『Timeline』パネルで『position』の列の『0:05』と『1:00』の間の青い線をダブルクリックして、タイムカーブエディタを開きます。
    f:id:mmorley:20200424152110p:plain
  12. タイムカーブの青い線の両端にある灰色の制御点をマウスでドラッグしてタイムカーブを下図のようにして、保存ボタンをクリックした後、閉じるボタンでエディタを閉じます。
    f:id:mmorley:20200424152351p:plain
    下図の『Play animation』ボタンを押すと、『Scene』パネルでアニメーションが再生されます。
    f:id:mmorley:20200421000121p:plain
  13. 『Scene』パネルで『Save』をクリックして『coinBouncing』を保存します。
    f:id:mmorley:20200424152937p:plain

コインが消えるアニメーションを作成する

 プレイヤーがコインを取得した際にコインがパッとではなく、ジワっと消えるようにします。

    f:id:mmorley:20200424214122g:plain
 
  1. 『Timeline』パネルで『+』をクリックします。
    f:id:mmorley:20200424153535p:plain
  2. 『assets/animation』フォルダに”coinFadeout”と名前を付けて『保存』をクリックします。
    f:id:mmorley:20200424153719p:plain
  3. 『Clip:』で『coinFadeout』を選択します。
    f:id:mmorley:20200424163538p:plain
  4. 『Timeline』パネルで『Add Property』→『opacity』をクリックします。
    f:id:mmorley:20200424164104p:plain
  5. 『Timeline』パネルで『coinGold』をクリックして選択して、タイムラインの赤線を『0:00』に置いた後、『opacity』の横の『≡』→『Insert keyframe』をクリックします。
    f:id:mmorley:20200424164435p:plain
  6. 続けて『0:10』の位置にキーフレームを追加します。
    f:id:mmorley:20200424164922p:plain
  7. 『Timeline』パネルでタイムラインの赤線を『0:10』に置いた後、『Properties』パネルで『Node』の『opacity』を下図のように設定します。
    f:id:mmorley:20200424165226p:plain
  8. 『Timeline』パネルでタイムラインの赤線を『0:10』に置いた後、『Insert frame's event』ボタンをクリックして、タイムラインに追加された白いマークをダブルクリックします。
    f:id:mmorley:20200424170703p:plain
  9. 『FUNCTION』に"destroyNode"と入力して、保存ボタンをクリックした後、閉じるボタンで閉じます。
    後でスクリプトに『destroyNode()』を定義します。
    f:id:mmorley:20200424171711p:plain
  10. 『Timeline』パネルで『Sample:』を下図のように設定します。
    f:id:mmorley:20200424173000p:plain
  11. 『Scene』パネルで『Save』をクリックして『coinFadeout』を保存します。
    f:id:mmorley:20200424152937p:plain
  12. 『Timeline』パネルで『Open/Close Record mode』ボタンをクリックします。
    f:id:mmorley:20200424125718p:plain

コインのデフォルトのアニメーションを設定する

 コインが最初から跳ねるアニメーションを再生するようにします。
 

  1. 『Node Tree』パネルで『Canvas/coinGold/coinGold』を選択して、『Properties』パネルの『Animation』を下図のように設定します。
    • 『Defalut Clip』:『Assets』パネルの『assets/animation/coinBouncing』をドラッグ&ドロップで登録します。
    • 『Play On Load』:チェックを入れます。
    f:id:mmorley:20200429114421p:plain

コインにコライダーを追加する

 プレイヤーがコインに接触したか判定するためにコライダーを設定します。
 物理的に接触(衝突)する必要はないのでセンサーにします。
 

    Cocos Creatorで作業

  1. 『Node Tree』パネルで『Canvas/coinGold/coinGold』を選択して、『Properties』パネルの『Add Component』→『Physics Component』→『Collider』→『Circle』をクリックします。
    f:id:mmorley:20200424190630p:plain
  2. 『Node Tree』パネルで『Canvas/coinGold/coinGold』を選択して、『Properties』パネルの『RigidBody』と『PhysicsCircleCollider』を下図のように設定します。
    f:id:mmorley:20200424203837p:plain

コインにスクリプトを追加する

 コインを取得した時に消えるアニメに切り替える処理と、コインノードを破棄する処理を追加します。
 

    Cocos Creatorで作業

  1. 『Assets』パネルで『script』フォルダを右クリック→『Create』→『Typescript』をクリックします。
  2. 作成されたファイルの名前を"coin"に変更します。
  3. 『Node Tree』パネルで『Canvas/coinGold/coinGold』を選択して、『Properties』パネルの『Add Component』→『Custom Component』→『coin』をクリックします。
    f:id:mmorley:20200424194113p:plain
  4. 『Assets』パネルで『assets/script/coin』をダブルクリックします。
    VS Codeが起動します。

    VS Codeで作業

  5. 下記のようにコードを変更します。

    const {ccclass, property} = cc._decorator;
    
    @ccclass
    export default class Coin extends cc.Component { // クラス名をNewClassからCoinにする
    
        getCoin () { // プレイヤーがコインを取得した時の処理
            this.node.getComponent(cc.Animation).play("coinFadeout"); // coinFadeoutを再生する
        }
    
        destroyNode () {// キーフレームイベント:親ノードを破棄する
            this.node.parent.destroy(); // 親ノードを破棄する
        }
    }
    

コインノードのスケールを変更する

 親ノードのほうの『coinGold』でスケールを設定します。
 親ノードのスケールを変更すると、跳ねるアニメーションの移動距離にもスケールが適用されます。 
 

    Cocos Creatorで作業

  1. 『Node Tree』パネルで『Canvas/coinGold』を選択して、『Properties』パネルの『Node』を下図のように設定します。
    f:id:mmorley:20200424202114p:plain

コインノードをプレハブ化する

 編集したオブジェクトをAssetsフォルダにドラッグ&ドロップするとプレハブが作成されます。
 

    Cocos Creatorで作業

  1. 『Assets』パネルで『assets』フォルダを右クリック→『Create』→『Folder』をクリックします。
  2. 作成されたフォルダの名前を"prefab"に変更します。
    f:id:mmorley:20200424202402p:plain
  3. 『Node Tree』パネルの『Canvas/coinGold』を『Assets』パネルの『assets/prefab』フォルダにドラッグ&ドロップします。
    f:id:mmorley:20200501194247p:plain
  4. 『Node Tree』パネルの『Canvas/coinGold』を右クリック→『Delete』をクリックして削除します。
    f:id:mmorley:20200424203322p:plain

今回作成したファイル

 今回の作業によって下記のファイルのようになります。

 
 今回はここまでです。お疲れさまでした。
 
 続きは、こちらの記事です。