ようこそぷっこ村へ、アドオン博士のししゃもです。
(・∀・)ノ
さて、今回は誰もが試してみつつも絶対に挫折するポイントである、「プレイヤーの見た目を変える」方法の最善手を考えてみます。さぁ、あなたは狭き門より入れるのか!?
プレイヤーの見た目を変える方法について
さてさて、最善手と表現したのには理由があって、実は色々な方法があります。もちろん目的によって使う方法は変わってきますが、根幹の部分の考え方は同じになります。実際変えるプレイヤーモデルを用意してあるものとして進めますね。
- プロパティを追加してレンダーコントローラーで変える。
- 何かしらのコンポーネントを追加して(mark_variantとか)レンダーコントローラーで変える。
- エフェクトでインビジブルつけて、別エンティティとして追加したモブをtpさせ続ける
とかが主な方法でしょうか。もちろん自分が知らない方法が他にもあると思います。この中で、一番スマートな方法が1番上にある、プロパティを追加してレンダーコントローラーで変える方法です。1つずつ考えてみましょっか。
プロパティを追加してレンダーコントローラーで変える
プロパティは結構最近追加された便利機能で、まぁここを見ている皆さんなら今さらでしょう。コンポーネントを使わずに割と何でもできるので、ビヘイビアのアニメーション、アニコンなどと組み合わせると非常に便利ですね。
ただ、プレイヤーに使う場合1つ欠点があって、ポーズメニューでエラーが出ます。
と言うのも、ポーズメニューで出る自キャラ(ペーパードール)はプレイヤー自身とは別エンティティのようで、プロパティが存在しないよって言われます。知らんし、あるし。公式のバニラパックにも存在しない謎の存在で、どうやってプロパティをリンクさせるのかわからんのよね。まぁ、今後何かしらの方法で修正されるとは思いますし、たぶんマケプレの商品でも出るのがあるので、使ってもギリオッケーなのではないかと思ってます(持論)。
使い方自体はスゲー簡単。↓ビヘイビア側(追加部分だけ)
"description": {
"identifier": "minecraft:player",
"properties": {
"test:event_state": {
"type": "int","default": 0,
"range": [0,10],
"client_sync": true
}
}
}
description 内に使いたいプロパティを入れて client_sync を true に設定。これでリソパ側に橋渡しできます。↓リソパ側(追加部分だけ)
"textures": {
"mario_idle": "textures/sisyamo_pv/entity/mob/mario_idle"
},
"geometry": {
"test_2d_model": "geometry.test_2d_model"
},
"animations": {
"2dcam": "animation.player.2d_cam"
},
"render_controllers": [
{ "controller.render.player.mario_root": "(q.property('test:event_state') == 1) && !variable.is_first_person && !variable.map_face_icon && !query.is_spectator" }
],
"controller.render.player.mario_root": {
"arrays": {
"textures": {
"Array.types": [
"Texture.mario_idle"
]
}
},
"geometry": "Geometry.test_2d_model",
"materials": [ { "*": "Material.default" } ],
"textures": [ "Array.types[(v.is_on_ground ? ( v.is_moving ? v.move_step : 0 ) : 1 )]" ]
こんな感じにしておくとできます。テクスチャなどは適宜ご用意ください。で、実際これを実行しますと以下のようなことができます。
なんとマリオになって横スクロールアクションゲームの世界にいけるんですね。すごいね!1つの欠点を除けばこの方法が間違いなく最善手でしょう。
次善の策、コンポーネントで切り替える方法
は?エラー出るとかキモい。そんなんエンジニアのすることじゃないわ、タヒね!っていう潔癖の方のために、別の方法も考えておきましょう。
方法としては、コンポーネントの付け変えにより、モデルを切り替える方法ですね。個人的には mark_variant が一番使いやすいと思います。この方法のいい点は、エラーが出ないってことです。欠点は、忘れた頃に見返すと魔導書かな?ってくらい複雑になりがちなのと、別のコンポーネントと混同してバグりやすいってことでしょうか。
↓ビヘイビア側(追加部分だけ)
"component_groups": {
"test:mark_variant_1": {"minecraft:mark_variant": {"value": 1}},
"test:mark_variant_2": {"minecraft:mark_variant": {"value": 2}}
},
"events": {
"test:set_mark_variant_0": {
"remove": {"component_groups": ["test:mark_variant_1"]},
"add": {"component_groups": ["test:mark_variant_0"]}
},
"test:set_mark_variant_1": {
"remove": {"component_groups": ["test:mark_variant_0"]},
"add": {"component_groups": ["test:mark_variant_1"]}
}
}
コンポーネントグループとイベントで切り替えます。↓リソパ側(重複部分省略&追加部分だけ)
"render_controllers": [
{ "controller.render.player.mario_root": "(q.mark_variant == 1) && !variable.is_first_person && !variable.map_face_icon && !query.is_spectator" }
],
リソパ側は重複部分省いてますので上手く結合して考えてね。こんな感じにしておけば、上の動画みたいに変身できます。
おまけ、コマンドでtpし続ける方法
この方法は、マイクラ内だけで完結させて、アドオン使わない方法です。ちょっとごり押しなのと、上の方法と比べると融通は利かないですね。ただ簡単なのでちょっと遊ぶにはいいかもね。
まずはリピートのとチェーン1個ずつのコマブロタワーを立てます。そしたら、
/effect @p invisibility 1 1 true
/execute as @e[type=pig,c=1] rotated as @p run tp @s @p
これらのコマンドを入力しましょう。すると……、
あら不思議、プレイヤーが豚ちゃんになっているではありませんか!?こんな感じで友達を招待して遊ぶのも面白いかもしれませんね。
まとめ
エラーがもしかしたらマケプレの審査で何か言われるかもしれませんが、基本はプロパティで変えるのが簡単で安心です。コマンドでちょっと遊びたいだけなら、2つのコマンドだけでできちゃうのでこれまた簡単!
なんや、マイクラなんか簡単やんけ!マタイもびっくりの福音でした。
適当な締めと共にこの辺で終わりたいと思います。それでは、お帰りの際はお気をつけて~(・∀・)ノシ
コメント