0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

FMBEで一度だけmolangを実行したい

Last updated at Posted at 2025-09-17

課題

FMBEにおいて、playanimationコマンドで記述したmolangをコマンド実行直後の1tickのみ実行したい。

解決策

molangの文末にreturn 1;を記述する。


詳細な解説

はじめに

執筆時点での環境はMinecraftBE 1.21.101です。FMBEは今後のアップデートで利用できなくなる可能性のある技術ですので、ご注意ください。また、この記事は備忘録を兼ねており、一部厳密でない説明が含まれる場合があります。

/playanimationコマンドとアニメーションの仕組み

まず、/playanimationコマンドの基本と、その動作に必要なアニメーションの仕組みについて説明します。

/playanimationコマンドの構文

このコマンドは、entityに特定のアニメーションを再生させるためのものです。

/playanimation <entity: target> <animation: string> [next_state: string] [blend_out_time: float] [stop_expression: string] [controller: string]

特に重要なのが以下の引数です。

  • stop_expression: アニメーションを停止し、次のstateへ移るための遷移条件をMolangで記述します
  • next_state: stop_expressionが満たされたときに遷移する先のstateです
  • controller: このアニメーションを管理するanimation_controllerを指定します

これらの引数を正しく理解するために、Minecraftのアニメーションがどのような要素で構成されているかを知る必要があります。

前提知識:アニメーションを構成する3要素

Minecraftのアニメーションは、主に以下の3つの要素の関係性によって制御されています。

image.png

  1. animation_controller

    • アニメーション全体を管理する親のような存在です。1つのentityは複数のanimation_controllerを持つことができます
  2. state(状態)

    • 「歩いている状態」「攻撃している状態」など、entityの特定の状態を指します。どのstateにいるかによって、再生されるアニメーションが決まります
  3. transition(遷移)

    • あるstateから別のstateへ移るための「きっかけ」です
    • transitionは「遷移条件」と「遷移先state」のセットで定義されます
    • 最も重要な点は、Minecraftのシステムが毎tick、現在のstateが持つtransitionの遷移条件を常にチェックしていることです。条件を満たすものが見つかると、対応する「遷移先state」へ移動します

return 1;がMolangを1tickで停止させる仕組み

/playanimationコマンドを実行すると、stop_expressionを遷移条件とする特殊なtransitionが一時的に追加された状態になります。

return 1; がない場合

stop_expressionreturn 1;のような明確な返り値がない場合、遷移条件は満たされない(false)と判定されます。

  • 1tick目: 遷移条件が評価されますが、falseなのでstateは遷移しません。しかし、この評価の一部としてMolangが実行されます
  • 2tick目: entityはまだ元のstateに留まっているため、システムは再び同じ遷移条件を評価します。これにより、Molangがもう一度実行されてしまいます
  • 3tick目以降: stateが遷移しない限り、これが繰り返されます

return 1; がある場合

Molangでは、1true(真)を意味します。return 1;を記述すると、遷移条件が即座に満たされたと判定されます。

  • 1tick目: 遷移条件が評価され、return 1;によりtrueと判定されます。これにより、next_stateで指定したstateへの遷移が即座に発生します。この過程でMolangが1回実行されます
  • 2tick目: entityは既に別のstateに移動済みです。そのため、前回のstop_expressionは評価対象から外れ、Molangが再度実行されることはありません

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?