今回はパーティクルのお話。
地味にマインクラフトに欠かせない要素なので内容がやたら濃いです。
頑張って覚えましょう
解説内の表記について
解説内で出てくる丸括弧はデータを表しています。つまり各々で変える部分。例は下記の通り
(String)
⇒"abcdef"
,"Hello World"
(Integer)
⇒123456
,1024
(Float)
⇒0.625
,10000000000.0
(Value)
⇒0.625
,10000000000.0
(Bool)
⇒true
,false
(Object)
⇒{"data": (Integer), ... , "data_256": (String)}
(Molang)
⇒"variable.size = math.sin((query.ground_speed/30)*360);"
(*****+)
とは通常の(Integer)
,(Value)
などの使い方に加え、設定した範囲内でランダムな値も使えるということです。{"min": (Integer),"max": (Integer)}
のようにすると、ランダムな値を設定できます。
(List ****)
はそれぞれの配列型を示します。例:["egg","chicken"]
(***/***)
は複数の型に対応してます。
Molangについて
MolangとはMinecraft内で使うことができるスクリプト言語(のようなもの)です。
エンティティデータの読み出しや、単純な数学演算ができるようになります
記述方法は(String)
と同じくダブルクォーテーションを用います。
いくつかの例
"math.abs(math.sin(variable.vertical));"
"query.is_eating ? variable.test = math.random(1, 10) : variable.test = 0;"
"variable.age_progress=variable.emitter_age/variable.emitter_lifetime;variable.active_time = 10;"
ディレクトリ構造とサンプル作成
サンプル
アドオンの中では珍しく、リソースパックしか使わない内容になってます。
manifest.jsonはmanifest.jsonの手引き【Minecraft】見てね
テクスチャは各々で作ってくださいね。(というか解説のしようがない)
リソースパックのルートにparticles
フォルダを作っておく。
オリジナルパーティクルたちはこの中に入れる感じになります。
つまりこうなる↓
-
particles
- testparticle_1.json
- testparticle_2.json
-
textures
-
1_toka
- testparticle_1.png
- testparticle_2.png
-
1_toka
- manifest.json
- pack_icon.png
この場合だと2つ入ってるわけですね。(testparticle_1とtestparticle_2)
サンプル
二つ作ったので見てみましょう。
1つ目
1つ目はたくさん出てきて上に飛んでいくみたいなやつですね(雑)
飛んでいく間にブロックに当たると跳ね返ったりもする。
二つ目
大きくなったり小さくなったりしながら虹色になるやつ(雑)
言われてもなんだかイメージが湧きにくいと思うので動画↓
その他のサンプル
エミッタについて
オリジナルパーティクルにおいてエミッタを知っておかないと話が進みません。
英語で書くと「Emitter」。直訳すると「放射する」とか「発行する」という意味があります。
マイクラのパーティクルにおけるエミッタとはパーティクルの発生源(点、もしくは領域)と考えて構いません
つまり、エミッタが無ければ個々のパーティクル発生しないということになります。
定義されているMolang変数
オリジナルパーティクル内で使用できる変数です。
変数名 | 詳細 |
---|---|
variable.emitter_lifetime |
エミッタの1サイクルの寿命 |
variable.emitter_age |
エミッタのサイクルが始まってからの時間 |
variable.particle_lifetime |
パーティクルの寿命 |
variable.particle_age |
パーティクルが発生してからの時間 |
variable.emitter_random_1 |
0.0 ~1.0 までのランダム。値は1サイクル一定 |
variable.emitter_random_2 |
0.0 ~1.0 までのランダム。値は1サイクル一定 |
variable.emitter_random_3 |
0.0 ~1.0 までのランダム。値は1サイクル一定 |
variable.emitter_random_4 |
0.0 ~1.0 までのランダム。値は1サイクル一定 |
variable.particle_random_1 |
0.0 ~1.0 まで、パーティクルごとのランダム。 |
variable.particle_random_2 |
0.0 ~1.0 まで、パーティクルごとのランダム。 |
variable.particle_random_3 |
0.0 ~1.0 まで、パーティクルごとのランダム。 |
variable.particle_random_4 |
0.0 ~1.0 まで、パーティクルごとのランダム。 |
variable.entity_scale |
関連付けられているエンティティのスケール(いる場合) |
description内のコンポーネント解説
-
"identifier": (String)
- パーティクルのID。このIDがそのままコマンド入力時ID等々になります。
- (「[パックで共通のID]:[レシピのID]」の形式で書くことをおすすめします。例、
"minecraft:critical_hit_emitter"
、"toka7290:testparticle_2"
等) -
"basic_render_parameters": (Object)
- レンダーについての設定項目
-
-
"material": (String)
- このパーティクルのマテリアル設定
- 使える値は以下の通り
-
値 詳細 "particles_alpha"
透過部分は透過する。何か特別なこだわりがなければこれ "particles_opaque"
すべて非透過 "particles_blend"
透明に加えて半透明も可 -
"texture": (String)
- テクスチャのパスを示します。パスはmanifest.jsonの階層から始めます。
- ファイルの拡張子は省略した形で入力
-
curvesのコンポーネント解説
curvesとはMolangでは表せない非線形曲線に基づく値を出力する機能です
-
"molangvar": (Object)
- ここにおける
"molangvar"
とは、本来Molangの変数名(variable.*****
)が入ります。 - この変数がそのまま出力になります。出力値は
0.0
~1.0
まで。 -
-
"type": (String)
- 線形を設定します。種類は以下の通り
-
"linear"
各ノード間を直線で結びます。-
"catmull_rom"
各ノード間をCatmull-Rom曲線で結びます。Catmull-Rom曲線のイメージ↓
Catmull-Rom曲線を使用する場合、最初と最後のノードは無視されます。(つまり2番目から最後から2番目までが値となる)
"bezier"
ベジェ曲線。なぜかエラーになる。個人的に非推奨
-
"input": (float/Molang)
- 入力値。上図の横軸になる。
- 入力値は
0.0
~1.0
までになるようにする。 -
"horizontal_range": (float/Molang)
- 入力値の最大範囲。入力範囲は
0
とここで設定した範囲まで。 -
"nodes": (List float/List Molang)
- 各ノードの値。ノードは等間隔に置かれます。
-
components内のコンポーネント解説
エミッタ初期状態コンポーネント
エミッタが作成されたときの定義コンポーネントです。
-
"minecraft:emitter_local_space": (Object)
- エミッタの位置、回転をエンティティにアタッチします。
-
-
"position": (Bool)
- エミッタの位置をエンティティにアタッチします。
true
で有効。false
がデフォルト。-
"rotation": (Bool)
- エミッタの回転をエンティティにアタッチします。
true
で有効。false
がデフォルト。"position": false
の場合、true
の設定は無効な状態になります。
-
-
"minecraft:emitter_initialization": (Object)
- エミッタ起動時、更新時に実行するMolangを設定します。
-
-
"creation_expression": (Molang)
- エミッタ起動時に実行するMolangを設定します。
-
"per_update_expression": (Molang)
- エミッタ更新時に実行するMolangを設定します。
-
エミッタレートコンポーネント
エミッタから放出されるパーティクルの量を定義します。
下記にあるつの内から1つを選択します。
1つもない場合エラーになります。2つ以上ある場合上位にある方が優先されます。
-
"minecraft:emitter_rate_instant": (Object)
- エミッタがアクティブになるたび放出します。
-
-
"num_particles": (float/Molang)
- 一度に放出される量を設定します。
- デフォルトは
10
です。
-
-
"minecraft:emitter_rate_steady": (Object)
- エミッタがアクティブな間放出します。
-
-
"spawn_rate": (float/Molang)
- 放出される量を設定します。単位は「パーティクル/秒」です。
- デフォルトは
1
です。 -
"max_particles": (float/Molang)
- 放出できる最大量
- デフォルトは
50
です。
-
-
"minecraft:emitter_rate_manual": (Object)
- ゲームシステムがエミッターに放出するように指示した場合に使用
- 情報によると古いパーティクルに使用されるらしい
-
-
"max_particles": (float/Molang)
- 放出できる最大量。放出されるごとに評価されます。
- デフォルトは
50
です。
-
エミッタライフタイムコンポーネント
エミッタの寿命、アクティブ制御を行います。
1つもない場合エラーになります。
-
"minecraft:emitter_lifetime_looping": (Object)
- 削除されるまで、アクティブと休止を繰り返し(ループ)ます。
-
-
"active_time": (float/Molang)
- アクティブ時間を設定します。単位は「秒」です。
- デフォルトは
10
です。 -
"sleep_time": (float/Molang)
- 休止時間を設定します。単位は「秒」です。
- デフォルトは
0
です。
-
-
"minecraft:emitter_lifetime_once": (Object)
- ループせず、アクティブ時間が終了するか、設定されたパーティクルがすべて放出された場合終了します。
-
-
"active_time": (float/Molang)
- アクティブ時間を設定します。単位は「秒」です。
- デフォルトは
10
です。
-
-
"minecraft:emitter_lifetime_expression": (Object)
- アクティベーション式によってアクティブ状態と終了を制御します。
-
-
"activation_expression": (float/Molang)
- 値が
0
以外の場合、エミッタがアクティブになります。 - デフォルトは
1
です。 -
"expiration_expression": (float/Molang)
- 値が
0
以外の場合、エミッタは終了します。 - デフォルトは
0
です。
-
-
"minecraft:emitter_lifetime_events": (Object)
- アクティブ時、終了時などにイベントをトリガーします。(情報不足中)
- 上記のライフタイムコンポーネントと併せて使用します。
-
-
"creation_event": (String/List String)
- エミッタがアクティブになるとイベントがトリガーします。
-
"expiration_event": (String/List String)
- エミッタが終了するとイベントがトリガーします。
-
"timeline": (Object)
- 時間によってトリガーします。(Object)内の書式例は↓
- "time": (String/List String)
- 例:
"timeline": {
 "0.4": "event"
}
-
"travel_distance_events": (Object)
- 詳細情報はありません
- エミッタの移動距離によってトリガーします。(Object)内の書式例は↓
- "distance": (String/List String)
- 例:
"travel_distance_events": {
 "1.0": "event"
}
-
"looping_travel_distance_events": (List Object)
- 詳細情報はありません
- エミッタの移動距離によってトリガーします。
- トリガーされるイベントはパーティクル内で定義されたものに限ります。
- 例:
"looping_travel_distance_events": {
 "distance": 1.0,
 "effects": "events"
}
-
エミッタ形状コンポーネント
エミッタの形状に関するコンポーネントです。
1つもない場合"minecraft:emitter_shape_point"
になります。
2つ以上の場合挙動不定(不審)になります。
-
"minecraft:emitter_shape_point": (Object)
- エミッタ形状を点にします。
-
-
"offset": (List float/List Molang)
- 設定したオフセットからパーティクルが出てきます。
- デフォルトは
[0, 0, 0]
-
"direction": (List float/List Molang)
- 放出されるパーティクルの方向を設定します。
- パーティクル毎に評価されます。
-
-
"minecraft:emitter_shape_sphere": (Object)
- エミッタ形状を球体にします。
-
-
"offset": (List float/List Molang)
- 設定したオフセットからパーティクルが出てきます。
- デフォルトは
[0, 0, 0]
-
"radius": (float/Molang)
- 球体の半径を設定します。
- デフォルトは
1
です。 -
"surface_only": (Bool)
- 球体の表面のみからパーティクルを放出します。
true
で有効。デフォルトはfalse
です。-
"direction": (String/List float/List Molang)
- 放出されるパーティクルの方向を設定します。
- パーティクル毎に評価されます。
- デフォルトは
"outwards"
です。 -
"outwards"
球体の外側に向かってパーティクルが放出されます。"inwards"
球体の内側に向かってパーティクルが放出されます。
-
-
"minecraft:emitter_shape_box": (Object)
- エミッタ形状を箱状にします。
-
-
"offset": (List float/List Molang)
- 設定したオフセットからパーティクルが出てきます。
- デフォルトは
[0, 0, 0]
-
"half_dimensions": (List float/List Molang)
- ボックスのサイズを設定します。
- 値は中心からのサイズになります。(つまり、設定した倍の値が実際の高さ。)
-
"surface_only": (Bool)
- ボックスの表面のみからパーティクルを放出します。
true
で有効。デフォルトはfalse
です。-
"direction": (String/List float/List Molang)
- 放出されるパーティクルの方向を設定します。
- パーティクル毎に評価されます。
- デフォルトは
"outwards"
です。 -
"outwards"
ボックスの外側に向かってパーティクルが放出されます。"inwards"
ボックスの内側に向かってパーティクルが放出されます。
-
-
"minecraft:emitter_shape_disc": (Object)
- エミッタ形状を円盤状にします。
-
-
"offset": (List float/List Molang)
- 設定したオフセットからパーティクルが出てきます。
- デフォルトは
[0, 0, 0]
-
"radius": (float/Molang)
- 円盤の半径を設定します。
-
"surface_only": (Bool)
- 円盤の表面のみからパーティクルを放出します。
true
で有効。デフォルトはfalse
です。- デフォルトは
1
です。 -
"plane_normal": (String/List float/List Molang)
- 法線を設定します。
"x"
、"y"
、"z"
はそれぞれの軸の方向に垂直になります。 [(float/Molang),(float/Molang),(float/Molang)]
で任意の法線方向にできます。-
"direction": (List float/List Molang)
- 放出されるパーティクルの方向を設定します。
- パーティクル毎に評価されます。
-
-
"minecraft:emitter_shape_custom": (Object)
- Molang式に基づいてパーティクルを放出します。
- 詳細不明。
-
-
"offset": (List float/List Molang)
- 設定したオフセットからパーティクルが出てきます。
- デフォルトは
[0, 0, 0]
-
"direction": (List float/List Molang)
- 放出されるパーティクルの方向を設定します。
- パーティクル毎に評価されます。
- デフォルトは
[0, 0, 0]
-
-
"minecraft:emitter_shape_entity_aabb": (Object)
- エミッタの形状を接続されているエンティティの軸に沿ったバウンディングボックス(Axis-Aligned Bounding Box,AABB)にします。
- 軸がない場合は点になります。
-
-
"surface_only": (Bool)
- AABBの表面のみからパーティクルを放出します。
true
で有効。デフォルトはfalse
です。-
"direction": (String/List float/List Molang)
- 放出されるパーティクルの方向を設定します。
- パーティクル毎に評価されます。
- デフォルトは
"outwards"
です。 -
"outwards"
ボックスの外側に向かってパーティクルが放出されます。"inwards"
ボックスの内側に向かってパーティクルが放出されます。
- デフォルトは
[0, 0, 0]
-
パーティクル初期状態コンポーネント
各パーティクルの初期設定を定義します
-
"minecraft:particle_initial_spin": (Object)
- パーティクルに角度を設定します。
-
-
"rotation": (float/Molang)
- 発生時の角度を設定します。単位は「度」です。
- デフォルトは
0
-
"rotation_rate": (float/Molang)
- 角速度を設定します。単位は「度/秒」です。
- 設定した速度で回転します。
- デフォルトは
0
-
-
"minecraft:particle_initial_speed": (float/Molang/List float/List Molang)
- パーティクルに速度を設定します。
- デフォルトは
0
- 例:
[1,5,-2]
,10
パーティクルモーションコンポーネント
パーティクルの移動、回転に関する定義です。
-
"minecraft:particle_motion_dynamic": (Object)
- パーティクルの加速度、抵抗係数などを設定します。
-
-
"linear_acceleration": (List float/List Molang)
- パーティクルの線形加速度を設定します。単位は「ブロック/秒/秒」です。
- デフォルトは
[0, 0, 0]
-
"linear_drag_coefficient": (float/Molang)
- パーティクルの抵抗係数を設定します。
- 公式曰く空気抵抗と考えてかまわないとのこと
- 式は次の通り
acceleration === -linear_drag_coefficient * velocity
- デフォルトは
0
-
"rotation_drag_coefficient": (float/Molang)
- パーティクルの回転抵抗係数を設定します。
- 式は次の通り
rotation_acceleration +== -rotation_rate * rotation_drag_coefficient
- デフォルトは
0
-
-
"minecraft:particle_motion_parametric": (Object)
- パーティクルの位置、方向、向きを直接設定します。
-
-
"relative_position": (List float/List Molang)
- エミッタからの相対位置を示します。
- デフォルトは
[0, 0, 0]
-
"direction": (List float/List Molang)
- パーティクルの方向を設定します。
-
"rotation": (float/Molang)
- パーティクルの回転角度を設定します。単位は「度」です。
- デフォルトは
0
-
-
"minecraft:particle_motion_collision": (Object)
- ブロックとの衝突判定を設定します。
-
-
"enabled": (Bool/Molang)
- パーティクルの衝突判定を有効にします。
true
で有効。デフォルトはtrue
です。-
"collision_drag": (Float)
- 衝突抗力を設定します。単位は「ブロック/秒/秒」です。
- 衝突時に値の量だけパーティクルの速度を変更します
-
"coefficient_of_restitution": (Float)
1.0
で元の高さに戻る。0.0
で跳ねない- 中間値は跳ねたあと速度を失います。
-
"collision_radius": (Float)
- あたり判定の大きさ。
- 1/2ブロック以下にしなければならない。
-
"expire_on_contact": (Molang)
- 衝突時にパーティクルを削除します。
-
"events": (Object/ListObject)
- 衝突時にイベントをトリガーします。
- 例:
"events": {
 "event": "eventName",
 "min_speed": 4
}
"min_speed"
はイベントのトリガー間隔。単位は「ブロック/秒」。デフォルトおよび最低値は2
-
パーティクル外観コンポーネント
パーティクルの見た目に関する定義です。
-
"minecraft:particle_appearance_billboard": (Object)
- パーティクルを看板(ビルボード,billboard)として特定の方向を向いた形としてレンダリングします。
- 必須コンポーネント。無い場合、視認不可能になります。
-
-
"size": (List float/List Molang)
- ビルボードのサイズを設定します。
- つまりはパーティクルの大きさ。
- 毎フレームごとに評価されます。
- 例:
[ 1, 1 ]
-
"facing_camera_mode": (String)
- ビルボードの向きを設定します。値は以下の通り
-
"rotate_xyz"
プレイヤーカメラに垂直に表示します。つまり、どの位置にあってもカメラの方向向いてる。"rotate_y"
プレイヤーカメラの向きに表示します。つまり、どの位置にあってもカメラ方向に正面向いてる。"lookat_xyz"
プレイヤーカメラの方向を向きます。つまり、どの位置にあってもカメラの中心向いてる。"lookat_y"
プレイヤーカメラの方向を向きます。つまり、どの位置にあってもカメラ方向に中心向いてる。"direction_x"
X軸に垂直に配置される。"direction_y"
Y軸に垂直に配置される。"direction_z"
Z軸に垂直に配置される。
-
"uv": (Object)
- パーティクルのUVを設定します。
-
-
"texture_width": (Integer)
- テクスチャの幅を指定します。
1
に設定すると自動的に正規化されます。-
"texture_height": (Integer)
- テクスチャの高さを指定します。
1
に設定すると自動的に正規化されます。-
"uv": (List float/List Molang)
- UVの始点を設定します。
- 例:
[0,0]
-
"uv_size": (List float/List Molang)
- UVの大きさを設定します。
- 例:
[16,16]
-
"flipbook": (Object)
- flipbook(アニメーション)テクスチャの設定をします。
- この場合、
"uv"
,"uv_size"
は不要です。 -
-
"base_UV": (List float/List Molang)
- UVの始点を設定します。
-
"size_UV": (List float)
- UVの大きさを設定します。
-
"step_UV": (List float)
- 1ステップ当たりのUV移動距離
-
"frames_per_second": (Float)
- 1秒あたりのフレーム数
-
"max_frame": (float/Molang)
- 最大フレーム数。一番最初のフレームが
1
-
"stretch_to_lifetime": (Bool)
- パーティクルの寿命と一致するようにfpsを調整する。
true
で有効。デフォルトはfalse
。-
"loop": (Bool)
- アニメーションをループさせる。
true
で有効。デフォルトはfalse
。
-
-
-
-
"minecraft:particle_appearance_tinting": (Object)
- パーティクルを特定の色で着色します。
-
-
"color": (Color/Molang/Object)
- 色を設定します。
- (Color)は
"#RRGGBB"
,[r,g,b]
,"#AARRGGBB"
,[r,g,b,a]
のいずれかを使用します。 - 配列表記の場合、値は
0.0
~1.0
まで。Hex表記の場合、各値00
~ff
まで。 - 補完を使用した複数の色を設定する場合、(Object)を使用します。その場合は以下の通り(記事書いてる本人はよくわかってない)
-
-
"gradient": (List Color/Object)
- 色の配列を設定します。
- 配列で設定する場合ソートされ、等間隔に並んでいると解釈されます。値は
0.0
~1.0
までの範囲です。 "interpolant"
で指定した値で内挿を行い色を補完します。- 記述例:
["#24da22","#BB55ff"]
,{ "0.2" : [1,0.23,0.33,1], "0.4" : [0.55,0.22,1.0,1]}
-
"interpolant": (float/Molang)
- 内挿の値
"curves"
の使用が推奨されています。
-
-
-
"minecraft:particle_appearance_lighting": {}
- パーティクルを周りの照明条件にあわせて色を変えます。
- コンポーネントがあるとで有効。ないと無効。
- 無効の場合、周囲の明るさによらず一定の色になる
パーティクルライフタイムコンポーネント
パーティクルの寿命制御を定義します。
-
"minecraft:particle_lifetime_expression": (Object)
- 標準ライフタイムコンポーネント。
- 通常これを使います。
-
-
"expiration_expression": (float/Molang)
- 値が
0
以外の時パーティクルは消えます。 - 評価はフレーム毎行われます。
- デフォルトは
0
。 -
"max_lifetime": (float/Molang)
- 最大寿命を設定します。
- 設定した時間経過するとパーティクルは消えます。
- 時間だけでパーティクルを制御したい場合は
"expiration_expression"
あっても無くてもよい。ただし0
にすること。
-
-
"minecraft:particle_lifetime_events": (Object)
- パーティクル発生時、終了時などにイベントをトリガーします。
-
-
"creation_event": (String/List String)
- パーティクルが発生したときにイベントをトリガーします。
-
"expiration_event": (String/List String)
- パーティクルが消えたときにイベントををトリガーします。
-
"custom_events": (Object)
- Molang式によってイベントをトリガーします。
- 記述例:
"custom_events": {
 "eventtrigger": (Molang),
 "eventname": (String)
}
-
"timeline": (Object)
- 時間によってイベントをトリガーします。
- 値は
0.0
~1.0
まで - 記述例:
"timeline": {
 "0.4": "event",
 "0.5": "event"
}
-
-
"minecraft:particle_expire_if_in_blocks": (List String)
- ここで定義したブロック内にパーティクルがいる場合、パーティクルは消えます。
"minecraft:particle_lifetime_expression"
と併用可- (List String)にはブロックIDを定義する。ID名はこちらから
- 記述例:
["minecraft:stone", "minecraft:dirt"]
-
"minecraft:particle_expire_if_not_in_blocks": (List String)
- ここで定義したブロック以外にパーティクルがいる場合、パーティクルは消えます。
"minecraft:particle_lifetime_expression"
と併用可- (List String)にはブロックIDを定義する。ID名はこちらから
- 記述例:
["minecraft:water", "minecraft:air"]
-
"minecraft:particle_kill_plane": (List float)
- キルプレーン(この平面にパーティクルが接触するとパーティクルは消える)を設定します。
- 設定するパラメータ(
[A,B,C,D]
)を使い次の式の要素になります。 A*x + B*y + C*z + D === 0
(平面方程式の一般形)
eventsの解説
コンポーネント内でトリガーすることのできるイベントを定義します。
複雑なのでサンプル↓
正直筆者本人がよくわかっていない
-
"effect": (String)
- パーティクルのIDを定義する。
-
"type": (String)
- 値は以下の通り
-
値 詳細 "emitter"
イベントの発生した位置に "effect"
タイプのエミッタを生成します。"emitter_bound"
同上。スポーンするエミッタがactor/locatorにバインドされます。 "particle"
"effect"
タイプのエミッタに手動でパーティクルを放出します。スポーンされるエミッタには"minecraft:emitter_rate_manual"
を必ず使用すること"particle_with_velocity"
同上。新しいパーティクルはスポーンされたパーティクルとの速度を継承します。 -
"expression": (String)
- イベントを起動するとMolang式を実行します?
- 詳細不明。
-
"log": (String)
- イベントの位置とパーティクルの名前とともにmessageをログメッセージに出力します。
-
"sequence": (List Object)
- 配列内を順に実行します。
-
"randomize": (List Object)
- 配列内をランダムに実行します。
-
"weight": (Float)
- ランダム実行する際の優先度。
- 20-04-09更新
- 内容の一部修正をしました
- 2020-05-01更新
- リンクの修正をしました
- 2020-08-25更新
- リンクの修正をしました
- デザインの一部変更をしました
- 2020-12-11更新
- 表示が一部崩れる問題を修正しました。
- 一部内容の補完と修正を行いました。
- 2021-04-22更新
- 公式サンプルパックへのリンクを追加しました。
- 更新
- 表記ミスの修正