アドオン講座 – アニメーションコントローラー(BP)

アドオン中級編

はじめに

この記事は超初心者向けの解説となっています。
アニメーションコントローラー(animation_controller)の解説となりますがビヘイビアのアニメーションコントローラーのみの解説となります。この記事を見ても

リソースのアニコンは扱えるようにはなりません

(構造は似ていますが)

動画でも解説しております

※結構前に作ったので内容が少し古い可能性もあります。特に新しく追加された要素は動画の解説に入っていません

そもそもアニメーションコントローラーとは

アニメーションコントローラーとはその名の通りアニメーションに関係する機能です。

アニメーションコントローラーは名前が長いためアニコンと表記される場合がほとんどです。(以下アニコンで解説します)

ビヘイビアでのアニコンは仕組みさえ理解してしまえば簡単に扱う事ができます(この記事では難しい事はしません)

前提知識

  • player.jsonに変更を加える事ができる
  • 新規フォルダ、ファイルの作成ができる

今回はスニークした時にコマンドを実行するのを目標にします

アニコンの登録

アニコンは登録しないと実行できません。そのためplayer.jsonにアニコンを登録する必要があります

まずはplayer.jsonを開きます。
今回変更を加える箇所は上の方のみですので上の方だけを載せます

{
  "format_version": "1.18.20",
  "minecraft:entity": {
    "description": {
      "identifier": "minecraft:player",
      "is_spawnable": false,
      "is_summonable": false,
      "is_experimental": false
    },

    "component_groups": {
      "minecraft:add_bad_omen": {
        "minecraft:spell_effects": {
          "add_effects": [
            {
              "effect": "bad_omen",
              "duration": 6000,
              "visible": false,
              "display_on_screen_animation": true
            }
          ]
        },

ここに以下のコードを追加します

"scripts": {"animate": ["test"]},
"animations": {"test":"controller.animation.test"}

上記のコードがアニコンの登録の際に必要に必要になる物です。

私自身深い意味は理解していないので理解する必要は無いと思います。

スクリプトのアニメイトで”test”というアニメーションを常に実行させているみたいな解釈でいいです(解釈を間違っていたらすいません)

“animations”はtestというアニメーションが実行する物を指定しています

ここで使用する名前がアニコンの名前となります

つまりcontroller.animation.testを常に実行するといった処理になります。

この時controller.animation.**という形になるようにしておくのが無難です。**という部分は任意です

今回はcontroller.animation.testという名前にします

追加するとこのようになります

{
  "format_version": "1.18.20",
  "minecraft:entity": {
    "description": {
      "identifier": "minecraft:player",
      "is_spawnable": false,
      "is_summonable": false,
      "is_experimental": false,
      "scripts": {"animate": ["test"]},
      "animations": {"test":"controller.animation.test"}
    },

    "component_groups": {
      "minecraft:add_bad_omen": {
        "minecraft:spell_effects": {
          "add_effects": [
            {
              "effect": "bad_omen",
              "duration": 6000,
              "visible": false,
              "display_on_screen_animation": true
            }
          ]
        },

赤文字の部分が追加した箇所です。

falseの後ろの,を忘れないようにしましょう。構文ミスになります

これでアニコンの登録は完了しました。

念のため全てのコードをコピーしましょう。

Ctrlキーを押しながらCキーを押すとコピーのショートカットが使えます(Ctrl+Aで全選択)
Ctrl+C,Ctrl+Vは特に頻繁に使います。Ctrl+Vは貼り付けです。覚えておくとかなり役に立つと思います

Jsonの構文があっているか確認する必要があります。Jsonチェッカーを開きます
このサイトでなくてもJsonチェッカーならなんでもいいです。
Jsonチェッカーを開いたらコピーした中身を貼り付けましょう。

以下のように表示されると構文ミスが無く成功となります

Jsonチェッカー

これでplayer.jsonはもう使わないので閉じましょう

■ 広告 ■

アニコン本体の実装

アニコンの登録は完了したのでいよいよアニコン本体の実装です。

まずバニラの状態だとアニコンのフォルダが無いかと思います。

ですのでanimation_controllersというフォルダをビヘイビア内に作成しましょう

名前順にしている場合一番上に来ます

アニコンのフォルダの中に入ってファイルを新規作成します

名前はなんでも構いませんがここではtest.jsonにしておきます

そのファイルほんとにjson?

名前をtest.jsonにしましたがほんとにjsonになっていますか?

拡張子を変更した際にテキストファイルのアイコンのままだとできていない可能性が高いです。

エクスプローラー

エクスプローラーの上にある表示を押してファイル名拡張子にチェックが付いているか確認しましょう

チェックが付いているなら問題ありませんがチェックが付いていない場合ファイルの名前だけを変更しただけになるためtest.json.txtとなってしまっています(青がファイル名、赤が拡張子)

こうなっている方は必ずtest.jsonにしておきましょう

ファイルが作れたら以下のコードをコピペしましょう

{
    "format_version": "1.10.0",
    "animation_controllers": {
        "controller.animation.test": {
            "states": {
                "default": {
                    "transitions": [
                        {
                            "hide": "query.is_sneaking"
                        }
                    ]
                },
                "hide": {
                    "on_entry": [
                        "/summon zombie"
                    ],
                    "transitions": [
                        {
                            "default": "!query.is_sneaking"
                        }
                    ]
                }
            }
        }
    }
}

このコードをコピペするとスニークする度にゾンビを召喚します

解説

今回色付けした場所には意味があります。

まずアニコンは特徴として一つのアニコンから一つの状態にしかなれないという決まりがあります

ここでいう状態とはdefaultとhideの事を指します。

まず初めにワールドに入った際にアニコンはdefaultの状態になります。黄色い部分で囲った部分ですね

次にtransitionsという部分でプレイヤーの状態と一致する物があるかどうかを検知します。

今回仕様しているquery.is_sneakingはスニークしているかを検知します。

ちなみに!query.is_sneakingにするとスニークしていない時にできます

{
    "format_version": "1.10.0",
    "animation_controllers": {
        "controller.animation.test": {
            "states": {
                "default": {
                    "transitions": [
                        {
                            "hide": "query.is_sneaking"
                        }
                    ]
                },
                "hide": {
                    "on_entry": [
                        "/summon zombie"
                    ],
                    "transitions": [
                        {
                            "default": "!query.is_sneaking"
                        }
                    ]
                }
            }
        }
    }
}

この場合defaulttransitionsスニークしている時hideに移動する。といった流れになります

hideに来た時にon_entry内にあるコマンドを実行します。

この時、transitionsに帰る命令をしないとワールドに入ると一度しか実行されなくなります。

アニコンが実行できたけど一回しか実行されないって事案の原因はこの帰る命令がおかしいとおこります

hideのtransitionsは!query.is_sneakingですのでスニークしていない時が条件になります

ちなみにここでtransitionsを(1.0)にするとスニークしている間ずっとゾンビが召喚され続けます

例えばquery.is_sneakingをvariable.attack_timeに変更すると攻撃した時を条件にできます。

query.**は物凄い量があるため詳しく知りたい方は公式ドキュメントを見る事をおススメします

■ 広告 ■

よく使う条件

最後に頻繁に使うqueryを一部紹介します

query.is_sneaking:スニーク検知

variable.attack_time:攻撃した検知

query.scoreboard(‘スコア名’) == 0:スコア名で指定したスコアが0の時を検知

query.get_equipped_item_name == ‘apple’:リンゴを持っている時

このタイプは旧式で推奨はされていません。

この5つさえ覚えておけば大体の事はできます。(攻撃した時に~、スニークした時に~、

ダイヤを持ってスニークした時にスコアがN以上の時に~)

更にできる事

前提条件

  • エンティティのイベントに関して理解している

アニコンはコマンドの実行だけでなくエンティティのイベントの実行もできます

eventコマンドは気にするな

やり方に関しては物凄く簡単です。

@s イベント名

たったこれだけです。

superというイベントを実行したいなら

"on_entry": ["@s super"],

たったこれだけです。

テンプレート

■ 広告 ■
アニコン
MediaFire is a simple to use free service that lets you put all your photos, documents, music, and video in a single pla...

おわり

アニコンが使えるようになると世界が変わるレベルでできる事が増えます。特にスニーク検知はできる事が一気に増えるため覚えておいて損は無いでしょう

コメント